240 likes | 455 Views
Assembly y el Simulador SPIM. 66.20 Organización de Computadoras. Generación de un Ejecutable. 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.
E N D
Assemblyy 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. OPCODE OPERANDOS addi $t1, $t2, 0xfffe
Assembler (ensamblador) • Programa encargado de traducir código Assembly en su equivalente binario. • Como salida genera un archivo objeto. addi $t1, $t2, 0xfffe PROCESO DE ENSAMBLADO
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
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.
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).
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.
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)
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.
Llamada a Procedimientos (cont.) • Ojo: printf no es syscall, aqui se quiso usar print_str del SPIM
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.
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.
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
Llamadas al Sistema SPIM soporta algunos system calls básicos:
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)
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/)
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).
Ejemplo 1: Hola Mundo MIPS! Escribir un programa en assembly de MIPS32 que muestre en consola la leyenda "Hola Mundo!" y termine.
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.
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.
El Simulador SPIM 66.20 Organización de Computadoras