You are on page 1of 29

Generacin de Cdigo No

Optimizado
De la Representacin Intermedia a
Cdigo de Mquina
Introduccin
Los compiladores se utilizan en casi todas las formas de la
computacin y cualquier involucrado en esta rea debera conocer
la organizacin y el funcionamiento bsico de un compilador, la
generacin de cdigo no optimizado y de la representacin
intermedia a cdigo de mquina.
En este contenido hablaremos de:
Overview de un Procesador Moderno
Lenguaje de Maquina
Convenciones de Llamado
Generacin de Expresiones
Generacin de Control de Flujo
Generacin de Procedimientos
Linking

Qu es un Compilador?
Es aquel traductor que tiene como entrada una
sentencia en lenguaje formal y como salida tiene
un fichero ejecutable, es decir, realiza una
traduccin de un cdigo de alto nivel a cdigo
mquina (tambin se entiende por compilador
aquel programa que proporciona un fichero objeto
en lugar del ejecutable final).

Anatoma de un Compilador
Optimizador de Cdigo Intermedio
Generador de Cdigo
Representacin Intermedia Optimizada
Cdigo en Assembler
Generador de Cdigo Intermedio
Representacin Intermedia
Analizador Lxico (Scanner)
Analizador Sintctico (Parser)
Token Stream
Arbol de Parseo
Programa (character stream)
El Generador de Cdigo debe...
Traducir todas las instrucciones en la
representacin intermedia a lenguaje
ensamblador
Asignar espacio para variables, arreglos, etc.
Adherirse a las convenciones de llamado
Crear la informacin simblica necesaria
Resumen de un Procesador Moderno
ALU
Control
Memoria
Registros
Procesador: Es el cerebro del computador, se denomina
comnmente (Unidad Central de Proceso) CPU.
Unidad Aritmtica Lgica
Unidad aritmtica-
lgica: Elemento
que realiza las
operaciones
aritmticas y
lgicas entre los
datos
Sumar
Restar
Multiplicar
Desplazamiento de registros
Comparaciones
Operaciones
tpicas
Unidad Aritmtica Lgica
Muchas operaciones aritmticas pueden
causar una excepcin
overflow y underflow
Puede operar en distintos tipos de datos
8, 16, 32 bits
Aritmtica con y sin signo
Operaciones de punto flotante (ALU separada)
Instrucciones para convertir entre formatos
Unidad de Control
Es el centro nervioso del
ordenador, ya que desde ella
se controlan y gobiernan
todas las operaciones. Cmo
funciones bsica tiene:

tomar las instrucciones de memoria
decodificar o interpretar las instrucciones
ejecutar las instrucciones (tratar las situaciones de tipo
interno (inherentes a la propia CPU) y de tipo externo
(inherentes a los perifricos)
Unidad de Control
Para realizar su funcin, la unidad de control
consta de los siguientes elementos:

Contador de programa
Registro de instrucciones
Decodificador
Reloj
Secuenciador

Elementos de la Unidad de Control:

El reloj: consiste en un circuito elctrico capaz de generar una
sucesin de pulsos a intervalos de tiempo constantes El intervalo
entre dos puntos de reloj se denomina ciclo, en determinados
computadores el ciclo puede descomponerse en subciclos. Los
restantes circuitos de la mquina se sincronizan con estas seales
de reloj; as se controla la duracin de las distintas instrucciones.
Contador de programa (CP): Tambin denominado registro
contador de instruccin, (RCI). Su misin es controlar el orden de
ejecucin de las instrucciones del programa, de acuerdo con su
contenido. Un programa no siempre ejecuta las instrucciones
secuencialmente. Puede haber instrucciones de salto o bifurcacin.
Registro de Instruccin (RI): es una unidad
de almacenamiento temporal, este registro guarda la
instruccin cuando se extrae de la memoria principal y
se mantiene mientras se realiza la decodificacin
o interpretacin.
Decodificador: habitualmente, toda instruccin
contiene un campo conocido como cdigo de
operacin, que indica el tipo de operacin que hay que
realizar; el decodificador es el elemento encargado de
realizar el anlisis del cdigo de operacin.
Secuenciador: Es un generador de rdenes simples,
denominadas micro rdenes que sincronizadas con el
reloj y distribuidas a los elementos necesarios
permiten la ejecucin de la instruccin.
Memoria
La Memoria: Est compuesta por un nmero de celdas
consecutivas llamadas byte, cada byte pueden almacenar
un carcter de informacin.
Memoria de Datos
Cada byte est conformado por 8 bits y el computador sabe dnde
se encuentra en memoria porque cada byte tiene un nmero nico
que la identifica, llamada direccin, por medio del cual los
programas las localizan o referencian. La memoria la utilizamos
para almacena datos y programas. Su constitucin fsica era hasta
hace unos aos formada por ncleos magnticos.
Los computadores actuales usan para la memoria el componente
bsico llamado Chip electrnico. Debido a que el elemento
anterior es ms pequeo y barato se ha logrado reducir el costo de
los equipos y el tamao. La capacidad de almacenamiento de un
computador puede expresarse en funcin del nmero de bytes que
puede almacenar. Un byte son 8 bits. La grafica muestra como
almacena la computadora la palabra AMOR cada carcter en
memoria se representa por una secuencia de unos y ceros llamada
cdigo ASCII.
La Memoria RAM: En la memoria RAM almacenan las
instrucciones y los datos que el computador maneja, es una
memoria voltil lo cual significa que al apagar el computador se
borra. Para efecto de su administracin tcnica se conocen las
siguientes divisiones:
Registros
Registros: Cada uno de ellos es una parte
Integral del procesador. Procesadores posteriores
tienen dos registros ms, con capacidad mayor
para el almacenamiento de informacin. Es un rea
temporal por la cual pasan los datos mientras estn
siendo procesados El primer grupo de registros AX,
BX, CX y DX tambin llamados de propsito
general, son utilizadas para realizar operaciones.
Los procesadores 386 y posteriores tienen 8 registros de
propsito general, y son EAX, EBX, ECX, EDX, ESI,
EDI, EBP y ESP.
El tamao del registro vara entre 16 o 32 bits,
dependiendo del microprocesador.


El grupo de registros (CS, DS, SS) de segmento se usan para
ayudar al procesador a encontrar su camino por la memoria del
computador. Son tiles para ayudar en los procesos de toma de
datos de la memoria. CS, indica donde se almacena un programa
en memoria, DS sirve para localizar datos en memoria.

El ltimo grupo de registro ayudan a los anteriores y son: IP
Registr apuntador de Instrucciones, guarda el lugar de memoria
en que se encuentra la instruccin siguiente a ejecutar por el
procesador. Los otros (SI y DI) ayudan en tareas de movimiento
de datos.

Las instrucciones de un lenguaje de
programacin se pueden clasificar en:

Instrucciones de transferencias de datos: Son aquellas de entrada o
lectura y de salida o escritura. En el caso de las instrucciones de entrada o
lectura, se lleva el dato de entrada o lectura desde la unidad de entrada a
la memoria. Si por el contrario es una instruccin de salida o escritura, se
lleva el dato de la memoria a la unidad de salida.
Instrucciones de tratamiento: Se trata de las instrucciones aritmtica-
lgicas y las de desplazamientos. As como suma de datos,
comparaciones.
Instrucciones de flujo de control o de bifurcacin y salto: Las
instrucciones de flujo de control son aquellas instrucciones que alteran el
orden secuencial de la ejecucin de un programa. Tambin hay
instrucciones que posibilitan la interrupcin de la ejecucin o saltar a
ejecutar otro programa. Cuando termina cualquiera de estas instrucciones,
el programa contina ejecutndose desde el punto en el que se
interrumpi.


Convenciones de Llamado
Layout de Memoria:

Inicio del Stack
Manejo del Heap
free lists.
Posicin de inicio en el segmento
de texto

Disciplinas de Paso de Parmetros:
Mtodos distintos
Llamada por referencia: El paso por referencia permite
pasar una variable a una funcin y devolver los cambios
que la funcin ha hecho al programa principal. El mismo
efecto se consigue pasando un puntero a la funcin.
Llamada por valor: Por valor significa que vos pasas el
valor de una variable, es decir si tienes una funcin que
recibe 1 argumento por valor, vos recibs el valor de la
variable pero NO la modificas.
Generacin de Expresiones
El problema de las expresiones disponibles consiste en
determinar que expresiones estn disponibles al inicio de
cada bloque bsico.
Una expresin est disponible en un punto si el
resultado que se obtuvo cuando se calcul an es el mismo
que si se vuelve a calcular en el punto en que estamos.
Ejemplo:
k=b+c;
r=d*e
b=5;
Generacin de Control de Flujo
Aplanar la estructura del control
Usar un template
Poner etiquetas nicas para puntos donde el control
se une (join points)
Ahora generamos el cdigo apropiado


Template para condicionales:
If
Else
Ejemplo:

if (test)
true_body
else
false_body
<do the test>
boper , lab_true
<false_body>
j lab_end
lab_true:
<true_body>
lab_end:
Template para ciclos while:
while (test)
body

lab_cont:
<do the test>
boper , lab_body
j lab_end
lab_body:
<body>
j lab_cont
lab_end:

Generacin de Procedimientos

La Generacin por procedimientos es un trmino
ampliamente usado en la produccin de medio; se
refiere al contenido generado por medio
de algoritmos en lugar de en forma manual. A menudo
significa que el contenido se crea sobre la marcha en
lugar de crearse antes de la distribucin. Est
generalmente relacionado con aplicaciones de
computacin grfica y en el diseo de los niveles de
los videojuegos.
Linker

Un enlazador (en ingls, linker) es un programa que
toma los objetos generados en los primeros pasos del
proceso de compilacin, la informacin de todos los
recursos necesarios (biblioteca), quita aquellos recursos
que no necesita, y enlaza el cdigo objeto con su(s)
biblioteca(s) con lo que finalmente produce un fichero
ejecutable o una biblioteca. En el caso de los programas
enlazados dinmicamente, el enlace entre el programa
ejecutable y las bibliotecas se realiza en tiempo de carga
o ejecucin del programa.
Smbolos:

Ejecutable es una coleccin
Compilaciones separadas
Libreras linkeadas esttica y dinmicamente
Por lo tanto, no podemos crear una imagen de
memoria en tiempo de compilacin
Fase adicional del linker para juntarlo todo y crear la
imagen final de memoria
Salida del compilador:

Crear cdigo objeto con direcciones
simblicas que pueden ser reposicionadas
Direcciones simblicas de todos los datos y
principios de procedimientos que otros
necesitan accesar son exportados
Exportar los nombres de smbolos de
referencias externas

Conclusin
Este trabajo servir mucho en el momento de la creacin de un
compilador, ya que en l se detallan todas y cada una de las partes
que involucran a este.
La funcin de un compilador es leer un programa escrito es un
lenguaje, en este caso el lenguaje fuente, y lo traduce a un programa
equivalente en otro lenguaje, el lenguaje objeto.
Por otro lado, comprend que un compilador, requiere de una
sintaxis y lenguajes especficos, ya que, al igual que el lenguaje
humano, si no lo escribimos correctamente el compilador no har lo
que deseamos. Y que en la compilacin hay dos partes: Anlisis y
Sntesis. La parte del anlisis divide al programa fuente en sus
elementos componentes y crea una representacin intermedia.
Por lo tanto, no parece tan complicado crear un compilador, slo se
necesitan los conocimientos adecuados y dedicarle su tiempo para
tener xito.

You might also like