Please enable JavaScript.
Coggle requires JavaScript to display documents.
Generación del código objeto, optimización independiente de la maquina -…
Generación del código objeto
El código intermedio
es particularmente utilizad cuando
el objetivo de compilador es producir
código muy eficiente, ya que para
hacerlo así se requiere una cantidad
importante de análisis de la propiedad
del código objetivo, y esto se facilita
mediante el uso del código intermedio.
El generador de código objeto
transforma el código Intermedio optimizado en código objeto de bajo nivel. Toma código intermedio y genera Código objeto para la máquina considerada Es la parte más próxima a la arquitectura de la Máquina.
La fase final de un compilador es la generación de código objeto, que por lo general consiste en código de máquina relocalizable o código ensamblador.
Algoritmos que los generadores de código
pueden ser usados para traducir la representación intermedia
en una secuencia de instrucciones del lenguaje destino
El programa destino
La arquitectura del conjunto de instrucciones de la maquina destino tiene un impacto considerable en la dificultad de construir un buen generador de código que produzca código maquina de alta calidad
RISC - Tiene muchos registros, instrucciones de tres direcciones, modos de direccionamiento simple. Años 90's.
CISC - Tiene menos registros, instrucciones de dos direcciones, una variedad de modos de direccionamiento, varias clases de registro, instrucciones de longitud variable e instrucciones con efecto adicionales
Basadas en pilas - las operaciones se realizan metiendo operandos en una pila, y después llevando a cabo las operaciones con los operandos en la parte superior de la pila.
Selección de instrucciones
El generador de código debe asignar el programa de representacion intermedia a una secuencia de código que la maquina de destino pueda ejecutar.
Para cada tipo de instrucciones de tres direcciones, podemos diseñar un esqueleto de código que defina el código destino a generar para esa construcción
Organización y gestión memoria
una primera división de la memora es la distingue entre la memoria del programa y el destinada a los datos
su tamaño es conocido en tiempo de compilación y, en la mayoría de los lenguajes modernos, se puede decir que es "invisible": el código no puede modificarse a si mismo
Paralelismo a nivel de instrucción
La evolución en la arquitectura de procesadores permitió que la ejecución de instrucciones en simultaneo pasara de ser algo imaginario a algo real.
la multitarea y la ejecución de procesos en paralelo, era el objetivo por lograr. El ciclo de reloj consiste en la unidad de medida utilizada para medir la velocidad en la que un procesador ejecuta la instrucciones básicas
optimización independiente de la maquina
Las construcciones de lenguaje de alto nivel puede introducir una sobrecarga considerable en el tiempo de ejecución si traducimos directamente cada construcción de manera independiente en código maquina
a la eliminación de instrucciones innecesarias en el código objeto, o la sustitución de una secuencia de instrucciones por una secuencia mas rápida de instrucciones que haga lo mismo, se le conoce como "mejora de código u "optimización de código"