Lenguaje Ensamblador
El Nivel Del Lenguaje Ensamblador
Dicho nivel difiere considerablemente
de los niveles de microprogramación, de maquina convencional y del sistema
operativo, debido a que se implanta por traducción y no por interpretación.
Funciones De Un Ensamblador
La tarea fundamental de un
ensamblador es traducir un programa en lenguaje de ensamblador al código
correspondiente en lenguaje de máquina. En esencia, el ensamblador debe
realizar las siguientes tareas:
- Convertir los códigos ("opcode" o mnemónicos: ej. LDA, STX) a su código equivalente en lenguaje de máquina
- Convertir los operandos simbólicos (las etiquetas o variables) en las direcciones correspondientes de los operandos
- Construir las instrucciones en lenguaje de máquina en el formato apropiado
- Convertir las constantes definidas en el programa en su verdadera representación
- Escribir el "listing" en lenguaje de ensamblador con el código en lenguaje de máquina correspondiente
- Procesar las directrices al ensamblador (las directrices son instrucciones o comandos dirigidos al ensamblador, que éste procesa y ejecuta al hallarlos en el programa en lenguaje de ensamblador; estas directrices no se traducen a lenguaje de máquina, si no que el ensamblador ejecuta alguna acción, como reservar memoria para variables, entre otras)
En general, la mayoría de las
tareas se puede realizar si se recorre el programa línea por línea. Pero surge
una dificultad si se trata de traducir una instrucción cuyo operando está
definido más abajo en el programa. Si esto ocurre, el ensamblador
desconoce la dirección del operando y la instrucción no se podría ensamblar.
Tipos De Ensambladores
Aunque todos los ensambladores
realizan básicamente las mismas tareas, podemos clasificarlos de acuerdo a
características, 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
tendrán las computadoras donde va a ejecutarse el programa objeto producido.
El empleo de este tipo de
traductores permite aprovechar el soporte de medios físicos (discos,
impresoras, pantallas, etc.), y de programación que ofrecen las máquinas
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 ejecución, 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 hacía 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, también 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 pequeños 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.
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 definición y manipulación 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 intérprete de las mismas interpretaba de igual forma un
determinado código de operación.
El programa que indica al
intérprete de instrucciones de la UCP cómo debe actuar se denomina
microprograma. El programa que ayuda a realizar este microprograma se llama
microensamblador. Existen procesadores que permiten la modificación de sus
microprogramas, para lo cual se utilizan microensambladores.
Ensambladores de una fase.
Estos ensambladores leen una línea
del programa fuente y la traducen directamente para producir una instrucción en
lenguaje máquina o la ejecuta si se trata de una pseudoinstrucción. También va
construyendo la tabla de símbolos a medida que van apareciendo las definiciones
de variables, etiquetas, etc.
Debido a su forma de traducción,
estos ensambladores obligan a definir los símbolos antes de ser empleados para
que, cuando aparezca una referencia a un determinado símbolo en una
instrucción, se conozca la dirección de dicho símbolo 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 traducción en dos etapas. En la primera
fase, leen el programa fuente y construyen una tabla de símbolos; 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 símbolos
utilizados y las posiciones que se les ha asignado. Estos ensambladores son los
más utilizados en la actualidad.
El Proceso De Ensamble De Uno, Dos O Mas Pasos
Es por esta razón que la mayoría
de los ensambladores hacen su trabajo pasando dos veces por el programa
fuente: una primera vez se pasa para asignar a cada etiqueta su dirección
correspondiente en el programa objeto.
El ensamblador pasa una Segunda ocasión
por el programa fuente para llevar a cabo el ensamblaje de las instrucciones
una vez ya tiene asignadas las direcciones de todas las etiquetas. Estos
ensambladores se llaman ensambladores de dos pasadas ("two pass
assembler").
Las tareas que el ensamblador
lleva a cabo en cada pasada son:
Primera pasada:
La Primera Pasada.- la función
principal es construir, lo que sé llama tabla de símbolos, donde se guardan los
valores de todos los símbolos. Un símbolo es una etiqueta o un valor al que se
le asigna un nombre simbólico por medio de una seudoinstrucción.
Pasos:
1. asignar una dirección de
memoria a cada instrucción
2. guardar en una tabla las
direcciones de todas las etiquetas del programa
3. procesar algunas de las
directrices
Segunda pasada:
La Segunda Pasada.- es generar el
programa objeto y posiblemente, imprimir el listido de ensamblaje. Además, debe
producir cierta información necesaria para que el programa ligador enlace
procedimientos ensamblados en momentos diferentes.
Pasos:
1. cambiar los mnemónicos a su
código correspondiente en lenguaje de máquina
2. poner las direcciones de los
operandos simbólicos o etiquetas en las instrucciones
3. generar los valores de las
constantes declaradas
4. procesar el resto de las
directrices
5. escribir el programa en
lenguaje objeto y el "listing"
Literales Y Expresiones
Literales.- se le llama así a las
constantes para las cuales el ensamblador reserva memoria automática. Además de
ahorrar al programador un poco de escritura, las literales hacen más legibles
de los programas al hacer que el valor de la constante aparezca en la
instrucción fuente.
Expresiones.-Una expresión es una
combinación de símbolos constantes, operadores algebraicos y paréntesis. La
expresión especifica un valor, el cual será utilizado como operando.
Las expresiones pueden consistir
de símbolos, constantes o del caracter ‘ * ‘ (denotando el valor actual del
contador de programa PC) unidos entre sí por alguno de los operadores: +, -, *,
/, %, &, I, ^ .
Definición De Una Macro
Una macro es un grupo de
instrucciones repetitivas en un programa que se codifican solo una vez y pueden
utilizarse cuantas veces sea necesario.
La principal diferencia entre una
macro y un procedimiento es que en la macro se hace posible el paso de
parámetros y en el procedimiento no (esto es aplicable solo para el MASM, hay
otros lenguajes de Programación que si lo permiten). Al momento de ejecutarse
la macro cada parámetro es sustituido por el nombre o valor especificado al
momento de llamarla.
Podemos decir entonces que un
procedimiento es una extensión de un determinado programa, mientras que la
macro es un módulo con funciones específicas que puede ser utilizado por
diferentes programas(1).
Ensamble Condicional
Se emplean para que el ensamblador
evalúe unas condiciones y, según ellas, ensamble o no ciertas zonas de código.
Es frecuente, por ejemplo, de cara a generar código para varios ordenadores:
pueden existir ciertos símbolos definidos que indiquen en un momento dado si
hay que ensamblar ciertas zonas del listado o no de manera condicional, según
la máquina. En los fragmentos en ensamblador del código que generan los
compiladores también aparecen con frecuencia (para actuar de manera diferente,
por ejemplo, según el modelo de memoria). Es interesante también la posibilidad
de definir un símbolo que indique que el programa está en fase de pruebas y
ensamblar código adicional en ese caso con objeto de depurarlo.
Referencias
http://www.usc.clu.edu/comweb/cco220/ensambladores.htm
http://mx.geocities.com/laura_40cruz/idicelau.htm
http: www.sapag.com
http://ww.usc.clu.edu/comweb/cco220/ensambladores.htm
Members.es.tripod.de/patricio/ensam/ensam1.htm
http://www.usc.clu.edu/comweb/cco220/ensambladores.htm
No hay comentarios
Gracias por su comentario