Está en la página 1de 8

4 Generacin de cdigo objeto

4.1 Registros
Los registros del procesador se emplean para controlar instrucciones en ejecucin,
manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los
registros son espacios fsicos dentro del microprocesador con capacidad de 4 bits
hasta 64 bits dependiendo del microprocesador que se emplee. Los registros son
direccionables por medio de una vieta, que es una direccin de memoria. Los
bits, por conveniencia, se numeran de derecha a izquierda (15, 14, 13. 3, 2, 1,
0), los registros estn divididos en seis grupos los cuales tienen un fin especfico.
Los registros se dividen en:
Registros de segmento
Registros de apuntadores de instrucciones
Registros apuntadores
Registros de propsitos generales
Registro ndice
Registro de bandera.
Registros de uso general
AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).- Interviene en las
operaciones aritmticas y lgicas, despus de la operacin arroja un resultado.
BX = Registro base, dividido en BH y BL.- Se utiliza en transferencias de datos
entre la memoria y el procesador.
CX = Registro contador, dividido en CH y CL.- Se utiliza como contador en
bucles(LOOP), en operaciones con cadenas(REP), y en desplazamientos(CL).
DX = Registro de datos, dividido en DH y DL.- Se utiliza en operaciones de
multiplicacin y divisin junto con Ax y en operaciones de entrada y salida de
puertos, su mitad inferior DL contiene el nmero de puertos.
Registros de segmento
Un registro de segmento se utiliza para alinear en un limite de prrafo o dicho de
otra forma codifica la direccin de inicio de cada segmento y su direccin en un
registro de segmento supone cuatro bits 0 a su derecha.

Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria


para direccionamientos conocidos como el segmento actual. Los registros de
segmento son: CS (cdigo), DS (datos), SS (pila), ES , FS y GS.
Registro Apuntador de instrucciones.(IP)
El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento
de direccin de la siguiente instruccin que se ejecuta.
Registro ndice
Los registros SI y DI estn disponibles para direccionamientos indexados y para
sumas y restas. Que son las operaciones de punta.
Registro de bandera
Los registros de banderas sirven parar indicar el estado actual de la maquina y el
resultado del procesamiento, Cuando algunas instrucciones piden comparaciones
o clculos aritmticos cambian el estado de las banderas.

4.2 Lenguaje Ensamblador Caracteristicas


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.
Ensambladores 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. La mayora
de los ensambladores tambin incluyen facilidades para crear macros , a fin de
generar series de instrucciones cortas que se ejecutan en tiempo real, en lugar de
utilizar subrutinas[1] .
Los ensambladores son por lo general ms fciles de programar que los
compiladores de lenguajes de alto nivel, y han estado disponibles desde la dcada
de 1950. Los ensambladores modernos, especialmente para arquitecturas
basadas en RISC, como por ejemplo MIPS, SPARC y PA-RISC optimizan las
instrucciones para explotar al mximo la eficiencia de segmentacin del CPU.

Los ensambladores de alto nivel ofrecen posibilidades de abstraccin que


incluyen:
Control avanzado de estructuras. Procedimientos de alto nivel, declaracin de
funciones. Tipos de datos que incluyen estructuras, registros, uniones, clases y
conjuntos. Sofisticado procesamiento de macros.
Lenguaje Un programa escrito en lenguaje Assembly consiste en una serie de
instrucciones que corresponden al flujo de rdenes ejecutables que pueden ser
cargadas en la memoria de una computadora. Por ejemplo, un procesador x86
puede ejecutar la siguiente instruccin binaria como se expresa en cdigo
maquina:
Binario: 10110000 01100001 (Hexadecimal: 0xb061)
equivalente en Assembly es ms fcil de recordar:

La

representacin

mov al, 061h Esta instruccin significa:


Mueva el valor hexadecimal 61 (97 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 move (mover).- El opcode es seguido por una lista
de argumentos o parmetros, completando una instruccin de ensamblador tpica.
La transformacin del lenguaje Assembly en cdigo mquina la realiza un
programa ensamblador, y la traduccin inversa la puede efectuar un
desensamblador. A diferencia de los lenguajes de alto nivel, aqu hay usualmente
una correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el
lenguaje mquina. Sin embargo, en algunos casos, un ensamblador puede
proveer pseudo instrucciones que se expanden en un cdigo de mquina ms
extenso a fin de proveer la funcionalidad necesaria. Por ejemplo, para un cdigo
mquina condicional como si X mayor o igual que , un ensamblador puede
utilizar una pseudoinstruccin al grupo haga si menor que , y si = 0 sobre el
resultado de la condicin anterior. Los ensambladores ms completos tambin
proveen un rico lenguaje de macros que se utiliza para generar cdigo ms
complejo y secuencias de datos.
Cada arquitectura de computadoras tiene su propio lenguaje de mquina, y en
consecuencia su propio lenguaje Assembly. Los ordenadores difieren en el tipo y
nmero de operaciones que soportan; tambin pueden tener diferente cantidad de
registros, y distinta representacin de los tipos de datos en memoria. Aunque la
mayora de las computadoras son capaces de cumplir esencialmente las mismas
funciones, la forma en que lo hacen difiere, y los respectivos lenguajes Assembly
reflejan tal diferencia.
Pueden existir mltiples conjuntos de mnemnicos o sintxis de Assembly para un
mismo conjunto de instrucciones, instanciados tpicamente en diferentes

programas ensamblador. En estos casos, la alternativa ms popular es la provista


por los fabricantes, y usada en los manuales del programa.
Cdigo mquina (o lenguaje de mquina) El lenguaje de mquina est formado
por instrucciones sencillas, que -dependiendo de la estructura del
procesador- pueden especificar:
Registros especficos para operaciones aritmticas, direccionamiento o control de
funciones. Posiciones de memoria especficas (offset). Modos de direccionamiento
usados para interpretar operandos. Las operaciones ms complejas se realizan
combinando estas instrucciones sencillas, que pueden ser ejecutadas
secuencialmente o mediante instrucciones de control de flujo.
Las operaciones disponibles en la mayora 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 (AND/OR/XOR/NOT) comparar valores entre
registros (mayor, menor, igual) afectar el flujo del programa saltar a otra posicin
en el programa y ejecutar instrucciones all saltar si se cumplen ciertas
condiciones (IF) saltar a otra posicin, pero guardar el punto de salida para
retornar (CALL, llamada a subrutinas) Algunas computadoras incluyen
instrucciones complejas dentro de sus capacidades. Una sola instruccin compleja
hace lo mismo que en otras computadoras puede requerir una larga serie de
instrucciones, por ejemplo:
salvar varios registros en la pila de una sola vez mover grandes bloques de
memoria operaciones aritmticas complejas o de punto flotante (seno, coseno,
raz cuadrada ) El nivel de lenguaje Assembly tiene aspectos importantes de los
niveles de microarquitectura, en los cuales se encuentra (ISA y sistema operativo)
estos dos se utilizan para la traduccin en lugar de la interpretacin. Algunas
caractersticas del lenguaje se describen a continuacin Los programas que sirven
para traducir algn programa para el usuario se llama traductores, el lenguaje en
que esta escrito el programa original se llama lenguaje fuente, el lenguaje original
que sea modificado se llama lenguaje objeto.
Se usa la traduccin cuando se cuenta con un procesador (ya sea hardware o un
interprete) para el lenguaje objeto pero no para el lenguaje fuente, Si la traduccin
se realiza correctamente, la ejecucin del programa traducido dar exactamente
los mismos resultados que habra dado la ejecucin del programa fuente. Hay dos
diferencias entre traduccin e interpretacin, en la traduccin no se ejecuta
directamente el programa original, en el lenguaje fuente se convierte en un

programa equivalente llamado programa objeto o programa binario ejecutable y


este funciona solo cuando se ha acabado la traduccin.
El cdigo mquina, un simple patrn de bits, es hecho legible reemplazando
valores crudos por smbolos denominados mnemnicos. Se invent para facilitar la
tarea de los primeros programadores que hasta ese momento tenan que escribir
directamente en cdigo binario. antes an era peor, ya que el cdigo de ceros y
unos (el programa) deba introducirse en una tarjeta perforada. La posicin
ocupada por cada punto equivala a un 1 o a un 0 segn hubiera un hueco o
no. Lo cual supona una forma casi idntica en la que hoy se escriben los datos
binaros en soportes tales como los CDs y DVDs.
Mientras que una computadora reconoce la instruccin de mquina IA-32
10110000 01100001
para los programadores de microprocesadores x86 es mucho ms fcil reconocer
dicha instruccin empleando lenguaje Assembly:
movb 061,%al
(que significa mover el valor hexadecimal 61 (97 decimal) al registro al.)
Cada instruccin de la mquina se transforma en una nica instruccin en cdigo
simblico.
Pero adems, para mejorar la legibilidad del programa, el cdigo simblico
introduce instrucciones adicionales, que no corresponden a ninguna instruccin de
la mquina y que proporcionan informacin. Se llaman pseudoinstrucciones.
El cdigo simblico puede parecer de difcil acceso, pero es ms fcil de recordar
e interpretar que el binario o el hexadecimal.
Los lenguajes simblicos no resuelven definitivamente el problema de cmo
programar un ordenador de la manera ms sencilla posible. Para utilizarlos, hay
que conocer a fondo el microprocesador, los registros de trabajo de que dispone,
la estructura de la memoria, y muchas cosas ms.
Adems, el lenguaje Assembly est demasiado ligado al microprocesador para
que sea posible escribir programas independientes de la mquina en que van a
ejecutarse.
Este cdigo simblico no puede ser ejecutado directamente por un ordenador, por
lo que es preciso traducirlo previamente. Pero la traduccin es un proceso
mecnico y repetitivo, que se presta a su realizacin por un programa de
ordenador.
Los programas que traducen cdigo simblico al lenguaje de mquina se llaman
ensambladores (assembler, en ingls), porque son capaces de ensamblar el

programa traducido a partir de varias piezas, procedimientos o subrutinas a cdigo


binario (1 y 0) que entiende el procesador.
Ejemplos de lenguaje Assembly
Ejemplo 1 El siguiente es un ejemplo del programa clsico Hola mundo escrito
para la arquitectura de procesador x86 (bajo el sistema operativo DOS ).
.model small .stack .data Cadena1 DB Hola Mundo.$ .code
programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
end programa

Lenguaje Ensamblador

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 compiladores se necesitan de las libreras, si
son estticos 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.

4.3 Lenguaje Maquina Caractersticas


Un lenguaje de programacin de bajo nivel es el que proporciona poca o ninguna
abstraccin del microprocesador de un ordenador. Consecuentemente es
fcilmente trasladado a lenguaje de mquina.
La palabra bajo no implica que el lenguaje sea inferior a un lenguaje de alto nivel;
se refiere a la reducida abstraccin entre el lenguaje y el hardware.

Uso: ventajas e inconvenientes. En general se utiliza este tipo de lenguaje para


programar controladores (drivers).
La programacin en un lenguaje de bajo nivel como el lenguaje de la mquina o el
lenguaje simblico tiene ciertas ventajas:
Mayor adaptacin al equipo.
Posibilidad de obtener la mxima velocidad con mnimo uso de memoria.
Pero tambin tiene importantes inconvenientes:
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 intrucciones.
Es necesario conocer en detalle la arquitectura de la mquina.
Caractersticas
Se trabaja a nivel de instrucciones, es decir, su programacin es al ms fino
detalle. Est orientado a la mquina.
Primera generacin
El lenguaje de programacin de primera generacin (por sus siglas en ingls,
1GL), es el lenguaje de cdigo mquina. Es el nico lenguaje que un
microprocesador entiende de forma nativa. El lenguaje mquina no puede ser
escrito o ledo usando un editor de texto, y por lo tanto es raro que una persona lo
use directamente.
Segunda generacin
El lenguaje de programacin de segunda generacin (por sus siglas en ingls,
2GL), es el lenguaje ensamblador. Se considera de segunda generacin porque,
aunque no es lenguaje nativo del microprocesador, un programador de lenguaje
ensamblador debe conocer la arquitectura del microprocesador (como por ejemplo
las particularidades de sus registros o su conjunto de instrucciones).

Direccionamiento Lenguaje Maquina

Es la forma en como 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.

4.4 Administracin Memoria Lenguaje Ensamblador


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.

También podría gustarte