Sunteți pe pagina 1din 8

2 ASSEMBLY MIPS

Universidad de Concepcin o Facultad de Ingenier a Depto. de Ingenier Elctrica a e

Arquitectura de Computadores - 543426 Uso del Simulador de Assembly MIPS: SPIM


Autor: Jorge E. Pezoa Nnez u Semestre : 2001-I Fecha : 15 de abril de 2001

Introduccin o

Un lenguaje ensamblador o lenguaje assembly es la representacin simblica de la codicacin o o o binaria del lenguaje interpretado por un computador, que se llama lenguaje de mquina. Un a programa llamdo assembler o ensamblador es el encargado de traducir el lenguaje assembly a instrucciones binarias. El modo de funcionamiento de un assembler es el siguiente: lee un archivo fuente, que es un archivo de texto que contiene el cdigo assembly, y produce un archivo objeto, que o contiene instrucciones de mquina e informacin de mantenimiento que ayuda a combinar a o varios archivos objeto en un slo programa. A continuacin, el linker es el encargado de enlazar o o varios mdulos que puedan existir, combinando todos los archivos objetos y de biblioteca en o un archivo ejecutable. Se puede comentar nalmente que un lenguaje assembly es el lenguaje de salida de los compiladores, pues un compilador traduce un programa escrito en un lenguaje de alto nivel en un programa equivalente en lenguaje de mquina o assembly, llamado lenguaje objeto. a La segunda nalidad del assembly es ser un lenguaje de programacin ms, con el que se o a pueden escribir programas en los que la velocidad o tamao son cr n ticos, o para explotar ciertas caracter sticas de hardware que no se presentan en otros lenguajes.

Assembly MIPS
Cada l nea puede contener como mximo una sentencia o l a nea de programa. Los comentarios van al nal de la l nea y van precedidos por un #. Cualquier l nea que comience con un nombre seguido de : implica una etiqueta, que sirve para designar la posicin de memoria de la instruccin. o o En general el formato de una l nea assembly MIPS es la siguiente: 1

El lenguaje assembly MIPS tiene las siguientes caracter sticas:

2 ASSEMBLY MIPS etiqueta: instruccon operandos #Comentarios

La instruccin puede ser cualquier instruccin assembly MIPS vlida como por ejemplo o o a add, sub, lw, sw, etc. Los operandos pueden ser bsicamente de cuatro tipos: a Un registro, los que pueden escribirse como $4 o $a0 y pueden ir entre parntesis. e Un identicador, que es un string con letras y nmeros o un caracter , pero que no u comience con un nmero. Sirven para principalmente identicar posiciones de memoria. u Una cadena alfanumrica encerrada entre comillas dobles, donde se aceptan los mismos e convenios que en C. Sirven para colocar mensajes. Un nmero, en base 10, a menos que comience con 0x que implica un hexadecimal. u Un ejemplo de un par de l neas en assembly MIPS es el siguiente: .text .globl main main: lw $16,size add $8,$0,$0 addi $9,$0,0 #siempre debe declararse como global #guardo en R16 la cant. de elementos #limpio el sumador (R8) #coloco el contador (R9) en 0

Los ensambladores, y por lo tanto el simulador MIPS, tienen la particularidad de permitir aumentar el nmero de instrucciones disponibles mediante pseudoinstrucciones, que son u instrucciones que no necesitan ser sintetizadas en el hardware, sino que pueden ser emuladas con una o varias instrucciones de mquina. Para esto, el ensamblador MIPS maneja el registro a $1 como registro temporal. Un ejemplo de pseudoinstruccin es move $8,$18 que signica o copie el contenido del registro $18 en el registro $8. Esta instruccin en realidad no existe en o la mquina, sino que lo que se ejecuta es: add $8,$18,$0. a El simulador tiene tambin una serie de directivas, que son nombres que comienzan con e un punto (.data, .globl, .space, etc.) y que sirven para indicar al ensamblador cmo traducir o un programa pero no producen instrucciones de mquina. La tabla 1 muestra las directivas a del simulador SPIM. Como es sabido, la mquina MIPS R2000 tiene 32 registros de propsito general de 32 a o bits. Existe una convencin para los nombres de los registros que es utilizada en todos los o ejemplos que se puedan encontrar. Para ver los nombres de los registros, favor revisar [2]. La gura 1 muestra el mapa de memoria de SPIM. Los segmentos de pila o stack y de datos son expandibles dinmicamente y estn tan distantes como sea posible. Estos pueden crecer a a para utilizar el espacio completo de direcciones de programa. Las direcciones de memoria que aparecen en la gura son las direcciones de inicio de los distintos segmentos en el caso del simulador SPIM. Otra de las facilidades que el simulador, y los ensambladores en general, proveen a los programadores es la implementacin de diversos modos de direccionamiento, ya sean directos o en hardware o simulados con registros temporales. Los modos de direccionamiento de SPIM estn dados en la tabla 2. a 2

2 ASSEMBLY MIPS

Tabla 1: Directivas del Simulador SPIM. .align n .ascii str .asciiz str .byte b1,b2,... .half h1,h2,... .word w1,w2,... .double f1,f2 .oat f1,f2,... .data .kdata .text .ktext .space n .extern sym size .globl sym alinea el siguiente dato sobre un l mite de 2n bytes. n es un nmero 0, 1, 2, . . . u almacena un string en memoria sin terminarlo en un caracter nulo. str es un texto como hola mundo\n almacena un string en memoria terminndolo en un caracter nulo. str es un a texto como hola mundo\n almacena los n valores de 8 bits en bytes consecutivos en memoria almacena los n valores de 16 bits en medias palabras consecutivas en memoria almacena los n valores de 32 bits en palabras consecutivas en memoria almacena los n nmeros de punto otante de doble precisin en memoria u o almacena los n nmeros de punto otante de precisin simple en memoria u o los elementos siguientes son almacenados en el segmento de datos los elementos siguientes son almacenados en el segmento de datos del kernel los elementos siguientes son almacenados en el segmento de texto. Slo pueden o ser instrucciones o palabras los elementos siguientes son almacenados en el segmento de texto del kernel. Slo pueden ser instrucciones o palabras o asigna n bytes de espacio en el segmento actual (debe ser segmento de datos de SPIM) declara que el dato almacenado en sym ocupa size bytes y es un global declara sym como global, o sea, se puede referenciar desde otros archivos

Tabla 2: Modos de Direccionamiento del Simulador SPIM. Formato (Registro) Valor [hasta 32 bits] Valor (Registro) Identicador Identicador +/- Valor Identicador (Registro) Identicador +/- Valor (Registro) Clculo Direccin a o Contenido Registro VImm VImm + Cont. Reg. VID VID +/- VImm VID + Cont. Reg. VID +/- VImm + Cont. Reg. Ejemplo verb+lw lw $t0, lw $t0, lw $t0, lw $t0, lw $t0, lw $t0,

t0, (t2)+ 0x10010008 0x10010008($t1) array array8+ array($t1) array+4($t1)

2 ASSEMBLY MIPS

Figura 1: Mapa de Memoria del Simulador SPIM.

Finalmente, existe una funcin llamada syscall que permite ejecutar llamadas a sistema. o Su principal importancia reside en que permite interactuar al usuario con la consola del simulador, lo que hace que ste pueda ingresar y/o observar valores utilizando la nombrada e consola. Para ello, se utiliza el registro $v0 que especica el cdigo de llamada al sistema, o y los registros $a0, $a1 y $f12 que son utilizados como argumentos en las llamadas. Los resultados de las llamadas son almacenados en $v0 o $f0. La tabla 3 muestra en la segunda columna los valores que debe tomar $v0 antes de llamar a syscall, en la tercera columna muestra ,los argumentos que hay que establecer antes de hacer la llamada y la ultima especica que si syscall devuelve alguna cosa, coloca en el registro asociado el valor. Tabla 3: Cdigos de Llamada a Sistema del Simulador SPIM. o Servicio print int print oat print double print string read int read oat read double read string sbrk exit Cdigo o 1 2 3 4 5 6 7 8 9 10 Argumentos $a0=entero $f12=oat $f12=double $a0=string Resultados

entero (en $v0) oat (en $f0) oat (en $f0) $a0=buer, $a1=longitud $a0=cantidad direccin (en $v0) o

3 INTERFAZ GRAFICA DE SPIM Las primeras cuatro las especican que se imprime un dato en la consola, para ello hay que pasar primero el argumento, y luego imprimir, stas no devuelven valor. Las cuatro e siguientes leen un dato desde la consola, que puede ser un nmero o un string, no necesitan u argumentos, salvo el caso del string, y hace que el simulador espere hasta que se le ingrese un valor por consola, el que es almacenado en un registro. La penltima la especica u como agregar pginas de memoria virtual al segmento de datos dinmico y la ultima permite a a terminar la ejecucin del programa. o

Interfaz Grca de SPIM a

a)

b)

Figura 2: Ventanas de SPIM a) Mensajes b) Registros.

Una vez instalado y ejecutado el simulador, lo primero que debe vericarse son los Settings u opciones de simulacin en la mquina (aparecen en la opcin SimulatorSettings). Las o a o opciones despliegue son simples de entender y no merecen mayor anlisis. En las opciones de a ejecucin existen las siguientes alternativas: o Bare machine: mquina reducida. ON: simula un MIPS reducido en instrucciones, sin pseua do instrucciones ni otros modos de direccionamiento proporcionados por el ensamblador. OFF: SPIM simula la mquina virtual. a

3 INTERFAZ GRAFICA DE SPIM Allow pseudo instructions: permitir psuedo instrucciones. ON: permite pseudo instrucciones y se ve cmo las traduce a instrucciones de mquina. OFF: no permite pseudo o a instrucciones, slo instrucciones de mquina. o a Load trap le: cargar el archivo manejador de interrupciones. ON: carga el manejador de interrupciones y cdigo de arranque (archivo trap.handler). Durante una interrupcin o o o excepcin, SPIM salta a 0x 8000 0080, donde hay cdigo para tratarla. trap.handler o o contiene el cdigo de arranque que invoca la rutina main. Sin rutina de arranque, SPIM o comienza la ejecucin en el rtulo start. o o Mapped I/O: Entrada/Salida con correspondencia o mapeo directo a memoria. ON: habilita la E/S con mapeo directo a memoria. Los programas que usen syscall para leer desde el terminal no pueden usar E/S de mapeo directo.OFF: deshabilita la E/S con mapeo directo a memoria. Quiet: ON: no imprime ningn mensaje en las excepciones. OFF: imprime un mensaje u cuando se presenta una excepcin o Para ejecutar un programa, se debe tener algn cdigo fuente en assembly, las extensiones u o por defector que lee el simulador son .asm y .s. Para cargar un archivo en el simulador se utiliza la opcin FileOpen y se abre el archivo deseado. o Una vez en ejecucin la pantalla se divide en cinco secciones: o Mensajes: en esta parte se puede observar los mensajes de carga exitosa o fallida del programa fuente, adems entrega la secuencia de instrucciones ejecutadas al correr el programa. a Se puede obtener (desde izquierda a derecha) la evolucin del valor del PC (en hexadeco imal), la codicacin de la instruccin al momento de ejecutarla (en hexadecimal), la o o instruccin realmente ejecutada por la mquina (que no es la misma en el caso de usar o a pseudo instrucciones) y la instruccin que se escribi en el programa fuente. (Figura o o 2a). Registros: muestra el valor de los registros internos del procesador. Es bastante util a la hora de seguir la ejecucin de un programa.((Figura 2b)). o Segmento de Texto: se divide en dos partes, la primera que muestra en que segmento de memoria se almacena el programa a ejecutar, que siempre parte en la direccin 0x 0040 o 0000, y adems informacin similar a la obtenida en la parte de mensajes. La segunda a o parte es el Kernel, que contiene todo el manejo de excepciones que se especica en el archivo trap.handler. Lo importante por ahora es la parte del segmento de texto que muestra como est almacenado el programa en memoria.(Figura 3a) a Segmento de Datos: ac se muestra la parte de memoria de datos, que es donde se almaa cenan los valores procesador por la CPU y se necesita reservar para uso futuro, esta parte empieza en la direccin 0x 1000 0000. Tambin est la parte de memoria donde o e a est el stack y empieza en la direccin 0x 7FFF EFFC. Tambin se muestra el Kernel a o e en la memoria. (Figura 3b) 6

REFERENCIAS

REFERENCIAS

Consola: es una consola que permite imprimir valores y mensajes generados por los programas que se ejecutan en el simulador. Por defecto no aparece, hay que hacerla salir desde el men WindowsConsole. u La forma ms simple de ejecutar un programa y ver su evolucin es utilizando la opcin a o o paso a paso, que se encuentra en SimulatorSingle step, o lo que es lo mismo, apretando F10 para ejecutar el programa. En la zona de texto, y antes del programa ingresado, aparece siempre un trozo de cdigo que es el siguiente: o [0x00400000] [0x00400004] [0x00400008] [0x0040000c] [0x00400010] [0x00400014] [0x00400018] 0x8fa40000 0x27a50004 0x24a60004 0x00041080 0x00c23021 0x0c100008 0x3402000a lw $4, 0($29) ; 102: lw $a0, 0($sp) addiu $5, $29, 4 ; 103: addiu $a1, $sp, 4 # argv addiu $6, $5, 4 ; 104: addiu $a2, $a1, 4 # envp sll $2, $4, 2 ; 105: sll $v0, $a0, 2 addu $6, $6, $2 ; 106: addu $a2, $a2, $v0 jal 0x00400020 [main] ; 107: jal main ori $2, $0, 10 ; 108: li $v0 10

Este cdigo se ejecuta siempre al iniciarse la simulacin, y lo que hace simplemente es o o cargar argc y argv (se acuerdan que eso sirve para pasar parmetros por l a nea de comando al ejecutar un programa hecho en C) en registros internos y llamar la subrutina main. Este cdigo es el cdigo de arranque que se ejecuta desde el archivo trap.handler antes mencionado. o o En otras palabras, no importa que se ejecute, lo importante es que el programa que est a a continuacin de esta subrutina est correcto. La posicin de memoria donde se empieza a o e o guardar el programa que Uds. realmente hacen es la 0x 0040 0020.

Referencias
[1] Computer Architecture: The Hardware Software Interface. D. Patterson, J. Hennesey. [2] SPIM S20: A MIPS R2000 Simulator. J. Larus. Computer Sciences Department University of Wisconsin Madison, 1990-1997. [3] Ensamblador MIPS. Juan Gmez P.. Universidad de Extremadura, 1998. o

REFERENCIAS

REFERENCIAS

a)

b)

Figura 3: Ventanas de SPIM a) Segmento de Texto b) Segmento de Datos.

S-ar putea să vă placă și