24
Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Embed Size (px)

Citation preview

Page 1: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Assemblyy el Simulador SPIM

66.20 Organización de Computadoras

Page 2: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Generación de un Ejecutable

SOURCEFILE COMPILER

ASSEMBLY SOURCE

FILEASSEMBLER

OBJECTFILE

SOURCEFILE COMPILER

ASSEMBLY SOURCE

FILEASSEMBLER

OBJECTFILE

SOURCEFILE COMPILER

ASSEMBLY SOURCE

FILEASSEMBLER

OBJECTFILE

LINKEREXECUTABLE

FILE

EXTERNALLIBRARIES

Código de alto nivel

Código en lenguaje

ensamblador

Código binario

Page 3: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Assembly

Es un lenguaje de programación de bajo nivel. Es una representación simbólica del código binario de

las intrucciones. Utiliza mnemónicos para representar cada instrucción.

001000 01010 01001 1111 1111 1111 1110

OPCODE OPERANDOS

addi $t1, $t2, 0xfffe

Page 4: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Assembler (ensamblador)

Programa encargado de traducir código Assembly en su equivalente binario.

Como salida genera un archivo objeto.

001000 01010 01001 1111 1111 1111 1110

PROCESO DE ENSAMBLADO

addi $t1, $t2, 0xfffe

Page 5: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Assembler (cont.)

Label: nombre simbólico para un objeto. Puede aplicarse a una instrucción, a un procedimiento (dir. de 1ra instrucción), a un string, etc. Externo: se puede acceder desde fuera del módulo

donde se define (.globl main); Local: solo puede accederse desde el módulo que lo

define. Todas las referencias externas deben quedar resueltas

para que un programa pueda ejecutarse

Page 6: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Linker (vinculador)

Enlaza los archivos objeto que pertenecen a un programa, y genera un programa ejecutable.

Resuelve referencias a bibliotecas externas (ojo: printf es realmente una funcion de librería no un syscall).

Asigna las posiciones finales de memoria.

main:

... call printf ...

printf:

...

Referencia no resuelta

Símbolo externo o

global

LINKER

main:

... call printf ...

printf:

...

OBJECT FILE

OBJECT FILE

EXECUTABLE FILE

Page 7: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Modelo de Memoria

La arquitectura MIPS divide la memoria en tres secciones: Segmento de texto. Segmento de datos (estáticos y dinámicos). Pila (stack).

Page 8: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Registros

La arquitectura MIPS presenta 32 registros de propósito general, y 32 registros para punto flotante.

Debería respetarse una convención para su uso (en general es muy mala idea no hacerlo):

$a0-$a3 primeros 4 argumentos a un procedimiento. $v0 y $v1 valor de retorno de un procedimiento. $t0-$t9 almacenamiento temporal. $s0-$s7 almacenamiento de largo plazo. $sp puntero a la pila. $fp puntero al stack frame. $ra dirección de retorno en la llamada a un procedimiento.

Page 9: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Ejemplos

Operación aritmética (adición):addu $t0, $t6, 1

($t0 $t6 + 1)

Pasaje de un parámetro:li $a0, 10

($a0 10)

Retorno de un valor:li $v0, 1

($v0 1)

Page 10: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Llamada a Procedimientos

Debe respetarse la convención para el uso de registros.

Debe tomarse una porción de la pila (stack frame): Para almacenar los

argumentos pasados (1 al 4: registros, 5+: stack frame del caller).

Para almacenar registros de largo plazo.

Para almacenar las variables locales al procedimiento.

Page 11: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Llamada a Procedimientos (cont.)

Ojo: printf no es syscall, aqui se quiso usar print_str del SPIM

Page 12: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Simulador SPIM

Permite ejecutar programas escritos en Assembly para arquitecturas MIPS32.

Home page: http://www.cs.wisc.edu/~larus/spim.html

Última versión: 7.2 Disponible en varios “sabores”:

Spim: simulador manejado por línea de comandos. XSpim: para ambientes X-windows (UNIX/Linux) PCspim: para ambientes Microsoft Win32.

Page 13: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Mensajes del simulador.

Registros de la CPU y de la unidad de punto flotante.

Instrucciones assembly del programa y del sistema.

Datos cargados en el espacio de memoria del programa.

PCspim

Page 14: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Características

No implementa memorias caché. No simula latencias (de memoria o de operaciones

aritméticas). Maneja pseudoinstrucciones (instrucciones que provee

el ensamblador, y que se implementan a partir de otras más simples).

Soporta formatos big y little-endian.

BIG-ENDIAN

LITTLE-ENDIAN

Page 15: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Llamadas al Sistema

SPIM soporta algunos system calls básicos:

Page 16: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Unidades Simuladas

Page 17: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Modos de Direccionamiento

SPIM soporta los siguientes modos de direccionamiento:

jr $rald $a0, 4ld $a0, 4($a1)ld $a0, valorld $a0, valor + 4ld $a0, valor + 4($a1)

EJEMPLOS • En realidad aquí vemos 3 modos de direccionamiento: register indirect, immediate y displacement. El resto son una “ilusión del assembler”.• MIPS implementa solo immediate y displacement con campos de 16 bits. Register indirect se obtiene con displacement=0 y absolute address usando como registro a $zero.

Page 18: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Edición del Código

SPIM no provee facilidades para escritura de código assembly.

Debe utilizarse un editor de textos: Vi / Vim (http://www.vim.org/) Emacs / Xemacs (http://www.xemacs.org/) Editplus (http://www.editplus.com/) UltraEdit (http://www.ultraedit.com/) MIPSter (http://www.downcastsystems.com/mipster/)

Page 19: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

La herramienta EditPlus

Puede obtenerse de http://www.editplus.com/. Debe descargarse un archivo de sintaxis para

assembly de MIPS32 (http://www.editplus.com/others.html).

Page 20: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

La herramienta EditPlus (cont.)

Page 21: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Ejemplo 1: Hola Mundo MIPS!

Escribir un programa en assembly de MIPS32 que muestre en consola la leyenda "Hola Mundo!" y termine.

Page 22: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Ejemplo 2: Loops y Arreglos de Valores

Escribir un programa en assembly de MIPS32 que encuentre el máximo de la siguiente serie de números: {4, 15, 0, 48, 22, 7}

Deberá mostrar en consola el máximo hallado.

Page 23: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

Ejemplo 3: Funciones y Punto Flotante

Escribir un programa en assembly de MIPS32 que cargue 2 número reales ingresados por consola, los sume, y muestre el resultado (también por consola).La suma de los números debe realizarse llamando a una función.

Page 24: Assembly y el Simulador SPIM 66.20 Organización de Computadoras

El Simulador SPIM

66.20 Organización de Computadoras