Generacion de Codigo Objeto
-
Upload
edgar-mendez-alanis -
Category
Documents
-
view
217 -
download
3
Transcript of Generacion de Codigo Objeto
-
7/24/2019 Generacion de Codigo Objeto
1/7
UNIDAD 4 GENERACIN DE CDIGO OBJETO
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".
oy en d!a es un oicio minucioso de artesan!a... ser!a como el carpintero de lpiz en
oreja que va al bosque, tala el rbol, lo lleva al taller, lo pule, lima, da orma y saca el
mueble.
En este documento vamos a conocer algunos conceptos bsicos del lenguaje
ensamblador creo que es esencial para cualquier inormtico.
#.$.$ %egistros.
&na 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 ase 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*
$+ urante la asignacin de registros, se selecciona el conjunto de variables y-o
constantes que residirn en los registros en un momento del programa.
+ urante una ase posterior a la anterior, se escoge el registro espec!ico en el que
residir una variable.
#.$. Lenguaje Ensamblador.
El lenguaje )ssembly es un tipo de lenguaje de bajo nivel utilizado para escribir
programas inormticos, y constituye la representacin ms directa del cdigo
mquina espec!ico para cada arquitectura de computadoras legible por un
-
7/24/2019 Generacion de Codigo Objeto
2/7
programador. /ue usado ampliamente en el pasado para el desarrollo de sot0are,
pero actualmente slo se utiliza en contadas ocasiones, especialmente cuando se
requiere la manipulacin directa del hard0are o se pretenden rendimientos inusuales
de los equipos.
&n 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 reerencias simblicas es una caracter!stica bsica de los
ensambladores, evitando tediosos clculos y direccionamiento manual despu1s de
cada modiicacin del programa. La mayor!a de los ensambladores tambi1n incluyen
acilidades para crear macros, a in de generar series de instrucciones cortas que se
ejecutan en tiempo real, en lugar de utilizar subrutinas. Los ensambladores son por lo
general ms ciles de programar que los compiladores de lenguajes de alto nivel, y
han estado disponibles desde la d1cada de $234. Los ensambladores modernos,
especialmente para arquitecturas basadas en %56', como por ejemplo 75(6,
6()%' y ()8%56' optimizan las instrucciones para e9plotar al m9imo la eiciencia
de segmentacin del '(&.
Los ensambladores de alto nivel orecen posibilidades de abstraccin que incluyen*
'ontrol avanzado de estructuras. (rocedimientos de alto nivel, declaracin de
unciones. :ipos de datos que incluyen estructuras, registros, uniones, clases y
conjuntos. 6oisticado procesamiento de macros. Lenguaje ;editar que se e9panden en un cdigo
de mquina ms e9tenso a in de proveer la uncionalidad necesaria. (or ejemplo,
para un cdigo mquina condicional como =si ? mayor o igual que>, un ensamblador
puede utilizar una pseudo8instruccin al grupo =haga si menor que>, y =si @ 4A sobre el
2
-
7/24/2019 Generacion de Codigo Objeto
3/7
resultado de la condicin anterior. Los ensambladores ms completos tambi1n
proveen un rico lenguaje de macros que se utiliza para generar cdigo ms complejo
y secuencias de datos.
'ada arquitectura de computadoras tiene su propio lenguaje de mquina, y en
consecuencia su propio lenguaje )ssembly. Los ordenadores diieren en el tipo y
nBmero de operaciones que soportanC tambi1n pueden tener dierente cantidad de
registros, y distinta representacin de los tipos de datos en memoria. )unque la
mayor!a de las computadoras son capaces de cumplir esencialmente las mismas
unciones, la orma en que lo hacen diiere, y los respectivos lenguajes )ssembly
relejan tal dierencia.
(ueden e9istir mBltiples conjuntos de mnemnicos o sinta9is de )ssembly para un
mismo conjunto de instrucciones, instanciados t!picamente en dierentes programas
ensamblador. En estos casos, la alternativa ms popular es la provista por los
abricantes, y usada en los manuales del programa.
Las operaciones disponibles en la mayor!a de los conjuntos de instrucciones incluye*
mover llenar un registro con un valor constante mover datos de una posicin de
memoria a un registro o viceversa escribir y leer datos de dispositivos computar
sumar, restar, multiplicar o dividir los valores de dos registros, colocando el resultado
en uno de ellos o en otro registro realizar operaciones binarias, incluyendo
operaciones lgicas D)-F%-?F%-F:+ comparar valores entre registros Dmayor,
menor, igual+ aectar el lujo del programa saltar a otra posicin en el programa y
ejecutar instrucciones all! saltar si se cumplen ciertas condiciones D5/+ saltar a otra
posicin, pero guardar el punto de salida para retornar D')LL, llamada a subrutinas+
)lgunas computadoras incluyen instrucciones complejas dentro de sus capacidades.
&na sola instruccin compleja hace lo mismo que en otras computadoras puede
requerir una larga serie de instrucciones, por ejemplo* guardar varios registros en la
pila de una sola vez mover grandes bloques de memoria operaciones aritm1ticas
complejas o de punto lotante Dseno, coseno, ra!z cuadrada + El nivel de lenguaje
)ssembly tiene aspectos importantes de los niveles de micro arquitectura, en los
cuales se encuentra D56) y sistema operativo+ estos dos se utilizan para la traduccin
en lugar de la interpretacin. )lgunas caracter!sticas del lenguaje se describen a
3
-
7/24/2019 Generacion de Codigo Objeto
4/7
continuacin Los programas que sirven para traducir algBn programa para el usuario
se llama traductores, el lenguaje en que est escrito el programa original se llama
lenguaje uente, el lenguaje original que sea modiicado se llama lenguaje objeto.
6e usa la traduccin cuando se cuenta con un procesador Dya sea hard0are o un
int1rprete+ para el lenguaje objeto pero no para el lenguaje uente, 6i la traduccin se
realiza correctamente, la ejecucin del programa traducido dar e9actamente los
mismos resultados que habr!a dado la ejecucin del programa uente. ay dos
dierencias entre traduccin e interpretacin, en la traduccin no se ejecuta
directamente el programa original, en el lenguaje uente se convierte en un programa
equivalente llamado programa objeto o programa binario ejecutable y este unciona
solo cuando se ha acabado la traduccin.
4.1.2.1Ejemplo
&n procesador 9GH puede ejecutar la siguiente instruccin binaria como se e9presa
en cdigo maquina*
Iinario* $4$$4444 4$$4444$ De9adecimal* 49b4H$+ La representacin equivalente
en )ssembly es ms cil de recordar* mov al, 4H$h
Esta instruccin signiica*
7ueva el valor he9adecimal H$ D2J decimal+ al registro =al>. El mnemnico =mov> es
un cdigo de operacin u =opcode>, elegido por los diseadores de la coleccin de
instrucciones para abreviar =mov> Dmover+.8 El opcode es seguido por una lista de
argumentos o parmetros, completando una instruccin de ensamblador t!pica.
#.$.K Lenguaje 7quina.
&n lenguaje de programacin de bajo nivel es el que proporciona poca o ninguna
abstraccin del microprocesador de un ordenador. 'onsecuentemente es cilmente
trasladado a lenguaje de mquina. La palabra =bajo> no implica que el lenguaje sea
inerior a un lenguaje de alto nivelC se reiere a la reducida abstraccin entre el
lenguaje y el hard0are.
4
-
7/24/2019 Generacion de Codigo Objeto
5/7
&so* ventajas e inconvenientes. En general se utiliza este tipo de lenguaje para
programar controladores Ddrivers+. La programacin en un lenguaje de bajo nivel
como el lenguaje de la mquina o el lenguaje simblico tiene ciertas ventajas*
7ayor adaptacin al equipo.
(osibilidad de obtener la m9ima velocidad con m!nimo uso de memoria.
(ero tambi1n tiene importantes inconvenientes*
5mposibilidad de escribir cdigo independiente de la mquina.
7ayor diicultad 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.
4.1.3.1Primera generacin
El lenguaje de programacin de primera generacin Dpor sus siglas en ingl1s, $L+,
es el lenguaje de cdigo mquina. Es el Bnico lenguaje que un microprocesador
entiende de orma nativa. El lenguaje mquina no puede ser escrito o le!do usando
un editor de te9to, y por lo tanto es raro que una persona lo use directamente.
4.1.3.2Segunda generacin
El lenguaje de programacin de segunda generacin Dpor sus siglas en ingl1s, L+,
es el lenguaje ensamblador. 6e considera de segunda generacin porque, aunque no
es lenguaje nativo del microprocesador, un programador de lenguaje ensamblador
debe conocer la arquitectura del microprocesador Dcomo por ejemplo las
particularidades de sus registros o su conjunto de instrucciones+.
4.1.3.3Direccionamiento Lenguaje Maquina
Es la orma en cmo se accede a la memoria. %ecordar que un programa no puede
ejecutarse sino se encuentra en memoria principal. La orma de acceder a la
memoria depende del microprocesador, pero en general e9isten dos tipos de
direccionamiento* directo e indirecto.
El direccionamiento directo tambi1n recibe el nombre de direccionamiento absoluto y
el acceso a las direcciones se hace de manera directa. El direccionamiento indirecto
5
-
7/24/2019 Generacion de Codigo Objeto
6/7
tambi1n recibe el nombre de direccionamiento relativo y se basa a partir de una
direccin gen1rica, generalmente el inicio del programa.
(ara acceder a una direccin relativa se suma a la direccin base el nBmero de
espacios de memorias necesarias. El direccionamiento relativo hace a los programas
localizables e independientes. 6i la direccin base es el inicio de la memoria ija el
direccionamiento pasa a ser un variante de direccionamiento absoluto.
4.1.3.4Ejemplos.
Lenguaje de mquina del 5ntel G4GG. El cdigo de mquina en he9adecimalse resalta
en rojo, el equivalente en lenguaje ensambladoren magenta, y las direcciones de
memoria donde se encuentra el cdigo, en azul. )bajo se ve un te9to en he9adecimal
y)6'55.
:odas las instrucciones preparadas en cualquier lenguaje de mquina tienen por lo
menos dos partes. La primera es el comando u operacin, que dice a la computadora
cul es la uncin que va a realizar.
6
http://es.wikipedia.org/wiki/Intel_8086_y_8088http://es.wikipedia.org/wiki/Sistema_hexadecimalhttp://es.wikipedia.org/wiki/Lenguaje_ensambladorhttp://es.wikipedia.org/wiki/ASCIIhttp://es.wikipedia.org/wiki/Sistema_hexadecimalhttp://es.wikipedia.org/wiki/Lenguaje_ensambladorhttp://es.wikipedia.org/wiki/ASCIIhttp://es.wikipedia.org/wiki/Intel_8086_y_8088 -
7/24/2019 Generacion de Codigo Objeto
7/7
#.$.# )dministracin de memoria.
La administracin de la memoria es un proceso hoy en d!a 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 mayor!a 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 los punteros y tienen un programa
denominado recolector de basura que se encarga de limpiar la memoria no utilizada
mejorando el desempeo
7