Codigo Final

  • Uploaded by: Edder QA
  • 0
  • 0
  • February 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Codigo Final as PDF for free.

More details

  • Words: 1,844
  • Pages: 17
Loading documents preview...
UNIVERSIDAD NACIONAL “SANTIAGO ANTÚNEZ DE MAYOLO”

FACULTAD DE CIENCIAS

Escuela Profesional de Ingeniería de Sistemas e Informática

“CODIGO FINAL”

DOCENTE:

ING.SILVA ZAPATA MIGUEL ANGEL

CURSO:

TEORIA DE LENGUAJES

CICLO:

VII

INTEGRANTES:  CHAVEZ TORRES, Cristian  FIGUEROA VILLANUEVA, Juan  IBARRA VILLAFAN, Mack  ROSAS CAMPOS, Eric

HUARAZ – 2012

INDICE:

Pag.

I.

Introducción………………………………………………………………..……...03

II.

Código Final………...……………………………………………………………...04

2.1.

GeneraciónCódigo Objeto o Final……………………………………………...04

2.2. Código Objeto o Final……………………...……………………………………...06 2.3.

Partes de Ejecución del Código Objeto………………………………………...10

2.4.

Tipos de Arquitecturas Físicas…………………….………………………….....13

III.

Conclusiones…………………………………………………………………..….16

IV.

Bibliografía…………………………………………………………………………17

I. INTRODUCCION

Los compiladores son programas muy importantes para el desarrollo de nuevas aplicaciones cada día, pues gracias a ellos los lenguajes de programación de alto nivel con los cuales se desarrollan las muchas aplicaciones que nosotros utilizamos, son posibles de lograr, y entendidos por el hardware, es decir por la parte física.

En este informe tratamos específicamente del Código Final, el cual es la salida del compilador, luego de que el código fuente haya pasado por todos los subprogramas de compilación como son el Análisis Léxico, Análisis Sintético, Análisis Semántico, La Generación de Código Intermedio, la Optimización del Código Intermedio que finalmente nos da el código final, código que ejecuta el programa bien directamente, o bien pasándolo a código ensamblador. También se abordará sobre las estructuras físicas que ejecutan las instrucciones del código objeto, para poder comprender un poco más sobre la interacción del compilador con la máquina.

El conocimiento del funcionamiento de un compilador,y el conocimiento de un lenguaje objeto o final ayuda a cualquier profesional en el ámbito de programación a ampliar sus horizontes y a conocer más pues logra entender el sentido y la forma de ejecución del lenguaje de programación con el que trabaja

II.

CODIGO FINAL

2.1. GENERACION DEL CODIGO FINAL O CODIGO OBJETO: La fase de generación de código final tiene por objeto traducir la secuencia de instrucciones de código intermedio en una colección de instrucciones ejecutables y direccionables, aunque también puede ser generado directamente del análisis semántico, con lo cual la generación de código intermedio y la optimización de código no se realizan. Esta generación de código se da para una arquitectura física específica. Las condiciones arquitectónicas del entorno de ejecución van acondicionar considerablemente este proceso de compilación. Esta fase recibe a la entrada un programa en un lenguaje intermedio (código de pila, de tres direcciones, estructurado como árbol, etc.) y emite código de máquina para una máquina objetivo (código objeto). La generación de código máquina con el correspondiente optimizador forma el back end del compilador. Debe escribirse un back end para cada máquina para la que deseamos generar código. Usualmente, el código de entrada ya ha sufrido una primera fase de optimización que permite eliminar cierta redundancia del código, aprovechar mejor el espacio (eliminando las variables temporales que no se necesitan), entre otras mejoras posibles. En esta fase el código generado es llamado código objeto. Ejemplo:

a:=b+c LOAD B ADD C STORE A

Proceso de Traducción de Código Intermedio a Código Máquina: El proceso de traducción directo es relativamente sencillo. Cada instrucción del código intermedio puede traducirse por una secuencia de instrucciones de máquina. Así las instrucciones:

r1:= &FP[-3] r2:= &FP[-2] r1:= r1+r2 &FP[-1]:= r1

Existen lenguajes pseudointerpretados que utilizan código intermedio como el lenguaje java que tiene por ejemplo la extensión .class. Utilizando los bytecodes que son interpretados por una maquina virtual (en este caso JavaVirtualMachine). Ahora estudiaremos más a fondo el código final o código objeto:

2.1. CODIGO FINAL O CODIGO OBJETO: El código objeto generado por un compilador puede ser de 3 distintas maneras. 2.1.1.- Lenguaje Máquina o Código Ensamblador.- Crea instrucciones simbólicas para ser ejecutadas por medio del ensamblador para ejecutar las instrucciones del programa, pues este es el lenguaje que la máquina reconoce, tiene la extensión .ASM. 2.1.2.- Lenguaje de Máquina Relocalizable.- Permite compilar por separado los subprogramas del programa, siendo un sistema flexible, el cual es el más común en la mayoría de compiladores comerciales, funciona separando el programa en módulos objetos que se pueden enlazar y cargar para su ejecución en el momento que son invocados mediante un cargador enlazador. Tiene la extensión .OBJ 2.1.3.- Lenguaje de Máquina Absoluto.- Se coloca en una posición fija de la memoria y se ejecuta inmediatamente, el cual es muy eficiente pero no es flexible. Tiene la extensión .EXE

Ventajas del Lenguaje Ensamblador: Simplifica la generación de código debido al uso de instrucciones simbólicas y nombres simbólicos. Capa de abstracción lógica. Las arquitecturas pueden ser descritas por un lenguaje ensamblador, Podemos modificar la implementación. Desventajas Proceso adicional de ensamblaje y linking Linker.- Ver todos los archivos objetopara encontrar símbolos no resueltos, ejecutar los símbolos y encontrar las partes necesarias en las librerías disponibles en una sola imagen de memoria, resolver todos los nombres simbólicos a las direcciones correctas de memoria y salidas adecuadas.

Ejemplos de Código Final: Ejemplo programa que suma 4 números enteros en lenguaje ensamblador

Ejemplo traducción de if/then/else a ensamblador

Ejemplo traductor de un bucle while a ensamblador

Ejemplo traducción de un switch a ensamblador

Ejemplo traductor de un bucle for a ensamblador

2.2. PARTES DE EJECUCION DEL CODIGO OBJETO: 2.2.1.- Administración de Memoria. Esto se refiere a seleccionar la correspondencia entre los nombres del programa y las direcciones de objetos de datos en la memoria, en esta fase las entradas de la tabla de símbolos se van creando conforme se examina las declaraciones de un procedimiento o método, el tipo de una declaración determina la cantidad de memoria que necesaria para el nombre declarado. Modos de Direccionamiento: 2.2.1.1.- Direccionamiento Inmediato.- El direccionamiento inmediato es aquel en el que el operando forma parte la propia instrucción de código ejecutable. Se expresa ante poniendo # al valor del operando. Ejemplo: ADD R1 #3 2.2.1.2.- Direccionamiento Directo al Registro.- El direccionamiento directo al registro permite direccionar un valor que está almacenado en uno de los registros del entorno de ejecución del objetivo. Ejemplo: ADD R1 3 2.2.1.3.- Direccionamiento Directo a la Memoria.- El direccionamiento inmediato a la memoria opera con un valor almacenado en una dirección absoluta de memoria. Se utiliza / para representarlo. Ejemplo: ADD R1 /1000 2.2.1.4.- Direccionamiento Indirecto.- El direccionamiento indirecto opera con el valor almacenado en la dirección de memoria apuntada en el registro dado. Se pone entre [] el nombre del registro. Ejemplo:

ADD R1 [R3] 2.2.1.5.- Direccionamiento Relativo al Registro.- El direccionamiento relativo al registro permite expresar una dirección de desplazamiento sobre la base del valor de memoria en un registro. Ejemplo: ADD R1 #3[SP] 2.2.1.6.- Direccionamiento Relativo al Contador del Programa.- Utilizado en las instrucciones de salto, este direccionamiento expresa un direccionamiento relativo al registro contador del programa. Se usa $ y se omite el registro. Ejemplo: BR $3 2..2.2.- Selección de Instrucciones. Todas las instrucciones deben ser uniformes y completas, es un factor importante para la velocidad de la ejecución de las instrucciones; la eficiencia del programa objeto se debe a la selección correcta de instrucciones a realizar. En particular, muchos lenguajes de máquina tienen instrucciones especializadas que permiten ahorrar espacio, accesos a memoria y/o una ejecución más eficiente. 2.2.3.- Asignación de Registros. Según las instrucciones que envía el compilador, existen algunas que operan en el registro, las cuales son más rápidas que las que operan en la memoria, para lo cual se debe hacer un uso adecuado de los registros. La asignación de registros se realiza en 2 subprogramas: En el primer subprograma, se selecciona el conjunto de variables que residirá en los registros en un momento del programa En el subprograma siguiente, se escoge el registro específico en el que residirá una variable

2.2.4.- Elección del Orden de Evaluación. En esta parte se elige el orden en el cual se realizarán los cálculos a ejecutar, dependiendo del orden que los ejecute variará la eficiencia del código objeto, pues algunos ordenamientos de cálculos necesitan menos registros que otros para guardar resultados intermedios y finales.

2.3. TIPOS DE ARQUITECTURAS FISICAS: El tipo de arquitectura del entorno de ejecución para el cual se está generando el código final condiciona directamente la anatomía del mismo. En efecto, los recursos de la máquina suelen condicionarla estructura y prestaciones del juego de instrucciones con lo que la traducción puede ser muy diferente de una máquina a otra. 2.3.1.- Máquinas a Pila.- Las máquinas a pila disponen de una pila de operandos donde realizan todas las operaciones propias de la unidad aritméticológica. Para operar una operación aritmética, por ejemplo, primero se meten los operandos en la pila uno o dos según sea unaria o binaria la operación–y después se aplica el operador que extrae de la pila el número de operandos que requiere e inserta el resultado en la cima.

2.3.2.- Máquinas con registro acumulador.- Las máquinas con registro acumulador disponen, a parte de otros recursos, de un registro especial llamado registro acumulador contra el que se realizan todas las operaciones de la unidad aritmético lógica. Cuando se desea hacer una operación binaria uno de los datos aparece como operando de la operación mientras que el otro se carga en el acumulador y funciona como operando implícito.

2.3.3.- Máquinas con Código de Terceros.- En las máquinas con código de terceros las operaciones de las instrucciones disponen a lo sumo de dos operandos sobre los cuales realizar la operación. Frecuentemente el primero de ellos se utiliza como argumento de entrada y salida donde se almacena el resultado final. Si no se quieren perder los resultados de los operandos hay que guardar previamente los datos.

2.3.4.- Máquinas con Código de Cuartetos.- Es poco frecuente encontrar máquinas con instrucciones basados en cuartetos. No obstante es necesario estudiarlas. En las máquinas de cuartetos las cuadruplas de código intermedio tienen una traducción directa a las instrucciones de la arquitectura final. Esto simplifica considerablemente el proceso.

III.

CONCLUCIONES:

 La generación del código final o generación del código objeto es el proceso final de la compilación, esta consiste en llevar el código intermedio a código maquina.

 La generación de código final es un proceso sencillo de traducción de un código intermedio a un código máquina final, el cual realiza la traducción de instrucciones por bloques de código.  El lenguaje Máquina obtenido dependerá de la máquina con que se trabaje, pueda ser de ejemplo Intel, Motorola, etc.Por ende el compilador está orientado a tener su salida de acuerdo a la máquina en que trabaje.  Los lenguajes interpretados como java, envían su código intermedio a una maquina independiente que ejecutará el programa, en caso de java la JavaVirtualMachine. Eso quiere decir que no trabaja con la máquina física, con la ventaja de la portabilidad.

IV. BIBLIOGRAFIA: -Construcción de Compiladores: Principios y Práctica Kenneth C. Louden International thomsom Editores, 2004 ISBN 970-686-900-4 -Compiladores: Principios, técnicas y herramientas. Aho, Lam, Sethi, ullman, Adison-Segunda Edición mexico 2008 -Diseño de compiladores. A. Garrido, J. Iñesta, F. Moreno y J. Pérez. 2002. Edita Universidad de Alicante. -Cuadernos Didácticos – Conceptos básicos de Procesadores de lenguajeCuaderno N° 10 Juan Manuel Cueva LovelleArea de Lenguajes y sistemas de información

Universidad de Oviedo Diciembre de 1998

-Procesadores de lenguajes

Francisco José Ribadas pena 22 de mayo de 2009

Related Documents

Codigo Final
February 2021 0
Codigo Ascii
March 2021 0
Codigo Pbip
March 2021 0
Codigo Civil - Tomo 3
January 2021 0
Codigo Civil - Tomo 4
January 2021 0
Codigo Civil Tomo 7
January 2021 0

More Documents from "COM"