Sie sind auf Seite 1von 14

Ao de la Consolidacin del Mar de Grau

Universidad Nacional Santiago Antnez de Mayolo


UNASAM
FACULTAD DE CIENCIAS

Escuela Profesional de Ingeniera de Sistemas e Informtica


Ao y Semestre Acadmico

2016 - I

Curso

Teora de Lenguajes

Tema

Generacin de Cdigo Objeto

Docente

Ing. Miguel Silva Zapata

Integrantes:

ALVA FLORES Roosbelth


CIRIACO SALYROSAS Harol
GARCIA LOYOLA Ibette
NEZ SOTO Joahan
MORALES HUAMAN Adolfo

Huaraz Per
2016

INDICE

INTRODUCCIN.............................................................................................. 2
1.

2.

DEFINICIONES.......................................................................................... 3
1.1.

Cdigo Objeto...................................................................................... 3

1.2.

Tipos de cdigo objeto...........................................................................3

1.3.

Generador de cdigo objeto...................................................................4

COMPONENTES........................................................................................ 4
2.1.

Lenguaje Mquina................................................................................ 4

2.2.

Lenguaje Ensamblador..........................................................................5

2.3.

Registros............................................................................................. 7

2.4.

Administracin de memoria....................................................................9

3.

FUNCIONES DE LA GENERACIN DE CDIGO FINAL...............................10

4.

TCNICAS............................................................................................... 10

5.

EJEMPLOS............................................................................................. 11

6.

5.1.

Asignacin......................................................................................... 11

5.2.

Condicionales..................................................................................... 11

5.3.

Arrays............................................................................................... 11

5.4.

Ejemplo de proposiciones de 3 direcciones:............................................11

CONCLUSIONES..................................................................................... 13

INTRODUCCIN

Los lenguajes de programacin de bajo nivel son muy apegados a la mquina,


algunas empresas de antivirus y videojuegos, siguen programando pequeas
rutinas en ensamblador por su rapidez y a pegamiento al computador. Esto es
debido, a que un programa en ensamblador, es ejecutado casi directamente
por el computador, ya que hablan casi "el mismo idioma". Hoy en da es un
oficio minucioso de artesana... sera como el carpintero de lpiz en oreja que
va al bosque, tala el rbol, lo lleva al taller, lo pule, lima, da forma y saca el
mueble.
Generacin de cdigo puede ser considerado como la fase final de la
compilacin. Mediante la generacin de cdigo, proceso de optimizacin se
puede aplicar en el cdigo, pero que puede ser visto como parte de generacin
de cdigo propia fase. El cdigo generado por el compilador es un cdigo de
objeto de algunos de menor nivel lenguaje de programacin, por ejemplo,
lenguaje ensamblador. Hemos visto que el cdigo fuente escrito en un lenguaje
de mayor nivel se transforma en un menor nivel de idioma que resulta en un
menor nivel de cdigo objeto, que debe tener las siguientes propiedades
mnimas:

Debe llevar el significado exacto del cdigo fuente.

Debe ser eficiente en trminos de uso de la CPU y la administracin de


la memoria.

Programa
Cdigo
Cdigo
Fuente Etapa Intermedio OptimizacinIntermedio
De cdigo
Inicial
Intermedio

Tabla de smbolos

1. DEFINICIONES
1.1.

Cdigo Objeto

Generador
De cdigo
Objeto

Programa
Fuente

En programacin, se llama cdigo objeto al cdigo que resulta de la


compilacin
del
cdigo
fuente.
Consiste
en lenguaje
mquina o bytecode y se distribuye en varios archivos que corresponden
a cada cdigo fuente compilado. Para obtener un programa
ejecutable se han de enlazar todos los archivos de cdigo objeto con un
programa llamado enlazador (linker).

1.2.

Tipos de cdigo objeto


Lenguaje de ensamblador. Al utilizar instrucciones simblicas,
simplifica el proceso de generacin de cdigo.
Se necesita utilizar un ensamblador para obtener el cdigo mquina.
Lenguaje mquina absoluto. Este cdigo es directamente ejecutable,
ya que utiliza direcciones de memoria absolutas (fijas).
Es un cdigo eficiente, pero poco flexible
Muy utilizado por los compiladores antiguos, menos usado
actualmente.
Lenguaje mquina relocalizable. Est constituido por mdulos objeto.
El cdigo se genera con desplazamientos de direcciones, lo cual permite
enlazar diferentes mdulos objeto (ej., bibliotecas).
Muy flexible, permite compilar rutinas por separado y llamar a rutinas
ya compiladas en otros mdulos.
Mtodo ms utilizado en compiladores comerciales
Es necesario un enlazador para crear el ejecutable.

1.3.

Generador de cdigo objeto


El generador de cdigo objeto puede considerarse como la penltima
fase de un compilador, la cual se encarga de tomar como entrada el
cdigo intermedio generado por el front-end, y producir cdigo objeto de

la arquitectura target para luego entrar en la fase de optimizacin de


cdigo.
Para el generador de cdigo objeto, se puede asumir que el front-end ha
hecho los anlisis lxico y sintctico, y ha traducido a una representacin
intermedia suficientemente detallada (LLVM?), en la que los valores de
los nombres que aparecen en cdigo intermedio pueden ser
representados por cantidades que la mquina objeto puede manejar
directamente. Adems, se supone que se hecho el chequeo de tipos
necesario y se han detectado los errores semnticos. Por lo tanto, la
fase de generacin de cdigo trabaja bajo el supuesto que su entrada no
contiene errores.
La salida del generador de cdigo consiste en el programa objeto. Existe
un variedad de formas para el cdigo objeto: lenguaje de mquina
absoluto (imagen de memoria), lenguaje de mquina relocalizable (.OBJ
en Intel Relocatable Format, ELF, etc.), lenguaje ensamblador o incluso
otro lenguaje de programacin.
2. COMPONENTES
2.1.

Lenguaje Mquina
Es el que proporciona poca o ninguna abstraccin del microprocesador
de un ordenador. El lenguaje mquina solo es entendible por las
computadoras. Se basa en una lgica binaria de 0 y 1, generalmente
implementada por mecanismos elctricos. En general el lenguaje
maquina es difcil de entender para los humanos por este motivo
hacemos uso de lenguajes ms parecidos a los lenguajes naturales.

2.1.1. Caractersticas
El lenguaje mquina realiza un conjunto
predeterminadas llamadas micro operaciones.

de

operaciones

Las micro operaciones slo realizan operaciones del tipo aritmtica (+, -,
*, /), lgicas (AND,OR,NOT) y de control (secuencial, de control y
repetitiva).
El lenguaje maquina es dependiente del tipo de arquitectura. As un
programa mquina para una arquitectura Intel x86 no s ejecutara en
una arquitectura Power PC de IBM (al menos de manera nativa).
Algunos microprocesadores implementan mas funcionalidades llamado
CISC, pero son ms lentos que los RISC ya que estos tienen registros
ms grandes.
Ventajas

Mayor adaptacin al equipo.


Mxima velocidad con mnimo uso de memoria.

Desventajas

Imposibilidad de escribir cdigo independiente de la mquina.


Mayor dificultad en la programacin y en la comprensin de los
programas.
El programador debe conocer ms de un centenar de
instrucciones.
Es necesario conocer en detalle la arquitectura de la mquina.

2.1.2. Direccionamiento
Es la forma en cmo se accede a la memoria. Recordar que un
programa no puede ejecutarse sino se encuentra en memoria principal.
La forma de acceder a la memoria depende del microprocesador, pero
en general existen dos tipos de direccionamiento: directo e indirecto.
El direccionamiento directo tambin recibe el nombre de
direccionamiento absoluto y el acceso a las direcciones se hace de
manera directa.
El direccionamiento indirecto tambin recibe el nombre de
direccionamiento relativo y se basa a partir de una direccin genrica,
generalmente el inicio del programa.
Para acceder a una direccin relativa se suma a la direccin base el
nmero de espacios de memorias necesarias.
El direccionamiento relativo hace a los programas relocalizables e
independientes.
Si la direccin base es el inicio de la memoria fija el direccionamiento
pasa a ser un variante de direccionamiento absoluto.

2.2.

Lenguaje Ensamblador
El ensamblador (del ingls assembler) es un traductor de un cdigo de
bajo nivel a un cdigo, ejecutable directamente por la mquina para la
que se ha generado.

El lenguaje assembly es un tipo de lenguaje de bajo nivel utilizado para


escribir programas informticos, y constituye la representacin ms
directa del cdigo mquina especfico para cada arquitectura de
computadoras legible por un programador. Fue usado ampliamente en el
pasado para el desarrollo de software, pero actualmente slo se utiliza
en contadas ocasiones, especialmente cuando se requiere la
manipulacin directa del hardware o se pretenden rendimientos
inusuales de los equipos.
Un ensamblador crea cdigo objeto traduciendo instrucciones
mnemnicas a cdigos operativos, e interpretando los nombres
simblicos para direcciones de memoria y otras entidades. El uso de
referencias simblicas es una caracterstica bsica de los
ensambladores, evitando tediosos clculos y direccionamiento manual
despus de cada modificacin del programa.
2.2.1. Caractersticas

El programa lee un archivo escrito en lenguaje ensamblador y


sustituye cada uno de los cdigos mnemotcnicos por su
equivalente cdigo mquina.
Los programas se hacen fcilmente portables de mquina a
mquina y el clculo de bifurcaciones se hace de manera fcil.

2.2.2. Clasificacin
Ensambladores bsicos: Son de muy bajo nivel, y su tarea consiste
bsicamente, en ofrecer nombres simblicos a las distintas
instrucciones, parmetros y cosas tales como los modos de
direccionamiento.
Ensambladores modulares, o macro ensambladores: Descendientes
de los ensambladores bsicos, fueron muy populares en las dcadas
de los 50 y los 60, fueron antes de la generalizacin de los lenguajes
de alto nivel. Un macroinstruccin es el equivalente a una funcin en
un lenguaje de alto nivel.

2.2.3. Almacenamiento
Una de las principales ventajas del uso del ensamblador, es que se
encarga de administrar de manera transparente para el usuario la
creacin de memoria, las bifurcaciones y el paso de parmetros.
Adems, nos permite acceder directamente a los recursos de la mquina
para un mejor desempeo.

2.3.

Registros
Una de las consideraciones a tener para el generador de cdigo consiste
en la asignacin de registros. Los registros son los elementos ms
valiosos y escasos en la fase de generacin de cdigo, puesto que el $
%# solamente puede procesar datos que se encuentren en registros.
&dems, las instrucciones que implican operandos en registros son ms
cortas y rpidas que las de operandos en memoria.
El uso de registros se divide generalmente en dos problemas:

Durante la asignacin de registros, se selecciona el conjunto de


variables y constantes que residirn en los registros en un
momento del programa.
Durante una fase posterior a la anterior, se escoge el registro
especfico en el que residir una variable.

2.3.1. Distribucin
La distribucin es el proceso en el que el programa generado puede
ejecutarse en otras mquinas. Con respecto al ensamblador, la mayora
del direccionamiento se hace relativo para que el programa sea
relocalizable por un programa llamado cargador. En el caso de
programas compilados se necesitan de las libreras, si son estticas se
incluyen en el ejecutable por lo que el programa se hace grfico, si son
dinmicas no pero el programa es ms pequeo. Debido a la
complejidad del software actual se necesitan de asistentes para poder
instalar y ejecutar un programa.
2.3.2. Asignacin
La arquitectura de los procesadores x86 obliga al uso de segmentos de
memoria para manejar la informacin, el tamao de estos segmentos es
de 64kb. La razn de ser de estos segmentos es que, considerando que
el tamao mximo de un nmero que puede manejar el procesador est
dado por una palabra de 16 bits o registro, no sera posible accesar a
ms de 65536 localidades de memoria utilizando uno solo de estos
registros, ahora, si se divide la memoria de la pc en grupos o
segmentos, cada uno de 65536 localidades, y utilizamos una direccin
en un registro exclusivo para localizar cada segmento, y entonces cada
direccin de una casilla especfica la formamos con dos registros, nos es
posible acceder a una cantidad de 4294967296 bytes de memoria, lo
cual es, en la actualidad, ms memoria de la que veremos instalada en
una PC. Para que el ensamblador pueda manejar los datos es necesario
que cada dato o instruccin se encuentren localizados en el rea que

corresponde a sus respectivos segmentos. El ensamblador accede a


esta informacin tomando en cuenta la localizacin del segmento, dada
por los registros DS, ES, SS y CS, y dentro de dicho registro la direccin
del dato especfico.
2.3.3. Clasificacin
Registros de datos:
AX: Registro acumulador. Es el
operaciones aritmticas.

principal

empleado

en

las

BX: Registro base. Se usa para indicar un desplazamiento.


CX: Registro contador. Se usa como contador en los bucles.
DX: Registro de datos. Tambin se usa en las operaciones aritmticas.
Estos registros son de uso general y tambin pueden ser utilizados como
registros de 8 bits, para utilizarlos como tales es necesario referirse a
ellos como, por ejemplo: AH y AL, que son los bytes alto (high) y bajo
(low) del registro AX. Esta nomenclatura es aplicable tambin a los
registros BX, CX y DX.
Registros de segmentos:
CS: Registro de segmento de cdigo. Contiene la direccin de las
instrucciones del programa.
DS: Registro segmento de datos. Contiene la direccin del rea de
memoria donde se encuentran los datos del programa.
SS: Registro segmento de pila. Contiene la direccin del segmento de
pila. La pila es un espacio de memoria temporal que se usa para
almacenar valores de 16 bits (palabras).
ES: Registro segmento extra. Contiene la direccin del segmento extra.
Se trata de un segmento de datos adicional que se utiliza para superar
la limitacin de los 64Kb del segmento de datos y para hacer
transferencias de datos entre segmentos.
Registros punteros de pila
SP: Puntero de la pila. Contiene la direccin relativa al segmento de la
pila.
BP: Puntero base. Se utiliza para fijar el puntero de pila y as poder
acceder a los elementos de la pila.
Registros ndices:
SI: ndice fuente.

DI: ndice destino.


Puntero de instrucciones:
IP: Registro puntero de instruccin o contador de programa (PC).
Contiene el desplazamiento de la siguiente instruccin a ejecutar
respecto al segmento de cdigo en ejecucin. Por lo tanto, la direccin
completa de la siguiente instruccin sera CS: IP. La nica forma de
influir en este registro es de forma indirecta mediante instrucciones de
bifurcacin.
Registro de banderas (flags):
Cada bandera es un bit y se usa para registrar la informacin de estado
y de control de las operaciones del microprocesador.
Hay nueve banderas (los 7 bits restantes no se utilizan):
Banderas de estado: Registran el estado del procesador, normalmente
asociado a una comparacin o a una instruccin aritmtica.
CF: Bandera de acareo.
OF: Bandera de desbordamiento (aritmtico).
ZF: Bandera de resultado 0 o comparacin igual.
SF: Bandera de resultado o comparacin negativa.
PF: Bandera de paridad (nmero par de bits).
AF: Bandera auxiliar. Indica si hay necesidad de ajuste en las
operaciones aritmticas con nmeros BCD.
2.4.

Administracin de memoria
La administracin de la memoria es un proceso hoy en da muy
importante, de tal modo que su mal o buen uso tiene una accin directa
sobre el desempeo de memoria.
En general un ensamblador tiene un administrador de memoria ms
limitado que un compilador; en la mayora de los lenguajes de
programacin el uso de punteros no estaba vigilado por lo que se tienen
muchos problemas con el uso de memoria.
Los lenguajes ms recientes controlan el uso de punteros y tienen un
programa denominado recolector de basura que se encarga de limpiar la
memoria no utilizada mejorando el desempeo.

3. FUNCIONES DE LA GENERACIN DE CDIGO FINAL.

Se genera el cdigo objeto (generalmente cdigo de ensamblador o


cdigo de maquina) a partir del cdigo intermedio.
Se asigna espacio de memoria para cada nombre del programa fuente
(variables, tipos, constantes, etc.)
Se traduce cada una de las instrucciones en cdigo intermedio a una
secuencia de instrucciones en cdigo objeto que ejecuten la misma
tarea.
La generacin de cdigo objeto cumple la funcin generar el ejecutable.
Esta generacin expresa al cdigo objeto en binario y no permite a partir
de l conocer el cdigo fuente.

4. TCNICAS
Administracin de memoria: la correspondencia entre los nombres del
programa fuente con direcciones de objetos de datos en la memoria
durante la ejecucin la realiza la etapa inicial en cooperacin con el
generador de cdigo. Las entradas en la Tabla de Smbolos se van creando
conforme se examina las declaraciones de un procedimiento. El tipo en una
declaracin determina la cantidad de memoria necesaria para el nombre
declarado.
Seleccin de instrucciones: es importante que el conjunto de
instrucciones sea uniforme y completo. Las velocidades de las instrucciones
es un factor importante. Si no se tiene en cuenta la eficiencia del programa
objeto, la seleccin de instrucciones es sencilla. Para cada tipo de
proposicin de tres direcciones, se puede disear un esqueleto de cdigo.
Ejemplo: cdigo de tres direcciones de:
x := y + z
MOV y, R0 /* cargar y en el registro R0 */
ADD z, R0 /* suma z a R0 */
MOV R0, x /* almacenar R0 en x */
Asignacin de registros: Las instrucciones que implican operandos en
registros son generalmente ms rpidas que las de los operandos en
memoria. Por lo tanto, utilizar eficientemente los registros es fundamental
para generar un buen cdigo.
Eleccin del orden de evaluacin: el orden en que se realizan los
clculos puede variar la eficiencia del cdigo objeto. Algunos ordenamientos
de los clculos necesitan menos registros que otros para guardar
resultados intermedios.

5. EJEMPLOS
5.1.

Asignacin
Para las instrucciones de asignacin, A=B, el cdigo en cudruplas es
del tipo (assign, A, B, -) y el cdigo de ensamblador equivalente que hay
que generar es el siguiente:

Cdigo de alto nivel


a=b

5.2.

Condicionales
Cdigo de 3 direcciones
if_false tmp1 goto L1

L1:

5.3.

Cdigo objeto de ensamblador


LOAD Reg1, b
STR a, Reg1

Cdigo objeto de ensamblador


LOAD Reg1, tmp1
FJMP Reg1, L1

L1:

Arrays
Cdigo de 3 direcciones
x = A[i]

Cdigo objeto de ensamblador


LOAD Reg1, i
MULT Reg1, Reg1, 2 (*)
LOAD Reg2, A(Reg1)
STR x, Reg2
(*) A es un array cuyos elementos ocupan 2 bytes, p.e. enteros

5.4.

Ejemplo de proposiciones de 3 direcciones:


read x:
read x
if 0<x then

t1=0<x

fact=1:

if false t1 goto L1

repeat

fact=1

fact=fact*x:

label L2

x:=x-1:

t2=fact*x

until x=0:

fact=t2

write fact:

t3=x-1

end

x=t3
t4=x==0
if false t4 goto L2
write fact
label L1
halt

5.5.

Generacin de cdigos de Tercetos


Sentencias de control Sentencia IF-THEN-ELSE
Entrada

SALIDA

IF A>0 THEN

if A>0 goto etq 1

$1:=1:
ELSE
$2:=2:
FIN SI:

goto etq2
label etq1
$1=1
goto etq3
label etq2
$2=2
label etq3

6. CONCLUSIONES

La etapa inicial traduce un programa fuente a una representacin


intermedia a partir de la cual la etapa final genera el cdigo objeto,
ya sea en forma de cdigo mquina o ensamblador.

Lenguaje de la mquina que se utiliza en binario el que ms usamos


son los lenguajes naturales que son ms sencillos para su
comprensin este lenguaje de maquina tiene como caractersticas
que hace operaciones aritmticas lgicas y de control, tambin
depende de la arquitectura de la mquina para su realizacin.

Lenguaje ensamblador es un traductor de cdigos de bajo nivel est


directamente en la mquina para su uso.

Para obtener cdigo de buena calidad:


Evitar las cargas y descargas innecesarias desde/hacia
memoria
Utilizar eficientemente los registros del procesador

Las particularidades del hardware influyen en la calidad y


eficiencia del cdigo generado.

Das könnte Ihnen auch gefallen