Sunteți pe pagina 1din 7

TEMA III

ENSAMBLADOR
Qu es ensamblador y para qu sirve?
Cuando se empezaron a utilizar smbolos nemotcnicos, se escribieron programas para
traducir automticamente los programas escritos en lenguaje ensamblador a lenguaje
mquina. A estos programas traductores se les llamo ensambladores.
La entrada para un ensamblador es un programa fuente escrito en lenguaje
ensamblador. La salida es un programa objeto, escrito en lenguaje de mquina. El
programa objeto incluye tambin la informacin necesaria para que el cargador pueda
preparar el programa objeto para su ejecucin.
Para evitar confusiones, de aqu en adelante llamaremos lenguaje ensamblador al
conjunto de nemotcnicos y a las reglas para su manejo. Al programa que traduce un
programa objeto a partir de un programa escrito en lenguaje ensamblador lo
llamaremos ensamblador.
Motivos para utilizarlo.
Rapidez: Como el programador directamente selecciona las instrucciones que se
ejecutan en el programa, el programa final queda ms optimizado que un
programa generado por un compilador.
Mayor control de la computadora: Un programa puede acceder directamente
cualquier componente y perifrico de la computadora.

Independencia del lenguaje: No depende de libreras o del lenguaje mismo para


realizar una tarea especfica. Lenguajes como el Basic limitan al programador a
lo que el lenguaje puede hacer.

La mayora de las computadoras pueden ensamblar: Los recursos necesarios


para ensamblar un programa son mucho menores que los compiladores o
intrpretes. El ensamblador generalmente es ms rpido ensamblando un
programa que un compilador generando un archivo ejecutable.

Motivos para no utilizarlo.


Desafortunadamente, tambin existen motivos para no crear los programas con
ensamblador.

Dependencia del hardware: El cdigo se hace en extremo dependiente del


microprocesador, de los dispositivos, de los controladores, etc. Este punto ser
analizado con ms detenimiento en dependencias de hardware.
Mayor tiempo de codificacin: El nmero de lneas de un programa hecho en
ensamblador es mayor a uno hecho en un lenguaje de alto nivel (por ejemplo:

Funcin en C puede realizar varias decenas o centenas de instrucciones del


microprocesador).

Comprensin ms profunda de la computadora: Entender un lenguaje de alto


nivel es generalmente ms sencillo que el ensamblador. Comprender
ensamblador requiere conocimientos ms exactos sobre el funcionamiento
interno de la computadora.

Errores ms frecuentes en el programa: El evitar un error o encontrar alguno que


ya exista es difcil. Las herramientas para este caso (como el CodeView y el
TurboDebbuger) ayudan en gran medida a ver lo que est ocurriendo en la
maquina, pero no localizan los errores.

Entonces, Cuando utilizo ensamblador y cuando no?


Depende del programa a desarrollar. Si el programa debe controlar en gran medida los
componentes internos de la computadora o debe ser lo suficientemente veloz, entonces
es recomendable utilizarlo. Si se requiere un sistema grande y no se dispone de mucho
tiempo para entregarlo, entonces es mejor juntar un lenguaje de alto nivel con
ensamblador (las funciones bsicas del programa realizarlas en ensamblador, y el
programa en general codificarlo con el lenguaje de alto nivel).
Aunque todos los ensambladores realizan bsicamente las mismas tareas, podemos
clasificarlos de acuerdo a caractersticas.
As podemos clasificarlos en:
Ensambladores Cruzados (Cross-Assembler).
Se denominan as los ensambladores que se utilizan en una computadora que posee
un procesador diferente al que tendrn las computadoras donde va a ejecutarse el
programa objeto producido.
El empleo de este tipo de traductores permite aprovechar el soporte de medios fsicos
(discos, impresoras, pantallas, etc.), y de programacin que ofrecen las mquinas
potentes para desarrollar programas que luego los van a ejecutar sistemas muy
especializados en determinados tipos de tareas.
Ensambladores Residentes.
Son aquellos que permanecen en la memoria principal de la computadora y cargan,
para su ejecucin, al programa objeto producido. Este tipo de ensamblador tiene la
ventaja de que se puede comprobar inmediatamente el programa sin necesidad de
transportarlo de un lugar a otro, como se haca en cross-assembler, y sin necesidad de
programas simuladores.

Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor


ocupa espacio que no puede ser utilizado por el programador. Asimismo, tambin
ocupar memoria el programa fuente y el programa objeto. Esto obliga a tener un
espacio de memoria relativamente amplio. Es el indicado para desarrollos de pequeos
sistemas de control y sencillos automatismo empleando microprocesadores.
La ventaja de estos ensambladores es que permiten ejecutar inmediatamente el
programa; la desventaja es que deben mantenerse en la memoria principal tanto el
ensamblador como el programa fuente y el programa objeto.
Ensambladores de una o dos pasadas.
El proceso de ensamble de un paso consiste en leer una lnea de programa fuente y
traducirla a lenguaje mquina cuando se trata de una instruccin, o se ejecuta si es una
pseudoinstruccin.
La tabla de smbolos se va construyendo a medida que se avanza en la lectura de las
lneas del programa fuente.
Para que el ensamble de un paso funciones, todos los smbolos deben estar definidos
antes de emplearse. Esto debido a que, para traducir correctamente cada instruccin,
se debe conocer la direccin de cada uno de los smbolos que intervienen en ella. En
otras palabras, no pueden quedar referencias pendientes porque ya no habr otra
oportunidad de resolverlas.
Tampoco podrn hacerse saltos hacia lneas posteriores. No es posible saltar hacia una
lnea cuya etiqueta todava no ha sido definida.
Para resolver el problema que presenta el proceso de ensamble de un paso, se utiliza
el proceso de ensamble de dos pasos o fases. En la primera fase, se lee el programa
fuente y se construye la tabla de smbolos.
En la segunda fase, se vuelve a leer el programa fuente y se traduce totalmente ya que
se conoce la totalidad de los smbolos utilizados (incluyendo las etiquetas) y las
posiciones de memoria que se les han asignado. Como ya se conocen las direcciones
de las etiquetas utilizadas, pueden realizarse saltos hacia adelante.
Los lenguajes de alto nivel fueron diseados para eliminar las particularidades de una
computadora especfica, mientras que un lenguaje ensamblador est diseado para
una computadora especifica, o, de manera ms correcta, para una familia especifica de
microprocesadores.
Macroensambladores.

Son ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su


potencia, normalmente son programas robustos que no permanecen en memoria una
vez generado el programa objeto. Puede variar la complejidad de los mismos,
dependiendo de las posibilidades de definicin y manipulacin de las
macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que
suelen ser ensambladores residentes.
Microensambladores.
Generalmente, los procesadores utilizados en las computadoras tienen un repertorio
fijo de instrucciones, es decir, que el intrprete de las mismas interpretaba de igual
forma un determinado cdigo de operacin.
El programa que indica al intrprete de instrucciones de la UCP cmo debe actuar se
denomina microprograma. El programa que ayuda a realizar este microprograma se
llama microensamblador. Existen procesadores que permiten la modificacin de sus
microprogramas, para lo cual se utilizan microensambladores.

SEGMENTO
Un segmento es un rea especial en un programa que inicia en un limite de un prrafo,
esto es, en una localidad de memoria que regularmente es divisible entre 16, o 10
hexadecimal. Aunque un segmento puede estar ubicado casi en cualquier lugar de la
memoria y, en modo real, puede ser hasta de 64K, solo necesita tanto espacio como el
programa requiera para su ejecucin.
Un segmento en modo real puede ser de hasta 64K. Se puede tener cualquier numero
de segmentos; para direccionar un segmento en particular basta cambiar la direccin
en el registro del segmento apropiado. Los tres segmentos principales son los
segmentos
de
cdigo,
de
datos
y
de
la
pila.
Segmento de cdigo.
El segmento de cdigo (CS) contiene las instrucciones de mquina que son ejecutadas
por lo comn la primera instruccin ejecutable esta en el inicio del segmento, y el
sistema operativo enlaza a esa localidad para iniciar la ejecucin del programa. Como
su nombre indica, el registro del CS direcciona el segmento de cdigo. Si su rea de
cdigo requiere mas de 64K, su programa puede necesitar definir mas de un segmento
de cdigo.

Segmento de datos.

El segmento de datos (DS) contiene datos, constantes y reas de trabajo definidos por
el programa. El registro DS direcciona el segmento de datos. Si su rea de datos
requiere mas de 64K, su programa puede necesitar definir mas de un segmento de
datos.
Segmento de pila.
En trminos sencillos, la pila contiene los datos y direcciones que usted necesita
guardar temporalmente o para uso de sus "llamadas" subrutinas. El registro de
segmento de la pila (SS) direcciona el segmento de la pila.
Lmites de los Segmentos.
Los registros de segmentos contienen la direccin inicial de cada segmento. La figura
2.1 presenta un esquema de los registros CS, DS y SS; los registros y segmentos no
necesariamente estn en el orden mostrado. Otros registros de segmentos son el ES
(segmento extra) y, en los procesadores 80386 y posteriores, los registros FS y GS,
que contienen usos especializados.
Coma ya dijimos, un segmento inicia en un limite de prrafo, que es una direccin por
lo comn divisible entre el 16 decimal o 10 hexadecimal. Suponga que un segmento de
datos inicia en la localidad de memoria 045F0H.
Ya que en este y todos los dems casos el ultimo dgito hexadecimal de la derecha es
cero, los diseadores de computadora decidieron que seria innecesario almacenar el
dgito cero en el registro del segmento. As, 045F0H se almacena como 045F, con el
cero de la extrema derecha sobrentendido. En donde sea apropiado, el texto indica al
cero de la derecha con corchetes, como 045F[0].

Figura 2.1.- Segmentos y Registros


Desplazamiento.
En un programa, todas la localidades de memoria estn referidas a una direccin inicial
de segmento. La distancia en bytes desde la direccin del segmento se define como el
desplazamiento (offset).
Un desplazamiento de dos bytes (16 bits) puede estar en el rango de 0000H hasta
FFFFH, o bien, desde cero hasta 65, 535. As el primer byte del segmento de cdigo
tiene un desplazamiento 00, el segundo byte tiene un desplazamiento 01, etc. hasta el
desplazamiento 65, 535. Para referir cualquier direccin de memoria en un segmento,
el procesador combina la direccin del segmento en un registro de segmento con un
valor de desplazamiento.
En el ejemplo siguiente, el registro DS contiene la direccin de segmento del segmento
de datos en 045F[0]H y una instruccin hace referencia a una localidad con un
desplazamiento de 0032H bytes dentro del segmento de datos.

Por lo tanto, la localidad real de memoria del byte referido por la instruccin es 04622H;

Direccin
del
Desplazamiento:
Direccin real: 04622H

segmento

DS:
+0032H

045F0H

Note que un programa tiene uno o mas segmentos, los cuales pueden iniciar casi en
cualquier lugar de memoria, variar en tamao y estar en cualquier orden.
CUESTIONARIO
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

Qu es un ensamblador?
Cules son los motivos para utilizar ensamblador?
Cules son los motivos para no utilizar ensamblador?
Qu es un ensamblador cruzado?
Qu es un ensamblador residente?
Qu es un microensamblador?
Qu es un macroensamblador?
Cmo operan los ensambladores de una fase?
Cmo operan los ensambladores de dos fases?
Qu es un segmento?
Cul es el segmento que contiene las instrucciones de mquina que son
ejecutadas?
Cul es el segmento que contiene el rea de trabajo definida por el programa?
Cul es el segmento utilizado para almacenar los datos y direcciones de forma
temporal?

S-ar putea să vă placă și