Introduccion A La Compilacion Ensambler
Enviado por jcarlos12 • 24 de Mayo de 2013 • 6.425 Palabras (26 Páginas) • 370 Visitas
UNIDAD 1
Introducción a la compilación
Breve Historia
En 1950, John Backus dirigió una investigación en I.B.M. en un lenguaje algebraico. En 1954 se empezó a
desarrollar un lenguaje que permitía escribir fórmulas matemáticas de manera traducible por un ordenador.
Le llamaron FORTRAN (FORmulae TRANslator), este fue el primer lenguaje considerado de alto nivel.
Surgió así por primera vez el concepto de un traductor, como un programa que traducía un lenguaje a
otro lenguaje. En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje
traducido de bajo nivel, se emplea el término compilador.
La tarea de realizar un compilador no fue fácil, el primer compilador de FORTRAN tardó 18 añospersona
en realizarse y era muy sencillo. Este desarrollo del FORTRAN estaba muy influenciado por la máquina
objeto en la que iba a ser implementado.
En 1958, se dividía por primera vez el compilador en dos fases, designadas como el "front end" y el "back end".
La primera fase (front end) es la encargada de analizar el programa fuente y la segunda fase (back end) es la
encargada de generar código para la máquina objeto. El puente de unión entre las dos fases era un lenguaje
intermedio que se designó con el nombre de UNCOL (UNiversal Computer Oriented Language). Para que un
compilador fuera utilizable por varias máquinas bastaba únicamente modificar su back end.
La técnica de la optimización apareció desde el desarrollo del primer compilador de FORTRAN. Backus
comenta cómo durante el desarrollo del FORTRAN se tenía el miedo de que el programa resultante de la
compilación fuera más lento que si se hubiera escrito a mano. Para evitar esto, se introdujeron algunas
optimizaciones en el cálculo de los índices dentro de un bucle. Pronto se sistematizan y se recoge la división de
optimizaciones independientes de la máquina y dependientes de la máquina. Entre las primeras están la
propagación de valores , el arreglo de expresiones, la eliminación de redundancias, etc. Entre las segundas se
podría encontrar la localización de registros, el uso de instrucciones propias de la máquina y el
reordenamiento de código.
En la actualidad, el proceso de la compilación ya está muy asentado. Un compilador es una herramienta bien
conocida, dividida en diversas fases. Algunas de estas fases se pueden generar automáticamente (analizador
léxico y sintáctico) y otras requieren una mayor atención por parte del escritor de compiladores (las partes de
traducción y generación de código).
Se están mejorando las diversas herramientas disponibles. También la aparición de nuevas generaciones de
lenguajes ha provocado la revisión y optimización de cada una de las fases del compilador. El último lenguaje
de programación de amplia aceptación que se ha diseñado, el lenguaje Java, establece que el compilador no
genera código para una máquina determinada sino para una virtual, la Java Virtual Machine (JVM), que
posteriormente será ejecutado por un intérprete, normalmente incluido en un navegador de Internet. El gran
objetivo de esta exigencia es conseguir la máxima portabilidad de los programas escritos y compilados en Java,
pues es únicamente la segunda fase del proceso la que depende de la máquina concreta en la que se ejecuta el
intérprete.
¿ Qué es un compilador ?
Un traductor es cualquier programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y
da como salida otro texto en un lenguaje, denominado objeto.
En el caso de que el lenguaje fuente sea un lenguaje de programación de alto nivel y el objeto sea un lenguaje
de bajo nivel, a dicho traductor se le denomina compilador. Un ensamblador es un compilador cuyo lenguaje
fuente es el lenguaje ensamblador. Un intérprete no genera un programa equivalente, sino que toma una
sentencia del programa fuente en un lenguaje de alto nivel y la traduce al código equivalente y al mismo
tiempo lo ejecuta. Históricamente, con la escasez de memoria de los primeros ordenadores, se puso de moda
el uso de intérpretes frente a los compiladores, pues el programa fuente sin traducir y el intérprete juntos
daban una ocupación de memoria menor que la resultante de los compiladores. La mejor información sobre
los errores por parte del compilador así como una mayor velocidad de ejecución del código resultante hizo que
poco a poco se impusieran los compiladores.
Ventajas de compilar frente a interpretar
Se compila una vez, se ejecuta n veces.
En bucles, la compilación genera código equivalente al bucle, pero interpretándolo se traduce tantas
veces una línea como veces se repite el bucle.
El compilador tiene una visión global del programa.
Ventajas del intérprete frente al compilador
Un intérprete necesita menos memoria que un compilador.
Permiten una mayor interactividad
...