Professional Documents
Culture Documents
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:
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.
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.
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.
PRIMER PASO
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:
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
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.
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
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
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
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