generacion de codigo objeto
Generación de Código Máquina
Programa
fuente
front
end
Código
intermedio
Código
optimización intermedio
generador
de código
Código
máquina
Generación de código. Procesadores de Lenguaje II
Generación de Código Máquina
Traducción de la representación intermedia a código objeto
(normalmente ensamblador)
Hay quetener en cuenta la arquitectura de la máquina para
realizar una gestión eficiente de la memoria y de los registros
Primero se generan las directivas para reservar memoria para
las variables y datos
Luego se genera el resto del código. Por ejemplo, los árboles
de sintaxis abstracta se recorren para generar código
directamente
Hay que tener en cuenta:
Los lenguajes fuente yobjeto
Gestión de memoria y registros
Juego de instrucciones
Orden de evaluación
Generación de código. Procesadores de Lenguaje II
Generación de Código
Se debe generar código correcto y de “alta calidad”
Asignación de recursos eficiente (optimizaciones dependientes de la
máquina)
Uso de registros (restricciones HW…)
Uso de memoria
Selección y orden de instrucciones (INC,ADD, …)
Asegurar que el código generado es el óptimo para cualquier entrada es
un problema “indecidible” (¿mejorar al programador de ensamblador?)
Enfoques:
Traducción directa de bloques de código intermedio
Uso de información de uso de variables en el bloque
Generación global de código
Análisis de flujo para asignación “óptima” de registros (cada bloque tienecontexto)
Generación de código. Procesadores de Lenguaje II
Sistema Procesador de Lenguaje
skeletal source program
preprocessor
assembler
source program
relocatable machine code
compiler
loader/link editor
target assembly program
absolute machine code
Generación de código. Procesadores de Lenguaje II
Ensambladores
Código ensamblador: nemónicos para instrucciones,y nombres para direcciones de memoria.
MOV a, R1
ADD #2, R1
MOV R1, b
Ensamblador en dos pasos:
Primera pasada: los identificadores se asignan a
direcciones de momria (0-offset)
e.g. asignar 0 a a, 4 a b …
Segunda pasada: produce código máquina (reasignable) :
0001 01 00 00000000 *
0011 01 10 00000010
0010 01 00 00000100 *
relocation
bit
Generación de código.Procesadores de Lenguaje II
Cargador y Editor de Enlace
Cargador(loader): toma código máquina
reasignable (relocatable) y mueve
direcciones para cargarlas en memoria.
Enlazador (linker): toma varios programas
reasignables, con referencias cruzadas, para
generar un solo fichero.
Necesita una correspondencia entre nombres de
variables y direcciones en cada instrucción.
Generación decódigo. Procesadores de Lenguaje II
Ejemplos Generación de Código (2)
Expresión
Código
X::=Y
X::=Y op Z
Comienzo:
Comienzo:
IF C THEN E1 ELSE E2
Comienzo:
WHILE C DO S
et1:
et2:
Comienzo:
et1:
MOV Y,X
MOV Y, R0
OP Z, R0
MOV R0,X
Código para C
IF-FALSE-GOTO et1
Código para E1
GOTO et2
Código para E2
Código para C
IF-FALSE-GOTO et1
Código para S
GOTOComienzo
Generación de código. Procesadores de Lenguaje II
Máquina Objeto
Máquina de registros R0 … RN-1
Instrucciones de dos direcciones: ins fuente, destino
MOV f,d (mover fuente a destino)
ADD f,d (sumar fuente a destino, resultado en destino)
SUB
f,d (restar fuente a destino, resultado en destino)
MULT f,d (multiplicar, idem)
DIV
f,d (dividir, idem)
GOTO d
(salto haciaposición)
CJ<
d
(salto condicional según última operación a registro)
Modos de direccionamiento:
Modo
Absoluto
Constante
Registo
Registro ind
Con R’s Indexado
Indexado reg
Forma
M
#2
Ri
*Ri
C(Ri)
*C(Ri)
Dirección
Coste extra
M
Ri
contenido(Ri)
C+contendido(Ri)
contenido(C+contendido(Ri))
1
1
0
0
1
1
Generación de código. Procesadores de Lenguaje II...
Regístrate para leer el documento completo.