Lenguaje Ensamblador - Blog de Tecnologia, Ingenieria en Sistemas

Novedades

lunes, 21 de febrero de 2011

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:

Publicar un comentario

Gracias por su comentario