Software">
Nothing Special   »   [go: up one dir, main page]

Programación en MIPS

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 19

Programación en MIPS

Programación en MIPS
 Camino típico:
1. Ensamblador de MIPS. Traduce instrucciones de
lenguaje ensamblador a lenguaje de máquina.
2. Probar el código en un simulador de MIPS.
3. Correr el código objeto en un sistema MIPS real.

Universidad de Sonora Arquitectura de Computadoras 2


Programación en MIPS
 Dos sistemas para Windows:
 MARS. Desarrollado en Missouri State University.
http://courses.missouristate.edu/KenVollmar/MARS/
 SPIM. Desarrollado en la Universidad de Wisconsin.
http://www.cs.wisc.edu/~larus/spim.html
 Ambos sistemas ofrecen:
 Interface gráfica de usuario.
 Ensamblador extendido con seudo-instrucciones.
 Simulador de una arquitectura MIPS.

Universidad de Sonora Arquitectura de Computadoras 3


MARS
 MARS tiene algunas ventajas:
 Configurable.
 Herramientas. Por ejemplo para visualizar los accesos a
memoria y un simulador de un caché de datos.
 No requiere instalación (privilegios de administrador).

Universidad de Sonora Arquitectura de Computadoras 4


Uso de la memoria
 Por convención, los sistemas basados en MIPS
dividen la memoria en 3 segmentos:
1. Segmento de texto (text segment).
2. Segmento de datos (data segment).
3. Segmento de pila (stack segment).

Universidad de Sonora Arquitectura de Computadoras 5


Segmento de texto
1. El segmento de texto, a partir de la dirección
40000016, es donde se guarda el código del
programa.
En los programas, el segmento de texto se marca por
medio de la instrucción .text.

Universidad de Sonora Arquitectura de Computadoras 6


Segmento de datos
2. El segmento de datos (data segment), a partir de la
dirección 1000000016, es donde se guardan los datos.
Se indica por medio de la instrucción .data.
A su vez, el segmento de datos consta de dos partes:
a) Datos estáticos. Contiene variables de tamaño fijo y
que necesitan ser accesados durante todo el
programa. Por ejemplo, variables globales.
b) Datos dinámicos. Contiene variables que se crean
durante el programa. Por ejemplo, espacio asignado
con malloc en C, u objetos creados en Java.

Universidad de Sonora Arquitectura de Computadoras 7


Segmento de pila
3. El segmento de pila (stack segment), a partir de la
dirección 7FFFFFFC16, es donde se guardan los stack
frames.

Universidad de Sonora Arquitectura de Computadoras 8


Uso de la memoria
7FFFFFFC16
Segmento de pila

Datos dinámicos
Segmento de datos
Datos estáticos
1000000016
Segmento de texto
40000016
Reservado

Universidad de Sonora Arquitectura de Computadoras 9


Acceso a la memoria
 Por convención, los sistemas MIPS dedican el registro
$gp como apuntador a los datos estáticos.
 Asignándole a $gp la dirección 1000800016 y usando
constantes de 16 bits con signo, el programa puede
accesar los primeros 64KB del segmento de datos
(direcciones 1000000016 a 1001000016).
 Por ejemplo, la instrucción:
lw $v0, 0x8000($gp)
Carga la palabra que comienza en 1000000016.

Universidad de Sonora Arquitectura de Computadoras 10


Llamadas a sistema
 SPIM y MARS ofrecen servicios tipo sistema operativo
a través de la instrucción syscall.
 Los servicios permiten leer del teclado, escribir a la
consola y manejar archivos del sistema.
 Para pedir un servicio, el programa carga el número
de servicio en $v0 y los argumentos en $a0-$a3. Los
servicios que regresan un valor lo hacen en $v0.

Universidad de Sonora Arquitectura de Computadoras 11


Hola mundo en MIPS
.data
str:
.asciiz “Hola mundo”
.text
main: li $v0, 4 # llamada al sistema para print_str
la $a0, str # dirección del string a imprimir
syscall # imprime el string
li $v0, 10 # llamada al sistema para terminar
syscall # termina
Universidad de Sonora Arquitectura de Computadoras 12
Llamadas al sistema
Servicio Código Argumentos Resultado
print_int 1 $a0 = integer
print_float 2 $f12 = float
print_double 3 $f12 = float
print_string 4 $a0 = string
read_int 5 integer (en $v0)
read_float 6 float (en $v0)
read_double 7 double (en $v0)
read_string 8 $a0 = buffer, $a1 = tamaño
sbrk 9 $a0 = cantidad dirección (en $v0)
exit 10
print_char 11 $a0 = char
read_char 12 char (en $v0)
open 13 $a0 = nombre del archivo (string), $a1 = banderas, $a2 = modo handle (en $a0)
read 14 $a0 = handle, $a1 = buffer, $a2 = tamaño num. de caracteres leídos (en $a0)
write 15 $a0 = handle, $a1 = buffer, $a2 = tamaño num. de caracteres escritos (en $a0)
close 16 $a0 = handle
exit2 17 $a0 = result

Universidad de Sonora Arquitectura de Computadoras 13


Lenguaje ensamblador
 Comentarios con gato (#) o punto y coma (;).
 Los identificadores pueden tener letras, números,
puntos (.) y guiones bajos (_). No pueden comenzar
con número.
 Los opcodes son palabras reservadas.
 Las etiquetas terminan con dos puntos (:).
.data
item: .word 1
.text
.globl main # Debe ser global
main: lw $t0, item
Universidad de Sonora Arquitectura de Computadoras 14
Lenguaje ensamblador
 Los números están en base 10 por default. La base 16
se indica con 0x.
 Los strings se encierran con comillas dobles (“”).
 Caracteres especiales en strings como en C
 Nueva línea \n
 Tabulador \t
 Comilla \“

Universidad de Sonora Arquitectura de Computadoras 15


Directivas del ensamblador
 .align n – Alinea el dato a 2n bytes. Con n=0 se
suspende la alineación hasta el siguiente .data.
 .ascii str – Almacena un string en memoria, pero no lo
termina en nulo.
 .asciiz str - Almacena un string en memoria y lo
termina en nulo.
 .byte b1…bn – Almacena los valores en bytes
consecutivos de memoria.

Universidad de Sonora Arquitectura de Computadoras 16


Directivas del ensamblador
 .data [dir] – Define el comienzo del segmento de
datos. Si el argumento opcional dir está presente, el
segmento comienza en esa dirección.
 .double d1,…, dn – Almacena los valores reales de doble
precisión en localidades consecutivas de memoria.
 .extern sym size – Declara que el dato almacenado en
sym tiene tamaño size y es global. El dato está
guardado en el segmento de datos.
 .float f1,…, fn – Almacena los valores reales de precisión
sencilla en localidades consecutivas de memoria.
Universidad de Sonora Arquitectura de Computadoras 17
Directivas del ensamblador
 .globl sym – Declara que sym es global y puede ser
accesado desde otros archivos.
 .half h1,…, hn – Almacena los datos de 16 bits en
medias palabras consecutivas de memoria.
 .kdata [dir] – Define el comienzo del segmento de
datos del kernel. Si el argumento opcional dir está
presente, el segmento comienza en esa dirección.
 .ktext [dir] – Define el comienzo del segmento de
código del kernel. Si el argumento opcional dir está
presente, el segmento comienza en esa dirección.
Universidad de Sonora Arquitectura de Computadoras 18
Directivas del ensamblador
 .space n – Reserva n bytes de espacio en el segmento
actual. En SPIM debe ser el segmento de datos.
 .text [dir] – Define el comienzo del segmento de
código. Si el argumento opcional dir está presente, el
segmento comienza en esa dirección.
 .word w1,…, wn – Almacena los datos de 32 bits en
palabras consecutivas de memoria.

Universidad de Sonora Arquitectura de Computadoras 19

También podría gustarte