Programacin II Margarita lvarez Generador de cdigo objeto Toma como entrada una representacin intermedia del programa fuente y produce como salida un programa objeto equivalente. Etapa inicial Tabla de Smbolos Optimizador de cdigo intermedio Generador de Cdigo Objeto Programa fuente Cdigo intermedio Cdigo intermedio Programa objeto 2 Generador de cdigo objeto Programa Objeto: puede tener distintas formas: Programa en lenguaje de mquina absoluto: tiene la ventaja que se puede colocar en una posicin fija de memoria y ejecutarse inmediatamente. Programa en lenguaje de mquina relocalizable: permite que los subprogramas se compilen por separado. Un conjunto de mdulos objetos relocalizables se pueden enlazar y cargar para su ejecucin mediante un cargador enlazador. Programa en lenguaje ensamblador: facilita el proceso de generacin de cdigo. Se pueden generar instrucciones simblicas y utilizar las macros del ensamblador para ayudar a generar el cdigo. Generador de cdigo objeto Administracin de memoria: la correspondencia entre los nombres del programa fuente con direcciones de objetos de datos en la memoria durante la ejecucin la realiza la etapa inicial en cooperacin con el generador de cdigo. Las entradas en la Tabla de Smbolos se van creando conforme se examina las declaraciones de un procedimiento. El tipo en una declaracin determina la cantidad de memoria necesaria para el nombre declarado. Segn la informacin de la Tabla de Smbolos se pueden determinar una direccin relativa para el nombre de un rea de datos para el procedimiento. Seleccin de instrucciones: es importante que el conjunto de instrucciones sea uniforme y completo. Las velocidades de las instrucciones es un factor importante. Si no se tiene en cuenta la eficiencia del programa objeto, la seleccin de instrucciones es sencilla. Para cada tipo de proposicin de tres direcciones, se puede disear un esqueleto de cdigo. MOV y, R0 /* cargar y en el registro R0 */ ADD z, R0 /* suma z a R0 */ MOV R0, x /* almacenar R0 en x */ Ejemplo: cdigo de tres direcciones de: x := y + z 3 Generador de cdigo objeto Asignacin de registros: Las instrucciones que implican operandosen registros son generalmente ms rpidas que las de los operandos en memoria. Por lo tanto, utilizar eficientemente los registros es fundamental para generar un buen cdigo. El uso de registros se divide en dos subproblemas: Durante la asignacin de los registros: se selecciona el conjunto de variables que residiren los registros en un momento del programa. Durante la fase posterior de asignacin a los registros, se escoge el registro especfico en el que residiruna variable. Eleccin del orden de evaluacin: el orden en que se realizan los clculos puede variar la eficiencia del cdigo objeto. Algunos ordenamientos de los clculos necesitan menos registros que otros para guardar resultados intermedios. Elegir un orden mejor es un problema difcil, NP-completo.