La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Assembly y el Simulador SPIM

Presentaciones similares


Presentación del tema: "Assembly y el Simulador SPIM"— Transcripción de la presentación:

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

2 Generación de un Ejecutable

3 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. OPCODE OPERANDOS addi $t1, $t2, 0xfffe 001000 01010 01001

4 Assembler (ensamblador)
Programa encargado de traducir código Assembly en su equivalente binario. Como salida genera un archivo objeto. addi $t1, $t2, xfffe PROCESO DE ENSAMBLADO 001000 01010 01001

5 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

6 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.

7 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).

8 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.

9 Ejemplos Operación aritmética (adición): Pasaje de un parámetro:
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)

10 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.

11 Llamada a Procedimientos (cont.)
Ojo: printf no es syscall, aqui se quiso usar print_str del SPIM

12 Simulador SPIM Permite ejecutar programas escritos en Assembly para arquitecturas MIPS32. Home page: Ú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.

13 PCspim 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. Mensajes del simulador.

14 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

15 Llamadas al Sistema SPIM soporta algunos system calls básicos:

16 Unidades Simuladas

17 Modos de Direccionamiento
SPIM soporta los siguientes modos de direccionamiento: 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. EJEMPLOS jr $ra ld $a0, 4 ld $a0, 4($a1) ld $a0, valor ld $a0, valor + 4 ld $a0, valor + 4($a1)

18 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/)

19 La herramienta EditPlus
Puede obtenerse de Debe descargarse un archivo de sintaxis para assembly de MIPS32 (http://www.editplus.com/others.html).

20 La herramienta EditPlus (cont.)

21 Ejemplo 1: Hola Mundo MIPS!
Escribir un programa en assembly de MIPS32 que muestre en consola la leyenda "Hola Mundo!" y termine.

22 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.

23 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.

24 66.20 Organización de Computadoras
El Simulador SPIM 66.20 Organización de Computadoras


Descargar ppt "Assembly y el Simulador SPIM"

Presentaciones similares


Anuncios Google