Académique Documents
Professionnel Documents
Culture Documents
Generacin de
cdigo final
Traduccin a cdigo objeto
Javier Vlez Reyes
jvelez@lsi.uned.es
Departamento de Lenguajes Y Sistemas Informticos
UNED
Objetivos
Entender la relacin de proximidad entre cdigo intermedio y cdigo objeto
Entender en qu consiste el proceso de generacin de cdigo final
Aprender los pasos que es necesario dar para llevarlo cabo con xito
Entender las implicaciones del entorno de ejecucin en el proceso
Tipo de arquitectura de ejecucin y juego de instrucciones
Mapa de memoria y modos de direccionamiento
Conocer los diferentes tipo de arquitectura de ejecucin que existen
Conocer los diferentes modos de direccionamiento que existen
Aprender a implementar un generador de cdigo objetos eficaz
Aprender a separar los aspectos dependientes e independientes del entorno
Adquirir una visin crtica acerca del proceso de construccin de generadores de cdigo
Advertir la naturaleza potencialmente ineficiente del proceso de generacin de cdigo
Motivar y justificar el estudio de tcnicas de optimizacin de cdigo
ndice
Introduccin
Resolucin de referencias simblicas
Modos de direccionamiento
Modos de direccionamiento & entornos de ejecucin
Traduccin al juego de instrucciones
Mquinas a pila
Mquinas con registro acumulador
Mquinas con cdigo de tercetos
Mquinas con cdigo de cuartetos
Generacin de cdigo final en la prctica
Bibliografa
Foco de atencin
El generador de cdigo intermedio
toma una a una las instrucciones de
cdigo intermedio y las traduce a
cdigo ejecutable
Generacin de
cdigo final
0000 0011
0000 0011
0100 0001
0100 0000
0001 0010
Los lenguaje de
cdigo intermedio
utilizado conviene
que se acerquen
estructuralmente
lo mximo posible
al
juego
de
instrucciones de
la
arquitectura
final para que el
proceso
de
traduccin sea lo
ms
directo
posible
Javier Vlez Reyes jvelez@lsi.uned.es
MOVE t1 a
a = a - b;
MOVE t2 b
else
b = b + 1;
CMP t1 t2
BZ E1
SUB t3 t1 t2
E1: MOVE t4 #1
ADD t5 t2 t4
MOVE b t5
Foco de atencin
MOVE a t3
LD #20[.IX] /100
LD #21[.IX] #12[.IX]
CMP #20[.IX] #21[.IX]
BZ E1
SUB #22[.IX] #20[.IX] #21[.IX]
Traduccin a
cdigo ensamblador
LD /100 #22[.IX]
E1: LD
#23[.IX] #1
Traduccin a
cdigo final
#21[.IX] #24[.IX]
Generacin de
cdigo final
Cdigo final
MOVE t1 a
LD #20[.IX] /100
MOVE t2 b
LD #21[.IX] #12[.IX]
CMP t1 t2
Direccionamiento en memoria
BZ E1
BZ E1
SUB t3 t1 t2
MOVE a t3
LD /100 #22[.IX]
E1: MOVE t4 #1
E1: LD
#23[.IX] #1
ADD t5 t2 t4
MOVE b t5
LD
#21[.IX] #24[.IX]
Modos de direccionamiento
Por norma general existen una coleccin de modos de direccionamiento distintos que se utilizan en
diferentes contextos. Es frecuente que una instruccin no soporte cualquier modo de direccionamiento
sino solo un subconjunto de ellos, lo que puede influir directamente en el proceso de traduccin a
cdigo objeto. A continuacin revisamos los principales modos de direccionamiento
I. Inmediato
El direccionamiento inmediato es
aquel en el que el operando forma
parte la propia instruccin de cdigo
ejecutable. Se expresa anteponiendo
# al valor del operando
El direccionamiento directo a
registro permite direccionar un valor
que est almacenado en uno de los
registros del entorno de ejecucin
objetivo
ADD R1 #3
ADD R1 #3
IV. Indirecto
V. Relativo a registro
El direccionamiento relativo a
registro permite expresar una
direccin de desplazamiento sobre
la base del valor de memoria en un
registro
ADD R1 [R3]
ADD R1 #3[SP]
BR $3
D. Directo a memoria
Variables globales
Variables locales
Parmetros
Temporales
Valores Literales
Variables globales
Variables locales
Parmetros
Temporales
Valores Literales
Variables globales
Variables locales
Parmetros
Temporales
Esttico
Valores Literales
De pila
Dinmico
D. Relativo a registro
Datos estticos
Valor retorno
Ejemplo
Direccin retorno
MOVE t1 a
LD #20[.IX] /100
MOVE t2 b
LD #21[.IX] #12[.IX]
CMP t1 t2
BZ E1
SUB t3 t1 t2
MOVE a t3
E1: MOVE t4 #1
Direccionamiento
en memoria
.IX
Parmetros
.IX + 12
LD /100 #22[.IX]
E1: LD
#23[.IX] #1
ADD t5 t2 t4
MOVE b t5
LD
#21[.IX] #24[.IX]
Enlace Control
RA
Como hemos dicho, el tipo de entorno de ejecucin puede condicionar los modos
de direccionamiento disponibles en el juego de instrucciones. Pero, a tenor de lo
estudiado en el tema anterior sobre activacin de subprogramas, merece a su
vez reflexionar qu modos de direccionamiento podes necesitas para cada tipo
de objeto de datos en funcin del tipo de entorno disponible
.IX + 20
Variables locales
t1
t2
t3
t4
t5
Memoria libre
Cdigo final
MOVE t1 a
LD #20[.IX] /100
MOVE t2 b
LD #21[.IX] #12[.IX]
CMP t1 t2
BZ E1
Traduccin de operaciones
BZ E1
SUB t3 t1 t2
MOVE a t3
LD /100 #22[.IX]
E1: MOVE t4 #1
E1: LD
ADD t5 t2 t4
MOVE b t5
#23[.IX] #1
Juego de instrucciones
LD
#21[.IX] #24[.IX]
Tercetos
Grafos sintcticos
Representaciones
jerrquicas
Cuartetos
Representaciones
lineales
Generacin de
cdigo final
Mquinas a pila
I. Mquinas a pila
Las mquinas a pila disponen de una pila de operandos donde realizan todas las operaciones propias
de la unidad aritmtico lgica. Para operar una operacin aritmtica, por ejemplo, primero se meten
los operandos en la pila uno o dos segn sea unaria o binaria la operacin y despus se aplica el
operador que extrae de la pila el nmero de operandos que requiere e inserta el resultado en la cima
Traduccin
PUSH b
PUSH C
ADD
POP a
ADD a b c
Cdigo final
c
b
PUSH b
b+c
PUSH C
ADD
POP a
Cdigo intermedio
Traduccin
LD c
ADD b
ST a
ADD a b c
Cdigo final
c
LD c
b+c
b+c
ADD b
ST a
Cdigo intermedio
Cdigo final
Traduccin
LD a b
ADD a c
b+c
a b
ADD a c
LD
Cdigo final
Traduccin
ADD a b c
b+c
ADD a b c
En esta traza de ejecucin se la operacin de
suma se realiza directamente con una nica
instruccin en ensamblador. Esto es posible
debido a que los operaciones no destruyen el
valor de los argumentos de entrada tras la
operacin
LD #20[.IX] /100
Generacin de cdigo
intermedio
LD #21[.IX] #12[.IX]
CMP #20[.IX] #21[.IX]
BZ E1
MOVE t1 a
MOVE t2 b
CMP t1 t2
BZ E1
Traduccin a cdigo
ensamblador ENS2001
#23[.IX] #1
SUB t3 t1 t2
MOVE a t3
LD
E1: MOVE t4 #1
#21[.IX] #24[.IX]
ADD t5 t2 t4
MOVE b t5
ENS2001
ENS-2001 es una mquina virtual desarrollada con fines educativos que dispone de todos los
elementos tpicos de una arquitectura Von Newman estndar y sirve de marco de simulacin para la
generacin de un cdigo final ejecutable y depurable dentro de un entorno visual independiente de
plataforma. A continuacin describimos sus elementos
Visin general
0
CPU
Registros
SR
R0
R1
R2
R3
R4
PC
SP
R5
R6
R7
R8
R9
IX
IY
Z
Memoria
UC
Bus de datos
16 bits
ALU
(CA2)
Bus de memoria
16 bits
65535
ENS-2001 es una mquina virtual desarrollada con fines educativos que dispone de todos los
elementos tpicos de una arquitectura Von Newman estndar y sirve de marco de simulacin para la
generacin de un cdigo final ejecutable y depurable dentro de un entorno visual independiente de
plataforma. A continuacin describimos sus elementos
Registros
R0
Registros de estado
SR
Registro Acumulador
...
R9
Registros generales
PC
Contador de Programa
SP
Puntero de pila
IX
IY
D.
D.
D.
D.
D.
D.
Registros de ndice
Memoria
Pila
(configurable)
Inmediato
Directo a registro
Directo a memoria
Indirecto
Relativa a Reg. ndice
Relativo a PC
:
:
:
:
:
:
#1
.R3
/1000
[.R3]
#3[.IX]
$3
#3[.IY]
65535
Consltese el manual
de usuario de ENS-2001
ENS-2001 es una mquina virtual desarrollada con fines educativos que dispone de todos los
elementos tpicos de una arquitectura Von Newman estndar y sirve de marco de simulacin para la
generacin de un cdigo final ejecutable y depurable dentro de un entorno visual independiente de
plataforma. A continuacin describimos sus elementos
Juego de instrucciones
int gAddress
if (s instanceof SymbolVariable)
if (scope.getLevel () == 0)
Temporal
SymbolVariable
-String name
-String name
-ScopeIF scope
-TypeIF type
-Integer address
-ScopeIF scope
-Integer size
-Integer Address
...continua
create
IntermediateCodeBuilder cb =
}
}
Lo que el estudiante no ve
ExecutionEnvironment e =
public create (List<QuadrupleIF> qs) {
for (Quadruple q: qs) {
buffer.append(e.translate (q));
invoke
...continua
create
IntermediateCodeBuilder cb =
}
}
if (q.getOperation.equals
(ADD)) {
finalCodeFactory.create
(cb.create
());
Esta
implementacin
:}
buffer.add(e.translate (q));
Lo que el estudiante no ve
...continua
create
IntermediateCodeBuilder cb =
}
}
finalCodeFactory.create
(cb.create
());
La traduccin de los
private
String translate (OperandIF o) {
Material de estudio
Bibliografa bsica
Construccin de compiladores: principios y prctica
Kenneth C. Louden International Thomson Editores,
2004 ISBN 970-686-299-4
Material de estudio
Bibliografa complementaria
Compiladores: Principios, tcnicas y herramientas.
Segunda Edicin Aho, Lam, Sethi, Ullman
Addison Wesley, Pearson Educacin, Mxico 2008