You are on page 1of 14

UNIDAD III ENSAMBLADORES

De dnde viene la denominacin de ensamblador?


Es una consecuencia natural del desarrollo histrico de la programacin, al aumentar el
tamao de los programas y el nmero de subrutinas de biblioteca disponibles. Un
programador, que tiene que codificar un programa muy largo, normalmente lo descompone,
lo divide en un nmero ms o menos grande de subprogramas o rutinas -independientes o
no- los escribe, los traduce y los prueba por separado. Por consiguiente, el traductor debe
seguir la pista de todas las referencias cruzadas entre los diversos subprogramas y
subrutinas con el fin de generar un programa que est en condiciones de ser procesado; es
decir, debe estar en condiciones de ensamblar (unir) todas las partes para dar un resultado
nico; y de ah viene el nombre de ensamblador.
Que es ensamblador y para que sirve?
Cuando se empezaron a utilizar smbolos nmotcnicos, 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.
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 mas optimizado que un programa generado por un
compilador.
Mayor control de la computadora: Un programa puede accesar directamente cualquier
componente y perifrico de la computadora.
Independencia del lenguaje: No depende de libreras o del lenguaje mismo para realizar
una tarea especifica. 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 interpretes. El
ensamblador generalmente es ms rpido ensamblando un programa que un compilador
generando un archivo ejecutable.

Motivos para no utilizarlo:


Dependencia del hardware: El cdigo se hace en extremo dependiente del
microprocesador, de los dispositivos, de los controladores, etc.
Mayor tiempo de codificacin: El numero 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 mas 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 mas 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 esta 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).

EL NIVEL DEL LENGUAJE ENSAMBLADOR

Vistos a muy bajo nivel, los microprocesadores procesan exclusivamente seales


electrnicas binarias. Dar una instruccin a un microprocesador supone en realidad enviar
series de unos y ceros espaciadas en el tiempo de una forma determinada. Esta secuencia de
seales se denomina cdigo mquina. El cdigo representa normalmente datos y nmeros e
instrucciones para manipularlos. Un modo ms fcil de comprender el cdigo mquina es
dando a cada instruccin un mnemnico, como por ejemplo STORE, ADD o JUMP. Esta
abstraccin da como resultado el ensamblador, un lenguaje de muy bajo nivel que es
especfico de cada microprocesador.
Los lenguajes de bajo nivel permiten crear programas muy rpidos, pero que son a menudo
difciles de aprender. Ms importante es el hecho de que los programas escritos en un bajo
nivel son prcticamente especficos para cada procesador. Si se quiere ejecutar el programa
en otra mquina con otra tecnologa, ser necesario reescribir el programa desde el
principio.
Lenguaje ensamblador, Uno de los mtodos inventados por los programadores para
reducir y simplificar el proceso es la denominada programacin con lenguaje ensamblador.
Al asignar un cdigo mnemotcnico (por lo general de tres letras) a cada comando en
lenguaje mquina, es posible escribir y depurar o eliminar los errores lgicos y de datos en
los programas escritos en lenguaje ensamblador, empleando para ello slo una fraccin del
tiempo necesario para programar en lenguaje mquina. En el lenguaje ensamblador, cada
comando mnemotcnico y sus operadores simblicos equivalen a una instruccin de

mquina. Un programa ensamblador traduce el cdigo fuente, una lista de cdigos de


operacin mnemotcnicos y de operadores simblicos, a cdigo objeto (es decir, a lenguaje
mquina) y, a continuacin, ejecuta el programa. Sin embargo, el lenguaje ensamblador
puede utilizarse con un solo tipo de chip de CPU o microprocesador. Los programadores,
que dedicaron tanto tiempo y esfuerzo al aprendizaje de la programacin de un ordenador,
se vean obligados a aprender un nuevo estilo de programacin cada vez que trabajaban con
otra mquina. Lo que se necesitaba era un mtodo abreviado en el que un enunciado
simblico pudiera representar una secuencia de numerosas instrucciones en lenguaje
mquina, y un mtodo que permitiera que el mismo programa pudiera ejecutarse en varios
tipos de mquinas. Estas necesidades llevaron al desarrollo de lenguajes de alto nivel.
Caractersticas del lenguaje ensamblador:
1. Las direcciones son simblicas.
2. Traduccin de las instrucciones en lenguaje ensamblador a lenguaje mquina de una
en una.
3. Existen unas instrucciones no traducibles a cdigo mquina llamadas pseudo
instrucciones. Sirven para el control del programa.

FUNCIONES DE UN ENSAMBLADOR
Un ensamblador es un programa que toma un programa fuente escrito en lenguaje de
ensamblador y lo traduce a lenguaje de mquina. Este ltimo lenguaje es el conjunto de
informacin binaria que interpreta el procesador.
Un ensamblador procesa un programa, en el cual las instrucciones reflejan la estructura
interna de la computadora y permiten al programador referirse directamente a
acumuladores, direcciones, cdigos de funcin, etc.
Un ensamblador debe trabajar con tres tipos de informacin en el programa fuente:

Informacin que no va a depender del lugar en que se almacene el subprograma en


la memoria, como pueden ser los cdigos de operacin y las constantes numricas.
Por consiguiente, su traduccin es independiente de si el subprograma est
encadenado con otros o no. Son las llamadas cantidades absolutas.

Informacin a la que se hace referencia o que se define en otros subprogramas. El


valor de estos smbolos no puede ser conocido hasta que todo el programa sea
enlazado. Son los llamados valores (cantidades o variables) globales o externas.

Y, por ltimo, informacin que slo es definida o referenciada en ese subprograma


y, por consiguiente, su direccin absoluta de almacenamiento en memoria
depender de la posicin del subprograma, que ser independiente de la
combinacin con otros subprogramas. Basta conocer la direccin de inicio del
subprograma para, aadindosela a la direccin relativa, obtener la direccin
absoluta. Esta informacin se denomina localizable (variables locales o internas).

Funciones de un ensamblador:
La funcin principal del ensamblador es: Traducir el cdigo fuente (instrucciones
nemonicas a cdigo mquina). Este cdigo generado recibe el nombre de codigo objeto.
Para efectuar la traduccin de cdigo fuente a cdigo objeto es necesario realizar las
siguientes funciones:
Conversin de las constantes a datos especificos en el programa fuente a sus
representaciones internas de maquina.
Conversin de operandos simbolicos y sus direcciones de maquina equivalentes.
Conversin de cdigo de operaciones a nemonicos a lenguaje maquina.
Construccin de las instrucciones de maquina en un formato adecuado.
Escritura de un programa objeto y listado ensamblado.
Para obtener el verdadero programa objeto del procesador de la computadora, es necesario
encadenar todos los subprogramas entre si y con las subrutinas de biblioteca que sean
precisas. Esta fusin es realizada por un programa de servicio que recibe varios nombres:
Editor de encadenamiento, cargador, introductor o montador de enlaces.
TIPOS DE ENSAMBLADORES
Se pueden hacer varios tipos de ensambladores, con las anteriores caractersticas bsicas,
segn el tipo de mquina y de la potencia del lenguaje ensamblador deseado.
En definitiva, el ensamblador empleado depender de que en las instrucciones se emplee
uno o varios operandos, de que existan uno o varios tipos de direccionamiento, etc. La
potencia de un ensamblador se mide por las pseudo instrucciones que contenga.
Aunque todos los ensambladores realizan bsicamente las mismas tareas, podemos
clasificarlos de acuerdo a caractersticas.
Clasificacin de los ensambladores:
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.
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.
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.
Ensambladores de una fase: Estos ensambladores leen una lnea del programa fuente y la
traducen directamente para producir una instruccin en lenguaje mquina o la ejecuta si se
trata de una pseudoinstruccin. Tambin va construyendo la tabla de smbolos a medida
que van apareciendo las definiciones de variables, etiquetas, etc.
Debido a su forma de traduccin, estos ensambladores obligan a definir los smbolos antes
de ser empleados para que, cuando aparezca una referencia a un determinado smbolo en
una instruccin, se conozca la direccin de dicho smbolo y se pueda traducir de forma
correcta. Estos ensambladores son sencillos, baratos y ocupan poco espacio, pero tiene el
inconveniente indicado.
Ensambladores de dos fases: Los ensambladores de dos fases se denominan as debido a
que realizan la traduccin en dos etapas. En la primera fase, leen el programa fuente y
construyen una tabla de smbolos ; de esta manera, en la segunda fase, vuelven a leer el
programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los
smbolos utilizados y las posiciones que se les ha asignado. Estos ensambladores son los
ms utilizados en la actualidad.
La tabla de smbolos es un conjunto de pares ordenados ( Si , Ti ) en los que el primer
elemento Si es un smbolo y el segundo Ti el valor asociado, es decir la traduccin
correspondiente.
Se puede considerar una tabla de smbolos posibles, en un conjunto T , de los cdigos de
operacin y direcciones binarias.

En general, en las tablas de smbolos llevan un nmero fijo de caracteres, que se completan
con espacios en blanco si es necesario. Como es natural, las tecnicas de construccin y
consultas de tablas tienen que ser diferentes en cada caso.

EL PROCESO DE ENSAMBLE DE UNO, DOS O MAS PASOS


Como se vio en la seccin anterior, existen ensambladores que realizan su tarea en una o
ms fases o pasos.
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.

ENSAMBLADORES DE UN PASO
La evolucin de la programacin ha ido variando la estructura de los ensambladores
hacindolos cada vez ms complejos. Los ms sencillos son los llamados en ingls Ioadand-go, que se puede traducir por ensambladores sobre la marcha, ya que aceptan un
programa en forma simblica; y en cuanto entra, lo ensambla en binario en la memoria,
generalmente, mediante una exploracin (scan) del programa fuente. En este caso se
obtienen los ensambladores de un paso.
Los ensambladores de un paso pueden ser de dos tipos diferentes, segn que la salida
generada est en binario o en simblico-binario.

Los ensambladores que generan una salida en binario, llamados en la ingles de tipo
load and go, suelen ser utilizados para programas pequeos (que son
frecuentemente modificados) o para mquinas pequeas sin memorias auxiliares, en
los cuales el hecho de leer dos veces el programa por cinta de papel o por mquina
de escribir supondra una gran prdida de tiempo. El principal problema de estos
ensambladores es la necesidad de usar los smbolos antes de definirlos. Se utiliza,
por ello, una tcnica parecida a la del editor de encadenamiento: Si a un smbolo se
le menciona, pero no est definido, se le introduce en una tabla que almacena todas
las presencias del smbolo. En el momento en que se define, se vuelve atrs y se
rellenan todas las referencias con el valor correspondiente. El resto de la tcnica es
anloga a la de los ensambladores de dos pasos.

En los ensambladores que producen una salida simblico-binaria, suele requerirse


que todos los nombres de datos se definan en cabeza, por lo que slo queda el
problema de smbolos no definidos para las instrucciones de bifurcacin. El resto es
anlogo a los del tipo load and go, aunque la salida no es procesable directamente,
sino que necesita un cargador.

La mayor dificultad de este tipo de ensambladores aparece cuando hay operandos cuyos
smbolos son expresiones aritmticas, en las que todava no se han definido sus smbolos
constituyentes.
En las bifurcaciones hacia adelante debe dejar una indicacin de que el cargador ha de
completar estas instrucciones. Se crea una tabla de referencia hacia adelante.

ENSAMBLADORES DE DOS PASOS


Las ventajas de dividir un programa en subprogramas son grandes. A parte de poder
trabajar con unidades independientes, cuando hay que cambiar o corregir un programa
basta con reprogramar y ensamblar de nuevo los subprogramas o rutinas afectados por el
cambio. Este mtodo aumenta la eficacia del ensamblador, ya que el tiempo de proceso de
las referencias cruzadas o parmetros de ensamblaje es prcticamente proporcional al
cuadrado del nmero de instrucciones del programa; por consiguiente, al dividir el
programa en partes, se consigue una reduccin importante en el tiempo de ensamblaje. A
los ensambladores que pueden realizar la incorporacin automtica de subrutinas de
bibliotecas y el enlazamiento de las diversas partes de un programa se les denomina
ensambladores de rutinas o de subprogramas. Este tipo de ensambladores suele trabajar en
dos pasos, es decir, haciendo dos exploraciones del programa fuente: En el primer paso,
construyen la tabla de smbolos y acumulan todas las definiciones de smbolos que se
encuentran en la rutina para efectuar la traduccin en el segundo paso. Las rutinas
ensambladas se suelen almacenar en un medio externo (cinta magntica, discos, tarjetas,
etc.).
EL PRIMER PASO:
Durante el primer paso, la principal tarea del ensamblador es extraer del programa fuente
todas las definiciones de smbolos y crear las correspondientes tablas. Para ello, como ya se

ha visto, procede a analizar las cadenas de entrada para convertirlas en un conjunto de


campos y buscarlos o aadirlos a la tabla correspondiente. En esta fase se suele efectuar un
anlisis sintctico de las sentencias del programa fuente, con el fin de poder detectar
posibles errores. Este anlisis lo realiza una subrutina cuya estructura es muy variable,
puesto que las sentencias de entrada, que dependen del lenguaje de que se trate, tienen muy
diversas estructuras: formato y longitud fijos, formato variable y longitud fija o formato y
longitud variable, aparte de que el nmero de operandos y expresiones permitidas varan
desde un mnimo de dos campos a cuatro o cinco por trmino medio.
Algoritmo para el primer paso
En el caso de la pseudo-instruccin se bifurca a la subrutina correspondiente para efectuar
las acciones de control que sean adecuadas a cada caso; en particular, cuando se detecta la
de fin de programa, el efecto es inicializar la rutina de post-anlisis, completar las tablas de
smbolos y dar paso a la segunda fase.
La definicin de los smbolos depende del tipo de instruccin en la que aparezcan. La ms
sencilla se manifiesta cuando se define por una etiqueta, pues automticamente el contador
de direcciones refleja la direccin relativa del smbolo.
En las tablas se almacena el smbolo, el valor -si se puede determinar en ese momento- y un
identificador de tipo del smbolo cuya utilidad se comprender al estudiar el fin del paso 1.
El primer paso de un ensamblador tiene por misin principal la del anlisis de las
sentencias o instrucciones. Un esquema de las etapas del primer paso es el siguiente:

PRIMER PASO

Leer sentencia o instruccin.

Analizar sentencia o instruccin.

Tratamiento de etiquetas.
Buscar en tabla de smbolos (si no est, pasar al siguiente paso).
Insertar en tabla de smbolos.
Tratamiento de cdigo de operacin.
Buscar en tabla de cdigo de operacin y actualizar campo de direccin.
Escribir cdigo de operacin.
Buscar en tabla de pseudo- instrucciones y hacer el tratamiento de la pseudo-instruccin.
Anlisis del operando (en caso de la creacin de un cdigo intermedio).
Almacenar en tabla de smbolos.
Buscar en tabla de smbolos.
Sustituir por direccin en tabla de smbolos.

Al finalizar el paso uno, entra en juego una subrutina postanalizadora que, segn el tipo de
indicador asociado a cada smbolo en las tablas, completa los valores. As, si este indicador
era de definicin por etiqueta, respeta el valor almacenado; si era definicin por pseudoinstruccin, evala las correspondientes cadenas de equivalencia; o si era de indefinicin, le
da una direccin que haya quedado libre de acuerdo con la estrategia del ensamblador,
siempre que no se trate de una variable externa.
EL SEGUNDO PASO:
El objetivo de este paso es obtener una visin semicompilada (simblica-binaria del
programa o rutina que se est ensamblando), adems de las tablas de uso para el cargador y
la informacin necesaria para la localizacin de las variables.
Para ello vuelve a leer el programa fuente, bien de un medio exterior (cinta de papel,
tarjetas) o, lo ms usual, de una cinta o disco magntico. Al leer una instruccin, ignora la
etiqueta que ya fue completamente procesada en el primer paso. El cdigo de operacin es
traducido de acuerdo con la tabla correspondiente o se genera la bifurcacin a la subrutina
correspondiente, s se trataba de un cdigo de pseudo-instruccin. Determina si las
cantidades y direcciones se encuentran en modo absoluto, localizable o todava
indeterminada (variables externas), efectuando los clculos o evaluaciones necesarios y
generando los valores binarios correspondientes, con indicacin para la posterior
localizacin si fuese necesaria.
La salida de esta fase y, por consiguiente, del ensamblaje depende del editor de
encadenamiento, aunque un formato tpico es el siguiente:

Nombre de la rutina, subprograma o programa.

Seccin binaria con el programa en forma semicompilada y con la informacin


necesaria para la localizacin.

Tabla de definicin, con los smbolos globales definidos en la rutina.

Tabla de uso, que detalla el uso de los smbolos globales.

Esta ltima tabla es muy compleja, puesto que registra todas las apariciones de los smbolos
externos, al depender de las posibilidades del ensamblador correspondiente. Si se permite la
multiplicacin de estos smbolos globales, hay que generar tambin una tabla de uso para el
producto.
Las tablas de uso son necesarias para la fase siguiente del encadenamiento de las diversas
rutinas.
En el caso ms sencillo -que es cuando se canalizan todas las variables globales a travs de
un rea comn (COMMON)- se almacena en la tabla, para cada smbolo, el lugar o lugares
de la rutina en que ha sido usada. Cuando el valor del smbolo es determinado, el editor de
encadenamiento puede colocarlo en sus lugares correctos.
Al acabar el ensamblaje -o simultneamente a l en otros casos- se produce un listado con
el programa fuente, incluidos: Los comentarios, el programa objeto, las tablas de smbolos

con sus valores y los errores detectados con sus diagnsticos. El formato y caractersticas
particulares de este listado depende del lenguaje utilizado.

SEGUNDO PASO

Lectura del programa de memoria secundaria.

Tratamiento de sentencias o instrucciones. En el primer paso slo se analizaban las


sentencias para ver si eran correctas.

Tratamiento del cdigo de operacin (SEGUNDO PASO). En el primer paso el cdigo


de operacin se trataba simplemente para ver si era correcto o no.
Buscar en tabla de cdigo de operacin. Obtener cdigo de mquina y su longitud.
o

Actualizar contador de direcciones.

Buscar tabla de pseudo-instruccin (si es smbolo). Tratar la pseudoinstruccin.

Tratamiento del operando.


o

Buscar en tabla de smbolo (si es smbolo). Obtener la direccin.

Obtener valor (si no es smbolo se obtiene la direccin directamente).

Escribir cdigo objeto

LITERALES Y EXPRESIONES
En computacin, las literales son mecanismos mediante los cuales se reservan espacios de
memoria para guardar valores de cierto tipo. Generalmente, el trmino literal se asocia un
smbolo para representar la direccin del primer byte de espacio asignado. En el espacio
asignado se pueden almacenar valores constantes o variables.
Las expresiones son combinaciones de literales y operadores. En lenguaje ensamblador las
expresiones involucran valores constantes y operadores. Los resultados se almacenan como
constantes ya que los clculos ocurren durante el ensamble, no durante la ejecucin. Los
operadores que se utilizan en las expresiones de lenguaje ensamblador no tienen ningn
efecto en tiempo de ejecucin del programa ensamblado. No debe confundirse el manejo de
expresiones en lenguaje ensamblador con el manejo de expresiones en los lenguajes de alto
nivel. En los lenguajes de alto nivel, la evaluacin de las expresiones se hace en tiempo de
ejecucin.
Cada traductor dar sus reglas de construccin de expresiones y, muy importante, de cmo
las evala.
Se mencionar brevemente las caracteristicas de las instrucciones y pseudoinstrucciones de
los lenguajes de ensamblaje sin describir ninguna en particular y con el proposito de
presentar los diferentes tipos de problemas con los que se encuentra el ensamblador.

Instrucciones simbolicas
Una instruccin en ensamblador consta de cdigos de operacin, operaciones, operandos y
comentarios.
La etiqueta , es el smbolo que aadido a una instruccin permite que se pueda referenciar
simblicamente en el programa.
El cdigo de operacin , es generalmente un smbolo, aunque en algunos sistemas es un
entero octal, hexadecimal o decimal que indica la operacin que se quiere realizar.
El campo operando , es un campo de direccin de datos que puede estar dividido en varios
subcampos de acuerdo con la constitucin interna de la computadora correspondiente.
El comentario , que no es obligatorio, no es procesado por el ensamblador. Nos dice que
las instrucciones pueden ser de formato fijo, formato libre y formato mixto.

ENSAMBLADOR HIPOTETICO
Un ensamblador hipottico es un pequeo programa que se ejecuta a travs de un software
que reconoce y ejecuta precisamente instrucciones nemnicas codificadas en lenguaje
maquina.
Las instrucciones de este ejemplo estn definidas de la siguiente manera:
ORG
Esta pseudo instruccin que proporcione informacin acerca de alguna parte
de la traduccin.
LDA SUB Instruccin que permite cargar el sustraendo a AC. El nombre simblico de la
operacin es LDA.
SUB
Indica que es un smbolo de direccin.
CMA
Instruccin de maquina que representa un complemento.
INC
Instruccin que indica un incremento a AC.
ADD MIN Permite sumar el minuendo a AC.
MIN El valor binario de la parte de direccin debe obtenerse un smbolo de
direccin MIN.
STA DIF
Permite almacenar la diferencia.
DIF El valor binario de la parte de direccin debe obtenerse un smbolo de
direccin DIF.
HLT
Instruccin que nos permite detener la computadora.
DEC N
Este es un nmero decimal con signo N para convertirse en binario.
Dos lneas del programa simblico especifican operando decimales con la pseudo
instruccin DEC.
HEX 0
La diferencia se encuentra almacenada aqu.
END
Fin del programa simblico y nos indica que ya no hay lneas para traducir.

EJEMPLO DE PROGRAMA PARA RESTAR DOS NUMEROS


ORG 100
LDA SUB
CMA
INC
ADD MIN
STA DIF
HTL
MIN, DEC 83
SUB, DEC-23
DIF, HEX 0
END

/Origen del programa en posicin 100


/Cargar el sustraendo de AC
/Complementar AC
/Incrementar AC
/Sumar el minuendo a AC
/Almacenar la diferencia
/Detener la computadora
/Minuendo
/Sustraendo
/La diferencia almacenada esta aqu
/Fin del programa simblico

EJEMPLO DE ENSAMBLADOR HIPOTETICO


Posicin
___
100
101
102
103
104
105
106
107
108

Programa Simblico
ORG 100
LDA SUB
CMA
INC
ADD MIN
STA DIF
HTL
MIN, DEC 83
SUB, DEC-23
DIF, HEX 0
END

Comentario
/Origen del programa en posicin
/Cargar el sustraendo de AC
/Complementar AC
/Incrementar AC
/Sumar el minuendo a AC
/Almacenar la diferencia
/Detener la computadora106
/Minuendo
/Sustraendo
/La diferencia almacenada esta aqu
/Fin del programa simblico

Cuando se termina el primer examen asociamos cada valor con su nmero de posicin y
formamos una tabla que defina el valor hexadecimal de cada direccin simblica (Consta
de 1,2 o3 pero no mas de 3 caracteres alfanumricos), para este ejemplo, la tabla de
direccin es como sigue:
Direccin simblica
MIN
SUB
DIF

Direccin hexadecimal
106
107
108

TABLA DE SIMBOLOS DE DIRECCION


Palabra de Smbolo
1
2
3
4
5
6

Cdigo
M I 4D 49
N , 4E 2C
(LC) 01 06
S U 53 55
B , 42 2C
(LC) 01 07

Representacin
0100110101001001
0100111000101100
0000000100000110
010100110101 0101
0100001000101100
0000000100000111

7
8
9

D I 44 49
F , 46 2C
(LC) 01 08

0100010001001001
0100011000101100
0000000100001000

Durante el segundo examen del programa simblico hacemos referencia a la tabla de


smbolos de direccin para determinar el valor de direccin de una instruccin de referencia
a memoria.
Posteriormente se ensamblan las dos partes en una instruccin hexadecimal de cuatro
dgitos como se muestra en el ejemplo ensamblador hipottico.
El cdigo hexadecimal puede convertirse de cuatro dgitos como dgitos como se muestra
en el ejemplo del ensamblador hipottico.
El cdigo hexadecimal puede convertirse con facilidad en el sistema binario si se desea
conocer exactamente como reside este programa de memoria.
TRADUCCIN AL CDIGO HEXADECIMAL A CDIGO BINARIO
Posicin
100
101
102
103
104
105
106
107
108

Programa simblico
ORG 100
LDA SUB
CMA
INC
ADD
STA DIF
HLT
MIN DEC 83
SUB DEC-23
DIF HEX 0

Contenido

Rep. Binaria

2107
7200
7020
1106
3108
7001
0053
FFE9
003C

0010000100000111
0111001000000000
0111000000100000
0001000100000110
0011000100001000
0111000000000001
0000000001010011
1111111111011001
0000000000111100

Se muestra la tabla de cdigo de instrucciones y cdigo de caracteres hexadecimales.


Cdigo de caracteres hexadecimales
Carcter Cdigo Carcter Cdigo Carcter Cdigo Carcter Cdigo
A
41
M
4D
Y
59
ESPACIO
20
B
42
N
4E
Z
5A
(
28
C
43
O
4F
0
30
)
29
D
44
P
50
1
31
*
2A
E
45
Q
51
2
32
+
2B
F
46
R
52
3
33
,
2C
G
47
S
53
4
34
2D
H
48
T
54
5
35
.
2E
I
49
U
55
6
36
/
2F
J
4A
V
56
7
37
=
3D
K
4B
W
57
8
38
CR
OD
L
4C
X
58
9
39

TABLA DE INSTRUCCIONES
Smbolo
AND
ADD
LDA
STA
BUN
BSA
ISZ
CLA
CLE
CMA
CME
CIR
CIL
INC
SPA
SNA
SZA
SZE
HLT
OU
SKI
SKO
ION
IOF

Cdigo hexadecimal
0u8
1o9
2oA
3oB
4oC
5oD
6oE
7800
7400
7200
7100
7080
7040
7020
7010
7008
7004
7002
7001
F400
F200
F100
F080
F040

Descripcin
Aplicar AND M a AC
Sumar M a AC, acarrear E
Cargar AC desde M
Almacenar AC en M
Brincar en forma condicional a M
Salvar la direccin de retorno en M
Incrementar M y saltar si hay un cero
Borrar a AC
Borrar E
Complementar a AC
Complementar E
Circular a la derecha E y AC
Circular a la izquierda E y AC
Incrementar AC
Brincar si AC es positivo
Brincar si AC es negativo
Brincar si AC es cero
Brincar si E es cero
Introducir y borrar bandera
Sacar informacin y borrar bandera
Saltar si la bandera de entrada esta activada
Saltar si la bandeja de salida esta activada
Habilitar la interrupcin
Deshabilitar interrupcin

You might also like