Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Compiladores e intérpretes
ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACION
Arquitectura de Computadores I
Arquitectura de Computadores I
Prototipo de compilador didáctico del lenguaje LC99
SEMANA 9_2.
Assembly y el Simulador SPIM
66.20 Organización de Computadoras
66.20 Organización de Computadoras
Procesadores de Lenguajes I
CLASE 12.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Arquitectura de Conjunto de Instrucciones (ISA)
Tema 3. Optimización de Código
Compiladores Generación de Código No Optimizado De la Representación Intermedia a Código de Máquina.
Composición Interna de un Procesador
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Compiladores II ( /04/ :03) Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4.
CLASE 11.
ISA (Instruction Set Architecture)
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
Lenguaje C.
Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
Asignación de Registros
MIPS Intermedio.
Unidad 2: Organización del CPU
M.C. Meliza Contreras González
Programación III Clase 07 Funciones.
Programación en Matlab
© Prof. José Mª Foces Morán PCSpim: SPIM sobre Windows Ventana principal de PCSpim Consola: permite interactuar con el programa que está siendo.
(CC) , José M. Foces-Morán.
Arquitecturas de Computadoras Curso Propedéutico
Instrucciones: FORMATO DE INSTRUCCIONES
1 SEMANA 04_2. 2 OPERADORES ARITMETICOS OPERADOR: + FORMATO: VALOR1 + VALOR2 FUNCION : SUMA VALOR1 Y VALOR2 EJEMPLO : TABLA_MAS_2 DW TABLA + 2 ; (DESPLAZAMIENTO.
Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
Traduciendo y ejecutando programas. Universidad de SonoraArquitectura de Computadoras2 El camino de un programa en C.
Secciones y Segmentos STARTUP
Administración de Memoria Memoria Virtual
Clasificación de Gramáticas y Manejo de Errores
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 13.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Overview Sistemas Computacionales
Asignación de Espacio No Contiguo
Material de apoyo Unidad 4 Estructura de datos
Procesadores de Lenguajes
Compiladores Traducción a Formatos Intermedios. Oscar Bonilla 2Universidad Galileo Resumen Metas de Representación de Programas Formato de datos en código.
Introducción al Análisis Sintáctico
NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En.
Capítulo 5. El procesador: Camino de datos y control.
Microcomputadores Prof: Tatiana Marín R.. Lenguaje máquina = lenguaje binario InstrucciónLenguaje máquina (binario)OP ( hex)Nemónico Restar F0SUB.
Programación de Sistemas
introducción al Lenguaje Ensamblador
Organización del Computador
CLASE 13.
Ing. Lionel Hendryk. Sistemas Embebidos Un sistema embebido es un sistema de computación diseñado para realizar una o algunas pocas funciones dedicadas.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 10.
introducción al Lenguaje Ensamblador
Unidad Central de Proceso
Programación de Sistemas
ARQUITECTURA DE COMPUTADORES
MEMORIA DINÁMICA.
MIPS Intermedio.
Arquitecturas de Computadoras Capitulo 2 Aritmética de enteros.
Lenguaje ensamblador Conceptos introductorios. Formatos de Instrucción. Modos de Direccionamiento. Conjunto de instrucciones básico. Introducción al Lenguaje.
Lenguaje ensamblador Resumen en diapositivas
Arquitectura de Computadores Clase 6 Ciclo y Conjunto de Instrucciones IIC 2342 Semestre Rubén Mitnik Pontificia Universidad Católica de Chile Escuela.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Transcripción de la presentación:

Docente: Carlos Orlando Claros Vásquez UNSACA - HUACHO FACULTAD DE INGENIERIA Módulo: Generación de Código No Optimizado

Carlos Claros Vásquez Pag. Nº 2 UNSACA Resumen Introducción Overview de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 3 UNSACA Anatomía de un Compilador Optimizador de Código Intermedio Generador de Código Representación Intermedia OptimizadaCódigo en Assembler Generador de Código Intermedio Representación Intermedia Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Token Stream Arbol de Parseo Programa (character stream)

Carlos Claros Vásquez Pag. Nº 4 UNSACA Anatomía de un Compilador Generador de Código Representación Intermedia Código en Assembler High-level IR Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Token Stream Arbol de Parseo Programa (character stream) Low-level IR Generador de Código Intermedio

Carlos Claros Vásquez Pag. Nº 5 UNSACA Representación en Formato Intermedio while (i < v.length && v[i] != 0) { i = i+1; } entry ldl ilen < cbr stl i exit ldf v lda 0 != cbr ldf vldl i 0 +

Carlos Claros Vásquez Pag. Nº 6 UNSACA El Generador de Código debe... Traducir todas las instrucciones en la representación intermedia a lenguaje ensamblador Asignar espacio para variables, arreglos, etc. Adherirse a las convenciones de llamado Crear la información simbólica necesaria

Carlos Claros Vásquez Pag. Nº 7 UNSACA Resumen Introducción Resumen de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 8 UNSACA Resumen de un Procesador Moderno ALU Control Memoria Registros Memory RegistersALU Control

Carlos Claros Vásquez Pag. Nº 9 UNSACA Arithmetic and Logic Unit Hace la mayoría de operaciones Con forma: OP R dest, R src1, R src2 Operaciones son: –Operaciones aritméticas (add, sub, mul) –Operaciones lógicas (and, sll) –Operaciones de comparación (seq, sge, slt) Memory Registers Control ALU

Carlos Claros Vásquez Pag. Nº 10 UNSACA Arithmetic and Logic Unit Muchas operaciones aritméticas pueden causar una excepción –overflow y underflow Puede operar en distintos tipos de datos –8, 16, 32 bits –Aritmética con y sin signo –Operaciones de punto flotante (ALU separada) –Instrucciones para convertir entre formatos (cvt.s.d) Memory Registers Control ALU

Carlos Claros Vásquez Pag. Nº 11 UNSACA Control Maneja la secuencia de Instrucciones Ejecución de Instrucciones –Todas las instrucciones están en memoria –Fetch de la instrucción a la que apunta el PC y ejecutarla –Para instrucciones generales, incrementar el PC para que apunte a la siguiente posición de memoria Memory RegistersALU Control

Carlos Claros Vásquez Pag. Nº 12 UNSACA Control Saltos no condicionales –Fetch de la siguiente instrucción de una localidad diferente –Salto incondicional a una dirección dada j label –Salto incondicional a una dirección en un registro jr r src –Para manejar llamadas a procedimientos, se hace un salto incondicional, pero se guarda la siguiente dirección en la secuencia actual en un registro jal label jalr r src Memory RegistersALU Control

Carlos Claros Vásquez Pag. Nº 13 UNSACA Control Saltos Condicionales –Ejectuamos un test, si es éxitoso, fetch de instrucciones de una nueva dirección, de otra forma fetch de la siguiente instrucción –Las instrucciones son de la forma: brelop R src1, R src2, label –relop es de la forma: eq, ne, gt, ge, lt, le Memory RegistersALU Control

Carlos Claros Vásquez Pag. Nº 14 UNSACA Control Transferencia de control en casos especiales (raros) –traps y excepciones –Mecanismo Guardar la posición de la siguiente instrucción (o la actual) Encontrar la dirección a la que hay que saltar (de un vector de excepciones) Saltar a esa posición Memory RegistersALU Control

Carlos Claros Vásquez Pag. Nº 15 UNSACA Memory Espacio de Direcciones plano –Compuesto de words –Direccionable por bytes Necesitamos guardar –Programa –Variables locales –Stack –Heap Memory RegistersALU Control

Carlos Claros Vásquez Pag. Nº 16 UNSACA Memory RegistersALU Control Stack Código Generado Heap Objetos Arrays locales (parámetros)

Carlos Claros Vásquez Pag. Nº 17 UNSACA Registers Arquitectura load/store –Todas las operaciones se ejecutan en registros –Necesitamos mover datos de/a memoria a/de registros Importante para rendimiento –Limitados en número ALU Control Memory Registers

Carlos Claros Vásquez Pag. Nº 18 UNSACA Otras Interacciones Otras operaciones –Input/Output –Operaciones Privilegiadas / seguras –Manejo de hardware especial TLBs, Caches etc. La mayoría via system calls –Codificadas a mano en assembler –El compilador las puede tratar como una llamada normal a una función ALU Control Memory Registers

Carlos Claros Vásquez Pag. Nº 19 UNSACA Resumen Introducción Resumen de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 20 UNSACA Las máquinas entienden... location data 0x4009b0:3c1c0fc0 0x4009b4:279c7640 0x4009b8:0399e021 0x4009bc:8f x4009c0:27bdffe0 0x4009c4:afbf001c 0x4009c8:afbc0018 0x4009cc:0320f809 0x4009d0: a 0x4009d4:8fbf001c 0x4009d8:8fbc0018 0x4009dc:27bd0020 0x4009e0:03e x4009e4:

Carlos Claros Vásquez Pag. Nº 21 UNSACA Las máquinas entienden... location dataassembly instruction main: [test.c: 3] 0x4009b0:3c1c0fc0luigp,0xfc0 [test.c: 3] 0x4009b4:279c7640addiugp,gp,30272 [test.c: 3] 0x4009b8:0399e021addugp,gp,t9 [test.c: 3] 0x4009bc:8f998044lwt9,-32700(gp) [test.c: 3] 0x4009c0:27bdffe0addiusp,sp,-32 [test.c: 3] 0x4009c4:afbf001cswra,28(sp) [test.c: 3] 0x4009c8:afbc0018swgp,24(sp) [test.c: 3] 0x4009cc:0320f809jalrra,t9 [test.c: 3] 0x4009d0: alia0,10 [test.c: 3] 0x4009d4:8fbf001clwra,28(sp) [test.c: 3] 0x4009d8:8fbc0018lwgp,24(sp) [test.c: 3] 0x4009dc:27bd0020addiusp,sp,32 [test.c: 3] 0x4009e0:03e00008jrra [test.c: 3] 0x4009e4: movev0,zero

Carlos Claros Vásquez Pag. Nº 22 UNSACA Representación Intermedia Programa (character stream) Generador de Código Código en Assembler High-level IR Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Token Stream Arbol de Parseo Low-level IR Generador de Código Intermedio

Carlos Claros Vásquez Pag. Nº 23 UNSACA Representación Intermedia Programa (character stream) Generador de Código Código en Assembler High-level IR Analizador Léxico (Scanner) Analizador Sintáctico (Parser) Token Stream Arbol de Parseo Low-level IR Generador de Código Intermedio Assembler & linker Binario Ejecutable Procesador

Carlos Claros Vásquez Pag. Nº 24 UNSACA Lenguaje Ensamblador Ventajas –Simplifica la generación de código debido al uso de instrucciones simbólicas y nombres simbólicos –Capa de abstracción lógica –Las arquitecturas pueden ser descritas por un lenguaje ensamblador  podemos modificar la implementación Instrucciones de macro assembler Desventajas –Proceso adicional de ensamblaje y linking

Carlos Claros Vásquez Pag. Nº 25 UNSACA Lenguaje Ensamblador Lenguaje de Máquina Reposicionable (object modules) –Todas las posiciones (direcciones) representadas por símbolos –Mapeadas a direcciones de memoria en tiempo de linking y loading –Flexibilidad de compilación separada Lenguaje de Máquina Absoluto –Direcciones hard-coded –Implementación simple y directa –Inflexible – difícil de recargar el código generado

Carlos Claros Vásquez Pag. Nº 26 UNSACA Ejemplo de Assembler item:.word1.text fib: subu$sp, 40 sw$31, 28($sp) sw$4, 40($sp) sw$16, 20($sp).frame$sp, 40, $31 # 7 if(n == 0) return 0; lw$14, 40($sp) bne$14, 0, $32 move$2, $0 blab2 lab1: lw$15, 40($sp) bne$15, 1, $33 li$2, 1 blab1

Carlos Claros Vásquez Pag. Nº 27 UNSACA Resumen Introducción Resumen de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 28 UNSACA Compatibilidad Necesitamos Manejar –Procedimientos múltiples –Llamadas a librerías –Código compilado por otros compiladores, escrito en lenguajes distintos, assembler escrito a mano Convenciones de llamado –Layout de memoria –Registros –Stack

Carlos Claros Vásquez Pag. Nº 29 UNSACA Layout de Memoria Inicio del Stack Manejo del Heap –free lists Posición de inicio en el segmento de texto Stack Text segment Heap Objects Arrays locals (parameters) 0x7fffffff 0x Reserved

Carlos Claros Vásquez Pag. Nº 30 UNSACA Disciplinas de paso de parámetros Muchos métodos distintos –Llamada por referencia –Llamada por valor –Llamada por valor-resultado ¿Cómo pasamos los parámetros? –Por el stack –Por los registros –O una combinación

Carlos Claros Vásquez Pag. Nº 31 UNSACA Registros No es un registro, hard-wired a la constante 0 20

Carlos Claros Vásquez Pag. Nº 32 UNSACA Registros Return Address de una llamada (call) –Implicitamente copiada por jal y jalr

Carlos Claros Vásquez Pag. Nº 33 UNSACA Registros Frame pointer Stack pointer Pointer to global area

Carlos Claros Vásquez Pag. Nº 34 UNSACA Registros Reservado para uso del ensamblador –Se necesita almacenamiento para manejar instrucciones de assembler compuestas

Carlos Claros Vásquez Pag. Nº 35 UNSACA Registros Retornan los resultados –Copiar el resultado cuando estamos listos para retornar –Usados para evaluar expresiones (si quieren)

Carlos Claros Vásquez Pag. Nº 36 UNSACA Registros Primeros cuatro argumentos de una llamada –Se pueden usar para otra cosa si los argumentos no importan –Si hay más argumentos  se pasan por el stack

Carlos Claros Vásquez Pag. Nº 37 UNSACA Registros El resto son temporales

Carlos Claros Vásquez Pag. Nº 38 UNSACA Registros En una llamada a procedimiento los temporales: –Son guardados por el caller –Son guardados por el callee –Alguna combinación de ambos

Carlos Claros Vásquez Pag. Nº 39 UNSACA Pregunta: ¿Cuáles son las ventajas/desventajas de que: –El callee guarde los registros? –El caller guarde los registros? ¿Qué registros deben ser usados por el caller y callee si la mitad es guardada por el caller y la otra mitad es guardada por el callee? –Caller-saved t0 - t9 –Calliee-saved s0-s7 21

Carlos Claros Vásquez Pag. Nº 40 UNSACA Registros En una llamada a procedimiento los temporales: –Son guardados por el caller –Son guardados por el callee –Alguna combinación de ambos

Carlos Claros Vásquez Pag. Nº 41 UNSACA Stack Guarda los parámetros y las variables locales –Cada invocación obtiene una nueva copia Caller tiene que guardar –Cualquier registro caller-saved que tiene un valor –Cualesquiera parámetros pasados –Return address (de cuando se hizo el branch) Callee tiene que guardar –Dirección anterior del stack pointer –Cualquier registro callee-saved que use 23

Carlos Claros Vásquez Pag. Nº 42 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area fp sp Dirección del n-ésimo argumento es -(n-4)*4*$fp Variables locales son constantes positivas de $fp

Carlos Claros Vásquez Pag. Nº 43 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area fp sp Al llamar un nuevo procedimiento 24

Carlos Claros Vásquez Pag. Nº 44 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area fp sp Al llamar un nuevo procedimiento, el caller:

Carlos Claros Vásquez Pag. Nº 45 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers fp sp Al llamar un nuevo procedimiento, el caller: –push de cualquier t0-t9 que tenga un valor importante al stack

Carlos Claros Vásquez Pag. Nº 46 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments fp sp Al llamar un nuevo procedimiento, el caller: –push de cualquier t0-t9 que tenga un valor importante al stack –poner argumentos 1-4 en registros a0-a3 –push del resto de los argumentos al stack

Carlos Claros Vásquez Pag. Nº 47 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments fp sp Al llamar un nuevo procedimiento, el caller: –push de cualquier t0-t9 que tenga un valor importante al stack –poner argumentos 1-4 en registros a0-a3 –push del resto de los argumentos al stack –hacer un jal o jalr

Carlos Claros Vásquez Pag. Nº 48 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments fp sp En el procedimiento, el calliee al principio: 25

Carlos Claros Vásquez Pag. Nº 49 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments fp En el procedimiento, el calliee al principio : –copiar $sp a $fp sp

Carlos Claros Vásquez Pag. Nº 50 UNSACA old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments fp sp En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack

Carlos Claros Vásquez Pag. Nº 51 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments fp sp En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack –push $ra al stack

Carlos Claros Vásquez Pag. Nº 52 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Calliee saved registers Caller saved registers arguments fp sp En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack –push $ra al stack –si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack

Carlos Claros Vásquez Pag. Nº 53 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Local variables Calliee saved registers Caller saved registers arguments fp sp En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack –push $ra al stack –si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack –crear espacio para variables locales en el stack

Carlos Claros Vásquez Pag. Nº 54 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Local variables Calliee saved registers Caller saved registers arguments Dynamic area fp sp En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack –push $ra al stack –si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack –crear espacio para variables locales en el stack –ejecutar al calliee...

Carlos Claros Vásquez Pag. Nº 55 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Local variables Calliee saved registers Caller saved registers arguments Dynamic area En el procedimiento, el calliee al final : fp sp 26

Carlos Claros Vásquez Pag. Nº 56 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Local variables Calliee saved registers Caller saved registers arguments Dynamic area En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 fp sp

Carlos Claros Vásquez Pag. Nº 57 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Calliee saved registers Caller saved registers arguments En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 –actualizar $sp usando $fp ($fp+4) +... fp sp

Carlos Claros Vásquez Pag. Nº 58 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 –actualizar $sp usando $fp ($fp+4) +... –Pop los registros callee-saved del stack fp sp Calliee saved registers

Carlos Claros Vásquez Pag. Nº 59 UNSACA return address old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 –actualizar $sp usando $fp ($fp+4) +... –Pop los registros callee-saved del stack –restaurar $ra del stack fp sp

Carlos Claros Vásquez Pag. Nº 60 UNSACA old frame pointer return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 –actualizar $sp usando $fp ($fp+4) +... –Pop los registros callee-saved del stack –restaurar $ra del stack –restaurar $fp del stack fp sp

Carlos Claros Vásquez Pag. Nº 61 UNSACA return address old frame pointer Stack Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 –actualizar $sp usando $fp ($fp+4) +... –Pop los registros callee-saved del stack –restaurar $ra del stack –restaurar $fp del stack –ejecutar jr ra para regresar al caller fp sp

Carlos Claros Vásquez Pag. Nº 62 UNSACA Stack Al regresar de la llamada al procedimiento, el caller: return address old frame pointer Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers arguments fp sp 27

Carlos Claros Vásquez Pag. Nº 63 UNSACA Stack Al regresar de la llamada al procedimiento, el caller: –actualizar $sp para ignorar argumentos return address old frame pointer Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers fp sp

Carlos Claros Vásquez Pag. Nº 64 UNSACA Stack Al regresar de la llamada al procedimiento, el caller: –actualizar $sp para ignorar argumentos –pop de los registros caller saved return address old frame pointer Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area Caller saved registers fp sp

Carlos Claros Vásquez Pag. Nº 65 UNSACA Stack Al regresar de la llamada al procedimiento, el caller: –actualizar $sp para ignorar argumentos –pop de los registros caller saved –continuar... return address old frame pointer Local variables Calliee saved registers Stack temporaries... argument 5 argument 4 Dynamic area fp sp

Carlos Claros Vásquez Pag. Nº 66 UNSACA Pregunta: ¿es necesario el $fp? ¿cuáles son las ventajas y desventajas de tener $fp? 30

Carlos Claros Vásquez Pag. Nº 67 UNSACA Programa Ejemplo class auxmath { int sum3d(int ax, int ay, int az, int bx, int by, int bz) { int dx, dy, dz; if(ax > ay) dx = ax - bx; else dx = bx - ax; … retrun dx + dy + dz; }

Carlos Claros Vásquez Pag. Nº 68 UNSACA Programa Ejemplo class auxmath { int sum3d(int ax, int ay, int az, int bx, int by, int bz) { int dx, dy, dz; if(ax > ay) dx = ax - bx; else dx = bx - ax; … retrun dx + dy + dz; } … int px, py, pz; … auxmath am; am.sum3d(px, py, pz, 0, 0, 0);

Carlos Claros Vásquez Pag. Nº 69 UNSACA Programa Ejemplo class auxmath { int sum3d(int ax, int ay, int az, int bx, int by, int bz) { int dx, dy, dz; if(ax > ay) dx = ax - bx; else dx = bx - ax; … retrun dx + dy + dz; } … int px, py, pz; px = 10; py = 20; pz = 30; auxmath am; am.sum3d(px, py, pz, 0, 1, -1); Dynamic area Caller saved registers Argument 7: bz (-1) fp Argument 6: by (1) Argument 5: bx (0)

Carlos Claros Vásquez Pag. Nº 70 UNSACA Programa Ejemplo class auxmath { int sum3d(int ax, int ay, int az, int bx, int by, int bz) { int dx, dy, dz; if(ax > ay) dx = ax - bx; else dx = bx - ax; … retrun dx + dy + dz; } … int px, py, pz; px = 10; py = 20; pz = 30; auxmath am; am.sum3d(px, py, pz, 0, 1, -1); return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0)

Carlos Claros Vásquez Pag. Nº 71 UNSACA Programa Ejemplo class auxmath { int sum3d(int ax, int ay, int az, int bx, int by, int bz) { int dx, dy, dz; if(ax > ay) dx = ax - bx; else dx = bx - ax; … retrun dx + dy + dz; } … int px, py, pz; px = 10; py = 20; pz = 30; auxmath am; am.sum3d(px, py, pz, 0, 1, -1); return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0) Local variable dx (??) Local variable dy (??) Local variable dz (??)

Carlos Claros Vásquez Pag. Nº 72 UNSACA Resumen Introducción Resumen de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 73 UNSACA Creación de Expresiones Algoritmo ingenuo de generación de código x = y op z –Seleccionar un registro R src1 (digamos $t0) para cargar el valor y –Generar instrucción para copiar, si y está: En otro registro (digamos $t7) add $t0, $t7, zero Es constante (digamos 1024) li $t0, 1024 En memoria (digamos que $t7 apunta a y) lw $t0, $t7 En una dirección simbólica (digamos lab1) la $t0, lab1 –Seleccionar registro R src2 (digamos $t1) y cargar el valor z –Seleccionar registro R dest (digamos $t2) para guardar x –Hacer la operación (digamos and) and $t2, $t1, $t0

Carlos Claros Vásquez Pag. Nº 74 UNSACA Programa Ejemplo class auxmath { int sum3d(int ax, int ay, int az, int bx, int by, int bz) { int dx, dy, dz; if(ax > ay) dx = ax - bx; sp return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0) Local variable dx (??) Local variable dy (??) Local variable dz (??)

Carlos Claros Vásquez Pag. Nº 75 UNSACA Programa Ejemplo class auxmath { int sum3d(int ax, int ay, int az, int bx, int by, int bz) { int dx, dy, dz; if(ax > ay) dx = ax - bx; sp return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0) Local variable dx (??) Local variable dy (??) Local variable dz (??) add $t0, $a1, zero lw$t1, 0($fp) sub$t2, $t0, $t1 sw$t2, -12($fp) address src1 src2 dest

Carlos Claros Vásquez Pag. Nº 76 UNSACA Cuidado Los temporales son limitados –Cuándo el árbol es grande, 18 registros temporales pueden ser insuficientes  asignar espacio en el stack No hay instrucción de máquina –Puede ser que haya que expandir la operación intermedia a múltiples operaciones de máquina Muy ineficiente –Muchas copias, sumas con cero, etc. –No se preocupen, vamos a arreglarlas en la optimización –Mantengan el generador de código muy muy simple

Carlos Claros Vásquez Pag. Nº 77 UNSACA Resumen Introducción Resumen de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 78 UNSACA Generación de control de flujo Aplanar la estructura del control –Usar un template Poner etiquetas únicas para puntos donde el control se une (join points) Ahora generamos el código apropiado

Carlos Claros Vásquez Pag. Nº 79 UNSACA Template para condicionales if (test) true_body else false_body boper …, lab_true jlab_end lab_true: lab_end: 38

Carlos Claros Vásquez Pag. Nº 80 UNSACA Programa Ejemplo if(ax > bx) dx = ax - bx; else dx = bx - ax; return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0) Local variable dx (??) Local variable dy (??) Local variable dz (??) address src1 src2 dest boper...,..., lab0 jlab1 lab0: lab1:

Carlos Claros Vásquez Pag. Nº 81 UNSACA Programa Ejemplo if(ax > bx) dx = ax - bx; else dx = bx - ax; return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0) Local variable dx (??) Local variable dy (??) Local variable dz (??) address src1 src2 dest add$t0, $a1, zero lw$t1, 0($fp) bgt$t0, $t1, lab0 jlab1 lab0: lab1:

Carlos Claros Vásquez Pag. Nº 82 UNSACA Programa Ejemplo if(ax > bx) dx = ax - bx; else dx = bx - ax; return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0) Local variable dx (??) Local variable dy (??) Local variable dz (??) address src1 src2 dest add$t0, $a1, zero lw$t1, 0($fp) bgt$t0, $t1, lab0 lw$t0, 0($fp) add$t1, $a1, zero sub$t2, $t0, $t1 sw$t2, -12($fp) jlab1 lab0: lab1:

Carlos Claros Vásquez Pag. Nº 83 UNSACA Programa Ejemplo if(ax > bx) dx = ax - bx; else dx = bx - ax; return address old frame pointer Dynamic area Caller saved registers Argument 7: bz (-1) fp sp Argument 6: by (1) Argument 5: bx (0) Local variable dx (??) Local variable dy (??) Local variable dz (??) address src1 src2 dest add$t0, $a1, zero lw$t1, 0($fp) bgt$t0, $t1, lab0 lw$t0, 0($fp) add$t1, $a1, zero sub$t2, $t0, $t1 sw$t2, -12($fp) jlab1 lab0:add$t0, $a1, zero lw$t1, 0($fp) sub$t2, $t0, $t1 sw$t2, -12($fp) lab1:

Carlos Claros Vásquez Pag. Nº 84 UNSACA Template para ciclos while while (test) body

Carlos Claros Vásquez Pag. Nº 85 UNSACA Template para ciclos while while (test) body lab_cont: boper …, lab_body jlab_end lab_body: jlab_cont lab_end:

Carlos Claros Vásquez Pag. Nº 86 UNSACA Template para ciclos while while (test) body lab_cont: boper …, lab_body jlab_end lab_body: jlab_cont lab_end: Una template optimizada 43 lab_cont: boper …, lab_end jlab_cont lab_end:

Carlos Claros Vásquez Pag. Nº 87 UNSACA Pregunta: ¿Cuál es la template para? do body while (test)

Carlos Claros Vásquez Pag. Nº 88 UNSACA Question: ¿Cuál es la template para? do body while (test) lab_begin: boper …, lab_begin 44

Carlos Claros Vásquez Pag. Nº 89 UNSACA Resumen Introducción Resumen de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 90 UNSACA return address old frame pointer Procedure Call Dynamic area Local variables Calliee saved registers Caller saved registers arguments Dynamic area fp sp En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack –push $ra al stack –si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack –crear espacio para variables locales en el stack –ejecutar al calliee...

Carlos Claros Vásquez Pag. Nº 91 UNSACA Procedure Call En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack –push $ra al stack –si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack –crear espacio para variables locales en el stack –ejecutar al calliee... 46

Carlos Claros Vásquez Pag. Nº 92 UNSACA Procedure Call En el procedimiento, el calliee al principio : –copiar $sp a $fp –push $fp al stack –push $ra al stack –si cualquier s0-s7 es usado en el procedimiento, guardarlo en el stack –crear espacio para variables locales en el stack –ejecutar al calliee... proc_entry: add$t0, $fp, zero add $fp, $sp, zero addi $sp, $sp, -4 sw$t0, ($sp) addi $sp, $sp, -4 sw$ra, ($sp) 48

Carlos Claros Vásquez Pag. Nº 93 UNSACA Procedure Call Ejecutar el cuerpo del procedimiento callee –Acceso a variables locales y parámetros como offsets del $fp proc_entry: add$t0, $fp, zero add $fp, $sp, zero addi $sp, $sp, -4 sw$t0, ($sp) addi $sp, $sp, -4 sw$ra, ($sp)...

Carlos Claros Vásquez Pag. Nº 94 UNSACA Procedure Call proc_entry: add$t0, $fp, zero add $fp, $sp, zero addi $sp, $sp, -4 sw$t0, ($sp) addi $sp, $sp, -4 sw$ra, ($sp)... En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 –actualizar $sp usando $fp ($fp+4) +... –Pop los registros callee-saved del stack –restaurar $ra del stack –restaurar $fp del stack –ejecutar jr ra para regresar al caller

Carlos Claros Vásquez Pag. Nº 95 UNSACA Procedure Call proc_entry: add$t0, $fp, zero add $fp, $sp, zero addi $sp, $sp, -4 sw$t0, ($sp) addi $sp, $sp, -4 sw$ra, ($sp)... En el procedimiento, el calliee al final : –poner valores de retorno en v0,v1 –actualizar $sp usando $fp ($fp+4) +... –Pop los registros callee-saved del stack –restaurar $ra del stack –restaurar $fp del stack –ejecutar jr ra para regresar al caller add$v0, $t2 lw$sp, -8($fp) addi$sp, $sp, -8 lw$ra, ($sp) addi$sp, $sp, 4 lw$fp, ($sp) addi $sp, $sp, 4 jr$ra 51

Carlos Claros Vásquez Pag. Nº 96 UNSACA Resumen Introducción Resumen de un procesador moderno Lenguaje de Máquina Convenciones de Llamado Generación de Expresiones Generación de Control de Flujo Generación de Procedimientos Linking

Carlos Claros Vásquez Pag. Nº 97 UNSACA Símbolos Ejecutable es una colección –Compilaciones separadas –Librerías linkeadas estática y dinámicamente Por lo tanto, no podemos crear una imagen de memoria en tiempo de compilación Fase adicional del linker para juntarlo todo y crear la imagen final de memoria

Carlos Claros Vásquez Pag. Nº 98 UNSACA Salida del compilador Crear código objeto con direcciones simbólicas que pueden ser reposicionadas Direcciones simbólicas de todos los datos y principios de procedimientos que otros necesitan accesar son exportados Exportar los nombres de símbolos de referencias externas

Carlos Claros Vásquez Pag. Nº 99 UNSACA Símbolos exportados por el compilador Symbols from test.o: [Index] Value Class Type Section Name [0]| 0| File |ref=6 |Text | test.c [1]| 0| Proc |end=3 int |Text | main [2]| 56| Proc |end=5 int |Text | fib [3]| 0| Global | |Bss | internal_var [4]| 0| Proc |ref=1 |Text | main [5]| 56| Proc |ref=3 |Text | fib [6]| 0| Global | |Undefined| external_var [7]| 0| Proc | |Undefined| foo [8]| 0| Global | |Undefined| _gp_disp

Carlos Claros Vásquez Pag. Nº 100 UNSACA Linker Ver todos los object files para encontrar símbolos no resueltos Hacer match de los símbolos y encontrar las partes necesarias en las librerías Layout en una sola imagen de memoria Resolver todos los nombres simbólicos a las direcciones correctas de memoria y offsets adecuados

Carlos Claros Vásquez Pag. Nº 101 UNSACA Lecturas Ballena –Capítulo 7 Dragón (opcional) –Capítulo 9, 10.1, 10.2, 10.3, 10.4