Generacion de Codigo Objeto

download Generacion de Codigo Objeto

of 7

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