Beruflich Dokumente
Kultur Dokumente
Compiladores
Un compilador es un programa que traduce un lenguaje fuente (source) en un
lenguaje objetivo (target) equivalente
Un
Un
Un
Un
Un
Un
Un
programa
programa
programa
programa
programa
programa
programa
C traducido a Assembler.
Pascal traducido a Assembler.
Java traducido a JVM.
Java traducido a C.
LaTex traducido a Tex.
Assembler traducido a instrucciones de mquina.
HDL traducido a circuitos de HW.
La Pila
Se utiliza para guardar variables locales. Es un arreglo (array) de dimensiones
variables que crece tpicamente hacia las direcciones ms bajas de memoria y
se achica hacia arriba.
Marco de Pila
Los lenguajes de programacin modernos (HLL) tienen tpicamente variables
locales. Cada invocacin de una funcin tiene su propia instancia de variables
locales. La porcin de la pila usada para invocar a una funcin o procedimiento
se denomina Marco de Pila (Marco de Pila (stack frame, SF) frame, SF) o
tambin o tambin activation activation record (AR) record (AR).
Organizacin
Un compilador puede usar cualquier esquema de layout que sea conveniente.
Los fabricantes de microprocesadores especifican esquemas de layout estndar
para su utilizacin para todos los compiladores. Si todos los compiladores usan
las mismas calling conventions, entonces funciones compiladas con un
compilador pueden llamar a funciones compiladas con otro compilador.
Pasaje de Parmetros
F (a , a , ..., a ) Los registros son ms rpidos que la memoria. En lo posible el
compilador debe mantener los valores en registros. Calling Calling convention
convention moderna moderna: mejor que poner a , a , ..., a en stack frame, van
a , ..., a ( )en registros r , r ,r ,r ,y a ,a ,a , ..., a en la pila. Si r ,r ,r ,r son
necesarios para otro propsito, la funcin llamada deber salvar los
argumentos en juego en el stack frame. Este espacio debe ser reservado en el
stack frame an si los parmetros se pasan va registros.
Algunos Parmetros.
Valor de Retorno. Variables Locales
Resultados intermedios de expresiones (temporarios)
Registros Asignacin
Registros - resguardo
El estado de los registros debe guardarse antes que la funcin invocada los
utilice.
Calling Conventions
Los registros R0 hasta R3 son usados para pasar parmetros a la funcin.
Dentro de la funcin se pueden usar para cualquier propsito y no necesitan
preservarse.
Los registros R4 hasta R11 deben ser preservados por la funcin llamada. Si
los usa hay que enviarlos a la pila en el prlogo de la funcin (push, inst. STM)
y recuperarlos al eplogo (pop, inst. LDM).
Los registros R12 hasta R15 tienen propsitos especiales. R13 es el Stack
Pointer (SP), R14 es el Link Register (LR), R12 es de scratch y R15 es el
Program Counter (PC
El valor de la funcin se devuelve en R0 (y en R1 de ser necesario).