Está en la página 1de 19

Programacin en MIPS

Programacin en MIPS

Camino tpico:
Ensamblador de MIPS. Traduce instrucciones de lenguaje ensamblador a lenguaje de mquina. 2. Probar el cdigo en un simulador de MIPS. 3. Correr el cdigo objeto en un sistema MIPS real.
1.

Universidad de Sonora

Arquitectura de Computadoras

Programacin 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 grfica de usuario. Ensamblador extendido con seudo-instrucciones. Simulador de una arquitectura MIPS.

Universidad de Sonora

Arquitectura de Computadoras

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 instalacin (privilegios de administrador).

Universidad de Sonora

Arquitectura de Computadoras

Uso de la memoria

Por convencin, 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

Segmento de texto
1.

El segmento de texto, a partir de la direccin 40000016, es donde se guarda el cdigo del programa. En los programas, el segmento de texto se marca por medio de la instruccin .text.

Universidad de Sonora

Arquitectura de Computadoras

Segmento de datos
2. El segmento de datos (data segment), a partir de la direccin 1000000016, es donde se guardan los datos. Se indica por medio de la instruccin .data. A su vez, el segmento de datos consta de dos partes:
a) Datos estticos. Contiene variables de tamao fijo y que necesitan ser accesados durante todo el programa. Por ejemplo, variables globales. b) Datos dinmicos. 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

direccin 7FFFFFFC16, es donde se guardan los stack frames.

Universidad de Sonora

Arquitectura de Computadoras

Uso de la memoria
7FFFFFFC16 Segmento de pila

Datos dinmicos 1000000016 40000016 Datos estticos

Segmento de datos

Segmento de texto
Reservado

Universidad de Sonora

Arquitectura de Computadoras

Acceso a la memoria
Por convencin, los sistemas MIPS dedican el registro

$gp como apuntador a los datos estticos. Asignndole a $gp la direccin 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 instruccin: 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 travs de la instruccin syscall. Los servicios permiten leer del teclado, escribir a la consola y manejar archivos del sistema. Para pedir un servicio, el programa carga el nmero 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 # direccin 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 print_int print_float print_double print_string read_int read_float read_double read_string sbrk exit print_char read_char open read write close exit2 Cdigo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $a0 = nombre del archivo (string), $a1 = banderas, $a2 = modo $a0 = handle, $a1 = buffer, $a2 = tamao $a0 = handle, $a1 = buffer, $a2 = tamao $a0 = handle $a0 = result $a0 = char char (en $v0) handle (en $a0) num. de caracteres ledos (en $a0) num. de caracteres escritos (en $a0) $a0 = buffer, $a1 = tamao $a0 = cantidad direccin (en $v0) $a0 = integer $f12 = float $f12 = float $a0 = string integer (en $v0) float (en $v0) double (en $v0) Argumentos Resultado

Universidad de Sonora

Arquitectura de Computadoras

13

Lenguaje ensamblador
Comentarios con gato (#) o punto y coma (;). Los identificadores pueden tener letras, nmeros,

puntos (.) y guiones bajos (_). No pueden comenzar con nmero. Los opcodes son palabras reservadas. Las etiquetas terminan con dos puntos (:).
.data item: .word 1 .text .globl main main: lw $t0, item
Universidad de Sonora

# Debe ser global

Arquitectura de Computadoras

14

Lenguaje ensamblador
Los nmeros estn 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 lnea \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 alineacin 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 b1bn 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 direccin. .double d1,, dn Almacena los valores reales de doble precisin en localidades consecutivas de memoria. .extern sym size Declara que el dato almacenado en sym tiene tamao size y es global. El dato est guardado en el segmento de datos. .float f1,, fn Almacena los valores reales de precisin 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 direccin. .ktext [dir] Define el comienzo del segmento de cdigo del kernel. Si el argumento opcional dir est presente, el segmento comienza en esa direccin.
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 cdigo. Si el argumento opcional dir est presente, el segmento comienza en esa direccin. .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