Descargar la presentación
La descarga está en progreso. Por favor, espere
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 ( Emacs / Xemacs ( Editplus ( UltraEdit ( MIPSter (
19
La herramienta EditPlus
Puede obtenerse de Debe descargarse un archivo de sintaxis para assembly de MIPS32 (
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.