“Preparación para la generación de código, generación de directivas para la tabla de símbolo”
Enviado por Rimma • 5 de Diciembre de 2018 • 2.853 Palabras (12 Páginas) • 627 Visitas
...
Para realizar el código intermedio se utilizan técnicas como “el código en tres direcciones”.
Ya que el código de tres direcciones es usado como un lenguaje intermedio en los compiladores, los operandos normalmente no contendrán direcciones de memoria o registros concretos, sino que direcciones simbólicas que serán convertidas en direcciones reales durante la asignación de registros. Es también común que los nombres de los operandos sean numerados secuencialmente ya que el código de tres direcciones es típicamente generado por el compilador.
CÓDIGO FINAL
PREPARATIVOS
Bueno al tener ya todo lo anterior de forma correcta ahora es el momento de preparar todo para generar un archivo con el código final partiendo del código intermedio. El trabajo que se realizará es leer las instrucciones guardadas en un
---------------------------------------------------------------
objeto codigointermedio, procesarlos uno a uno e ir escribiendo el resultado en el archivo final.
Para la gestión del código final, se utiliza una clase que puede ser llamada
códigofinal .
Ejemplo:
[pic 11]
[pic 12]
---------------------------------------------------------------
Generación de Código
La generación de código es una de las fases mediante el cual un compilador convierte un programa sintácticamente correcto en una serie de instrucciones a ser interpretadas por una máquina. La entrada en esta fase viene representada, típicamente, por un Árbol Sintáctico, un Árbol de Sintaxis Abstracta, o una Representación Intermedia; la máquina destino puede ser un microprocesador o una máquina abstracta tal como una máquina virtual o un lenguaje intermedio, legible por un humano.
Compiladores más sofisticados realizan múltiples traducciones en cadena (pipelining) con el fin de poder construir código para múltiples plataformas y evitar tener que construir todas las capas del compilador.
La generación de código: es usada para construir programas de una manera automática evitando que los programadores tengan que escribir el código a mano. La generación de código puede realizarse en tiempo de ejecución, Tiempo de carga, o Tiempo de compilación.
Significa la traducción de la representación intermedia a lenguaje ensamblador, después de la optimización, y después que se han asignado los registros y la memoria.
[pic 13]
---------------------------------------------------------------
Generación de directivas para la tabla de símbolos.
DIRECTIVAS
- Las directivas son comandos que afectan al ensamblador, y no al microprocesador, por lo que no generan código objeto. Se utilizan para definir segmentos, símbolos, procedimientos o subrutinas, reservar memoria, etc.
-
Directiva EQU (EQUivalence)
Sintaxis: nombre EQU expresión
- La directiva EQU asigna un nombre simbólico al valor de una expresión. El compilador, cuando encuentre en el código dicho nombre simbólico, lo sustituirá por el valor de la expresión. La expresión indicada puede ser:
- Una constante numérica.
- Una referencia de dirección (cualquier modo de direccionamiento).
- Cualquier combinación de símbolos y operaciones que generen un valor numérico.
- Otro nombre simbólico.
Ejemplos: COLUMNAS EQU 80
FILAS EQU 25
PANTALLA EQU FILAS*COLUMNAS MOVER EQU MOV
EDICION EQU "PULSAR TECLA" DIRECCION EQU [SI+BX]
---------------------------------------------------------------
-
Directiva DB (Define Byte)
Sintaxis: [nom_variable] EQU expresión
- La directiva DB reserva memoria para datos de tipo byte (8 bits), o para
una variable de este tipo, inicializando o no dicho byte y los posteriores.
- El nombre de la variable es opcional, y se asigna dicho nombre para el primer byte (recordar que el lenguaje máquina no entiende de variables, si no de direcciones de memoria. Una variable es una etiqueta o referencia para el compilador, el cual sustituye cada referencia a esta variable por la dirección de memoria correspondiente).
- La expresión es el valor inicial de la variable, y puede ser:
- Una constante numérica positiva o negativa con rango de byte (-128 a +127, ó de 0 a 255).
- Una cadena de caracteres delimitada por comillas simples o dobles.
- Un signo interrogante (?), que indica valor indefinido. Sólo reserva espacio en la memoria.
- n DUP(expresión), que repite 'n' veces la 'expresión'.
Ejemplos: VALOR DB 111
TEXTO DB "HOLA, SOY UN TEXTO" CALCULO DB 15*2
RESERVA DB 15 DUP(?) NODEFIN DB ?
- De modo similar a DB, se pueden definir otros tipos de variables en lenguaje ensamblador. Lo único que varía es el tamaño de los datos y el nombre de la directiva:
---------------------------------------------------------------
DB (Define Byte) Reservar datos de tamaño byte (8 bits)
DW (Define Word) Reservar datos de tipo palabra (16 bits)
DD (Define Doubleword)
...