Beruflich Dokumente
Kultur Dokumente
Generacin de Cdigo No
Optimizado
De la Representacin Intermedia a
Cdigo de Mquina
Resumen
Introduccin
Overview de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
Universidad Galileo
Anatoma de un Compilador
Programa (character stream)
Analizador Lxico (Scanner)
Token Stream
Analizador Sintctico (Parser)
Arbol de Parseo
Generador de Cdigo Intermedio
Representacin Intermedia
Optimizador de Cdigo Intermedio
Representacin Intermedia Optimizada
Generador de Cdigo
Cdigo en Assembler
Anatoma de un Compilador
Programa (character stream)
Analizador Lxico (Scanner)
Token Stream
Analizador Sintctico (Parser)
Arbol de Parseo
Generador de Cdigo Intermedio
High-level IR
Low-level IR
Representacin Intermedia
Generador de Cdigo
Cdigo en Assembler
cbr
<
ldl i len
cbr
!=
stl i
lda
+
ldl i
ldf v
ldf v ldl i
exit
Resumen
Introduccin
Resumen de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
Universidad Galileo
Memory
Control
Memoria
Registros
Registers
ALU
Control
Memory
Registers
ALU
Control
Memory
overflow y underflow
8, 16, 32 bits
Aritmtica con y sin signo
Operaciones de punto flotante (ALU separada)
Instrucciones para convertir entre formatos
(cvt.s.d)
Registers
ALU
Control
Control
Maneja la secuencia de Instrucciones
Ejecucin de Instrucciones
Todas las instrucciones estn en
memoria
Fetch de la instruccin a la que apunta
el PC y ejecutarla
Para instrucciones generales,
incrementar el PC para que apunte a la
siguiente posicin de memoria
Memory
Registers
ALU
Control
Control
Saltos no condicionales
Fetch de la siguiente instruccin de una localidad Memory
diferente
Salto incondicional a una direccin dada
Registers ALU
j label
Salto incondicional a una direccin en un registro
jr rsrc
Control
Para manejar llamadas a procedimientos, se hace
un salto incondicional, pero se guarda la
siguiente direccin en la secuencia actual en un
registro
jal label jalr rsrc
Control
Saltos Condicionales
Ejectuamos un test,
si es xitoso, fetch de instrucciones de
una nueva direccin,
de otra forma fetch de la siguiente
instruccin
Las instrucciones son de la forma:
brelop Rsrc1, Rsrc2, label
relop es de la forma:
eq, ne, gt, ge, lt, le
Memory
Registers
ALU
Control
Control
Transferencia de control en casos
especiales (raros)
traps y excepciones
Mecanismo
Guardar la posicin de la siguiente
instruccin (o la actual)
Encontrar la direccin a la que hay que
saltar (de un vector de excepciones)
Saltar a esa posicin
Memory
Registers
ALU
Control
Memory
Espacio de Direcciones plano
Memory
Compuesto de words
Direccionable por bytes
Necesitamos guardar
Programa
Variables locales
Stack
Heap
Registers
ALU
Control
Memory
Stack
locales
(parmetros)
Memory
Registers
Heap
Cdigo Generado
Objetos
Arrays
ALU
Control
Registers
Arquitectura load/store
Todas las operaciones se ejecutan en
registros
Necesitamos mover datos de/a memoria
a/de registros
Memory
Registers
ALU
Control
Otras Interacciones
Otras operaciones
Input/Output
Operaciones Privilegiadas / seguras
Manejo de hardware especial
Memory
Registers
ALU
Resumen
Introduccin
Resumen de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
19
Universidad Galileo
3c1c0fc0
279c7640
0399e021
8f998044
27bdffe0
afbf001c
afbc0018
0320f809
2404000a
8fbf001c
8fbc0018
27bd0020
03e00008
00001025
20
Universidad Galileo
3]
3]
3]
3]
3]
3]
3]
3]
3]
3]
3]
3]
3]
3]
assembly instruction
0x4009b0:
0x4009b4:
0x4009b8:
0x4009bc:
0x4009c0:
0x4009c4:
0x4009c8:
0x4009cc:
0x4009d0:
0x4009d4:
0x4009d8:
0x4009dc:
0x4009e0:
0x4009e4:
3c1c0fc0
279c7640
0399e021
8f998044
27bdffe0
afbf001c
afbc0018
0320f809
2404000a
8fbf001c
8fbc0018
27bd0020
03e00008
00001025
21
lui
addiu
addu
lw
addiu
sw
sw
jalr
li
lw
lw
addiu
jr
move
gp,0xfc0
gp,gp,30272
gp,gp,t9
t9,-32700(gp)
sp,sp,-32
ra,28(sp)
gp,24(sp)
ra,t9
a0,10
ra,28(sp)
gp,24(sp)
sp,sp,32
ra
v0,zero
Universidad Galileo
Representacin Intermedia
Generador de Cdigo
Cdigo en Assembler
Representacin Intermedia
Generador de Cdigo
Cdigo en Assembler
Assembler & linker
Binario Ejecutable
Procesador
Lenguaje Ensamblador
Ventajas
Simplifica la generacin de cdigo debido al uso de
instrucciones simblicas y nombres simblicos
Capa de abstraccin lgica
Las arquitecturas pueden ser descritas por un
lenguaje ensamblador
podemos modificar la implementacin
Instrucciones de macro assembler
Desventajas
Proceso adicional de ensamblaje y linking
Lenguaje Ensamblador
Lenguaje de Mquina Reposicionable (object
modules)
Todas las posiciones (direcciones) representadas por
smbolos
Mapeadas a direcciones de memoria en tiempo de linking y
loading
Flexibilidad de compilacin separada
Ejemplo de Assembler
item:
.word
1
.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
b
lab2
lab1:
lw $15, 40($sp)
bne $15, 1, $33
li $2, 1
b
lab1
Oscar Bonilla
26
Universidad Galileo
Resumen
Introduccin
Resumen de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
27
Universidad Galileo
Compatibilidad
Necesitamos Manejar
Procedimientos mltiples
Llamadas a libreras
Cdigo compilado por otros compiladores, escrito
en lenguajes distintos, assembler escrito a mano
Convenciones de llamado
Layout de memoria
Registros
Stack
Layout de Memoria
Inicio del Stack
Manejo del Heap
0x7fffffff
Stack
locals
(parameters)
free lists
Posicin de inicio
en el segmento de
texto
Heap
Objects
Arrays
Text segment
0x400000
Reserved
20
Registros
No es un registro, hard-wired a la constante 0
0 zero
hard-wired to zero
Registros
Return Address de una llamada (call)
Implicitamente copiada por jal y jalr
0 zero
31 ra
hard-wired to zero
return address
Registros
Frame pointer
Stack pointer
Pointer to global area
0 zero
28
29
30
31
gp
sp
fp
ra
hard-wired to zero
Registros
Reservado para uso del ensamblador
Se necesita almacenamiento para manejar
instrucciones de assembler compuestas
0 zero
1 at
28
29
30
31
gp
sp
fp
ra
hard-wired to zero
Reserved for asm
Registros
Retornan los resultados
Copiar el resultado cuando estamos listos para retornar
Usados para evaluar expresiones (si quieren)
0 zero
1 at
2 - 3 v0 - v1
28
29
30
31
gp
sp
fp
ra
hard-wired to zero
Reserved for asm
expr. eval and return of results
Registros
Primeros cuatro argumentos de una llamada
Se pueden usar para otra cosa si los argumentos no importan
Si hay ms argumentos se pasan por el stack
0
1
2-3
4-7
28
29
30
31
zero
at
v0 - v1
a0 - a3
hard-wired to zero
Reserved for asm
expr. eval and return of results
arguments 1 to 4
gp
sp
fp
ra
Registros
El resto son temporales
0
1
2-3
4-7
zero
at
v0 - v1
a0 - a3
8 - 25
28
29
30
31
hard-wired to zero
Reserved for asm
expr. eval and return of results
arguments 1 to 4
keep temporary values
gp
sp
fp
ra
Registros
En una llamada a procedimiento los temporales:
Son guardados por el caller
Son guardados por el callee
Alguna combinacin de ambos
0
1
2-3
4-7
zero
at
v0 - v1
a0 - a3
8 - 25
28
29
30
31
hard-wired to zero
Reserved for asm
expr. eval and return of results
arguments 1 to 4
keep temporary values
gp
sp
fp
ra
21
Pregunta:
Cules son las ventajas/desventajas de que:
El callee guarde los registros?
El caller guarde los registros?
Oscar Bonilla
39
Universidad Galileo
Registros
En una llamada a procedimiento los temporales:
Son guardados por el caller
Son guardados por el callee
Alguna combinacin de ambos
0
1
2-3
4-7
8-15
16 - 23
24, 25
28
29
30
31
zero
at
v0 - v1
a0 - a3
t0 - t7
s0 - s7
t8, t9
gp
sp
fp
ra
hard-wired to zero
Reserved for asm
expr. eval and return of results
arguments 1 to 4
caller saved temporary
calliee saved temporary
caller saved temporary
pointer to global area
stack pointer
frame pointer
return address
23
Stack
Guarda los parmetros y las variables locales
Cada invocacin obtiene una nueva copia
Stack
Direccin del n-simo
argumento es -(n-4)*4*$fp
Variables locales son
constantes positivas de $fp
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
sp
Stack
Al llamar un nuevo
procedimiento
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
24
fp
Local variables
Stack temporaries
Dynamic area
sp
Stack
Al llamar un nuevo
procedimiento, el caller:
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
sp
Stack
Al llamar un nuevo
procedimiento, el caller:
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
sp
Stack
Al llamar un nuevo
procedimiento, el caller:
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
sp
Stack
Al llamar un nuevo
procedimiento, el caller:
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
sp
Stack
En el procedimiento, el
calliee al principio:
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
25
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
sp
Stack
En el procedimiento, el
calliee al principio :
copiar $sp a $fp
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
fp
sp
Stack
En el procedimiento, el
calliee al principio :
copiar $sp a $fp
push $fp al stack
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
fp
sp
Stack
En el procedimiento, el
calliee al principio :
copiar $sp a $fp
push $fp al stack
push $ra al stack
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
fp
sp
Stack
En el procedimiento, el
calliee al principio :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
Calliee saved
registers
fp
sp
Stack
En el procedimiento, el
calliee al principio :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
Calliee saved
registers
Local variables
fp
sp
Stack
En el procedimiento, el
calliee al principio :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Dynamic area
sp
Stack
En el procedimiento, el calliee
al final :
...
argument 5
argument 4
26
fp
Local variables
Dynamic area
sp
Stack
En el procedimiento, el calliee
al final :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Dynamic area
sp
Stack
En el procedimiento, el calliee
al final :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
Calliee saved
registers
fp
sp
Stack
En el procedimiento, el calliee
al final :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
Calliee saved
registers
fp
sp
Stack
En el procedimiento, el calliee
al final :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
fp
sp
Stack
En el procedimiento, el calliee
al final :
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
old frame pointer
sp
Stack
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
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
sp
Stack
Al regresar de la llamada al
procedimiento, el caller:
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
27
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
arguments
sp
Stack
Al regresar de la llamada al
procedimiento, el caller:
actualizar $sp para ignorar
argumentos
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
sp
Stack
Al regresar de la llamada al
procedimiento, el caller:
actualizar $sp para ignorar
argumentos
pop de los registros caller
saved
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
Caller saved registers
sp
Stack
Al regresar de la llamada al
procedimiento, el caller:
actualizar $sp para ignorar
argumentos
pop de los registros caller
saved
continuar...
...
argument 5
argument 4
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Stack temporaries
Dynamic area
sp
30
Pregunta:
es necesario el $fp?
cules son las ventajas y desventajas de tener
$fp?
Oscar Bonilla
66
Universidad Galileo
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;
}
}
Oscar Bonilla
67
Universidad Galileo
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;
}
}
auxmath am;
am.sum3d(px, py, pz, 0, 0, 0);
Oscar Bonilla
68
Universidad Galileo
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;
}
}
69
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
??
??
this
ax (10)
ay (20)
az (30)
??
??
??
??
Dynamic area
Caller saved registers
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
Universidad Galileo
fp
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;
}
}
70
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
??
??
this
ax (10)
ay (20)
az (30)
??
??
??
??
Dynamic area
Caller saved registers
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
old frame pointer
return address
Universidad Galileo
fp
sp
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;
}
}
71
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
??
??
this
ax (10)
ay (20)
az (30)
??
??
??
??
Dynamic area
Caller saved registers
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
old frame pointer
return address
Local variable dx (??)
Local variable dy (??)
Local variable dz (??)
Universidad Galileo
fp
sp
Resumen
Introduccin
Resumen de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
72
Universidad Galileo
Creacin de Expresiones
Algoritmo ingenuo de generacin de cdigo
x = y op z
Seleccionar un registro Rsrc1 (digamos $t0) para cargar el
valor y
Generar instruccin para copiar, si y est:
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
t2
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;
??
??
this
ax (10)
ay (20)
az (30)
??
??
??
??
??
Dynamic area
Caller saved registers
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
old frame pointer
return address
Local variable dx (??)
Local variable dy (??)
Local variable dz (??)
Oscar Bonilla
74
Universidad Galileo
fp
sp
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
t2
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;
add
lw
sub
sw
Oscar Bonilla
??
??
this
ax (10)
ay (20)
az (30)
??address
??
?? src1
?? src2
?? dest
Dynamic area
Universidad Galileo
fp
sp
Cuidado
Los temporales son limitados
Cundo el rbol es grande, 18 registros temporales pueden
ser insuficientes asignar espacio en el stack
Muy ineficiente
Muchas copias, sumas con cero, etc.
No se preocupen, vamos a arreglarlas en la optimizacin
Mantengan el generador de cdigo muy muy simple
Resumen
Introduccin
Resumen de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
77
Universidad Galileo
38
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
t2
Programa Ejemplo
if(ax > bx)
dx = ax - bx;
else
dx = bx - ax;
<do test>
boper
??
??
this
ax (10)
ay (20)
az (30)
??address
??
?? src1
?? src2
?? dest
Dynamic area
Caller saved registers
<false body>
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
old frame pointer
return address
Local variable dx (??)
Local variable dy (??)
Local variable dz (??)
j
lab1
lab0:
<true body>
lab1:
Oscar Bonilla
80
Universidad Galileo
fp
sp
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
t2
Programa Ejemplo
if(ax > bx)
dx = ax - bx;
else
dx = bx - ax;
add
lw
bgt
??
??
this
ax (10)
ay (20)
az (30)
??address
??
?? src1
?? src2
?? dest
Dynamic area
Caller saved registers
<fale body>
j
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
old frame pointer
return address
Local variable dx (??)
Local variable dy (??)
Local variable dz (??)
lab1
lab0:
<true body>
lab1:
Oscar Bonilla
81
Universidad Galileo
fp
sp
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
t2
Programa Ejemplo
if(ax > bx)
dx = ax - bx;
else
dx = bx - ax;
add
lw
bgt
lw
add
sub
sw
j
lab0:
$t0,
$t1,
$t0,
$t0,
$t1,
$t2,
$t2,
lab1
$a1, zero
0($fp)
$t1, lab0
0($fp)
$a1, zero
$t0, $t1
-12($fp)
Dynamic area
Caller saved registers
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
old frame pointer
return address
Local variable dx (??)
Local variable dy (??)
Local variable dz (??)
<true body>
lab1:
Oscar Bonilla
??
??
this
ax (10)
ay (20)
az (30)
??address
??
?? src1
?? src2
?? dest
82
Universidad Galileo
fp
sp
v0
v1
a0
a1
a2
a3
v0
v1
t0
t1
t2
Programa Ejemplo
if(ax > bx)
dx = ax - bx;
else
dx = bx - ax;
add
lw
bgt
lw
add
sub
sw
j
lab0:
lw
sub
sw
lab1:
Oscar Bonilla
$t0,
$t1,
$t0,
$t0,
$t1,
$t2,
$t2,
lab1
add
$t1,
$t2,
$t2,
$a1, zero
0($fp)
$t1, lab0
0($fp)
$a1, zero
$t0, $t1
-12($fp)
??
??
this
ax (10)
ay (20)
az (30)
??address
??
?? src1
?? src2
?? dest
Dynamic area
Caller saved registers
Argument 7: bz (-1)
Argument 6: by (1)
Argument 5: bx (0)
old frame pointer
return address
Local variable dx (??)
Local variable dy (??)
Local variable dz (??)
Universidad Galileo
fp
sp
lab_cont:
<do the test>
boper , lab_body
j
lab_end
lab_body:
<body>
j
lab_cont
lab_end:
43
lab_cont:
<do the test>
boper , lab_body
j
lab_end
lab_body:
<body>
j
lab_cont
lab_end:
Pregunta:
Cul es la template para?
do
body
while (test)
Oscar Bonilla
87
Universidad Galileo
44
Question:
Cul es la template para?
do
body
while (test)
lab_begin:
<body>
<do test>
boper , lab_begin
Oscar Bonilla
88
Universidad Galileo
Resumen
Introduccin
Resumen de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
89
Universidad Galileo
Procedure Call
En el procedimiento, el calliee
al principio :
Dynamic area
Caller saved registers
arguments
old frame pointer
return address
Calliee saved
registers
fp
Local variables
Dynamic area
sp
46
Procedure Call
En el procedimiento, el calliee
al principio :
48
Procedure Call
proc_entry:
En el procedimiento, el calliee
add
al principio :
add
addi
sw
addi
sw
$t0,
$fp,
$sp,
$t0,
$sp,
$ra,
$fp, zero
$sp, zero
$sp, -4
($sp)
$sp, -4
($sp)
Procedure Call
Ejecutar el cuerpo del
procedimiento callee
Acceso a variables
locales y parmetros
como offsets del $fp
proc_entry:
add
add
addi
sw
addi
sw
. . .
$t0,
$fp,
$sp,
$t0,
$sp,
$ra,
$fp, zero
$sp, zero
$sp, -4
($sp)
$sp, -4
($sp)
Procedure Call
proc_entry:
En el procedimiento, el calliee al add
add
final :
addi
poner valores de retorno en v0,v1
sw
actualizar $sp usando $fp ($fp+4) + ...addi
sw
Pop los registros callee-saved del
. . .
stack
restaurar $ra del stack
restaurar $fp del stack
ejecutar jr ra para regresar al caller
$t0,
$fp,
$sp,
$t0,
$sp,
$ra,
$fp, zero
$sp, zero
$sp, -4
($sp)
$sp, -4
($sp)
51
Procedure Call
proc_entry:
add $t0, $fp, zero
add
$fp, $sp, zero
addi
$sp, $sp, -4
sw $t0, ($sp)
addi
$sp, $sp, -4
v0,v1
sw $ra, ($sp)
. . .
En el procedimiento, el calliee al
final :
poner valores de retorno en
$t2
-8($fp)
addi
$sp, $sp, -8
lw $ra, ($sp)
addi
$sp, $sp, 4
lw $fp, ($sp)
addi
$sp, $sp, 4
jr $ra
Resumen
Introduccin
Resumen de un procesador moderno
Lenguaje de Mquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking
Oscar Bonilla
96
Universidad Galileo
Smbolos
Ejecutable es una coleccin
Compilaciones separadas
Libreras linkeadas esttica y dinmicamente
Oscar Bonilla
Value
0|
0|
56|
0|
0|
56|
0|
0|
0|
Class
File
Proc
Proc
Global
Proc
Proc
Global
Proc
Global
Type
|ref=6
|end=3 int
|end=5 int
|
|ref=1
|ref=3
|
|
|
99
Section
|Text
|
|Text
|
|Text
|
|Bss
|
|Text
|
|Text
|
|Undefined|
|Undefined|
|Undefined|
Name
test.c
main
fib
internal_var
main
fib
external_var
foo
_gp_disp
Universidad Galileo
Linker
Ver todos los object files para encontrar
smbolos no resueltos
Hacer match de los smbolos y encontrar las
partes necesarias en las libreras
Layout en una sola imagen de memoria
Resolver todos los nombres simblicos a las
direcciones correctas de memoria y offsets
adecuados
Lecturas
Ballena
Captulo 7
Dragn (opcional)
Captulo 9, 10.1, 10.2, 10.3, 10.4
Oscar Bonilla
101
Universidad Galileo