1. INTRODUCCIÓN
Los ensambladores son programas que procesan los enunciados del programa
origen en lenguaje ensamblador y los traducen en archivos en lenguaje máquina
que son ejecutados por un microprocesador o un microcontrolador.
Los ensambladores permiten que los programas origen se escriban y se
editen en una computadora para generar un código ejecutable en otra
computadora. El archivo en lenguaje objeto ejecutable resultante se carga
y se ejecuta en el sistema destino.
Este lenguaje es una colección de símbolos mnemónicos que representan: operaciones (mnemónicos de instrucciones para la máquina o de directrices para el ensamblador), nombres simbólicos, operadores y símbolos especiales.
El lenguaje ensamblador proporciona códigos de operación de los mnemónicos para todas las instrucciones de la máquina contenidas en la lista de instrucciones.
Además, el lenguaje ensamblador contiene mnemónicos directrices, los cuales especifican acciones auxiliares que se llevan a cabo por el ensamblador.
Estas directrices no siempre son traducidas a lenguaje maquina.
Un programador escribe el programa origen en lenguaje ensamblador utilizando cualquier editor de textos o procesador de palabras que sea capaz de producir una salida de texto en ASCII.
Una vez que el código origen ha sido escrito, el archivo origen es ensamblado mediante su procesamiento a través de algún ensamblador.
Durante la primer pasada, el programa origen se lee para desarrollar la tabla de símbolos.
Durante la segunda pasada el archivo objeto se crea (ensamblado) con referencia a la tabla desarrollada en la primer pasada.
Durante la segunda pasada se crea el listado del programa origen.
Cada enunciado origen se procesa completamente antes de que el enunciado siguiente se lea.
A medida que el enunciado se procesa el ensamblador examina los campos de etiqueta, de código de operación y de operandos.
La tabla de códigos de operación se revisa para encontrar un código operacional similar.
Durante el procesamiento de un mnemónico correspondiente a un código de operación normal, el código máquina normal se inserta en el archivo objetivo.
La acción buscada por una directriz del ensamblador ocurre durante el procesamiento de dicha directriz.
Cualquier error que detecta el ensamblador se muestra justamente antes de la línea que contiene dicho error.
Aún y cuando no se desee producir un listado origen, los errores se despliegan para indicar que el procesamiento de ensamblado no se llevó a cabo de manera normal.
Cada enunciado origen se compone de una secuencia de caracteres ASCII que terminan con un retorno (ENTER).
El apéndice A contiene un listado de los caracteres disponibles.
El campo de etiquetas aparece como el primer campo dentro de un enunciado
origen. El campo de etiquetas puede adoptar cualquiera de las siguientes
formas:
Si un símbolo aparece más de una vez en el campo de etiquetas, toda referencia a dicho símbolo será marcada como error.
Con la excepción de algunas directrices a la etiqueta se le asigna el valor del contador de programa ( PC ) del primer byte de la instrucción o dato que se esté ensamblando.
El valor asignado a la etiqueta es absoluto.
De manera opcional, las etiquetas pueden ser terminadas con el símbolo de dos puntos ( : ).
Si dicho símbolo es utilizado, no formará parte de la etiqueta, simplemente servirá como separación entre la etiqueta y el resto del enunciado origen.
De esta forma, los siguientes fragmentos son equivalentes:
salta: deca salta deca bne salta bne salta
Una etiqueta puede aparecer por si sola en una línea. El ensamblador
interpreta esto como "establece el valor de la etiqueta igual al valor
actual del contador de programa ( PC )".
El campo de operaciones debe de contener el mnemónico de un código de operación legal o una directriz del ensamblador.
En este campo, los caracteres en mayúsculas son convertidos en minúsculas antes de ser revisados como un mnemónico legal.
Debido a esto " nop ", " NOP " y " NoP " son reconocidos como el mismo mnemónico.
Los símbolos que aparecen en este campo pueden ser de uno de
dos tipos.
El código de operación incluye a cualquier nombre e registro asociado con la instrucción.
Estos nombres de registros no deben de estar separados del código de operación por ningún espacio en blanco.
De esta forma, " clra " significa " limpia (poner en ceros) el acumulador
( A ) ", pero " lr a " significa " limpia la localidad de memoria identificada
por la etiqueta a ".
El campo de operandos, si se requiere, debe de seguir al campo de operaciones y debe de estar precedido por al menos un espacio en blanco.
El campo de operandos puede contener un símbolo, una expresión o una combinación de símbolos y expresiones separados por comas.
El campo de operandos de una instrucción máquina es utilizada para especificar el modo de direccionamiento de la instrucción, así como el operando de la instrucción.
La siguiente tabla resume los diferentes formatos del campo de operandos
para la familia HC11.
| Formatos de Operandos | Modo de Direccionamiento |
| sin operando | Acumulador e Inherente |
| < expresión | Directo, Extendido o Relativo |
| # < expresión | Inmediato |
| < expresión , X | Indexado con el registro X |
| < expresión , Y | Indexado con el registro Y |
| < expresión < expresión | Set o Clear Bit |
| < expresión < expresión < expresión | Prueba Bit y Bifurca |
Debido a esto, X o Y pueden ser agregados a la primer expresión
en los últimos dos formatos arriba mostrados para formar el cálculo
de la dirección indexada efectiva.
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, ^.
Los operadores son iguales a los utilizados en el lenguaje de programación C:
El asterisco (*) utilizado en una expresión como símbolo representa el valor actual del contador de localidades (el primer byte de una instrucción de varios bytes ).
Las constantes pueden ser presentadas al ensamblador en uno de cinco posibles formatos: decimal, hexadecimal, binario, octal o ASCII.
El programador le indica al ensamblador el formato del número
con los siguientes prefijos:
El ensamblador convierte todas las constantes a código máquina binario y son desplegadas en el listado del ensamblado como valores hexadecimales.
Este campo es opcional y solamente es impreso en el listado origen con propósitos de documentación.
El campo de comentarios es separado del campo de los operandos (o del campo de operaciones sino se requiere operando) por al menos un espacio en blanco.
El campo de comentarios puede contener cualquier carácter imprimible ASCII.
El ensamblador normalmente suprime la impresión del listado origen, pero esta condición y otras pueden ser alteradas a través de diferentes opciones proporcionadas en la línea de comando que invoca al ensamblador.
Cada línea del listado contiene un número de línea de referencia, la dirección y los bytes ensamblados y el enunciado origen.
Opcionalmente, el listado del ensamblado puede contener una tabla de símbolos y otra de la aparición de estas en el programa.
Estas tablas siempre son impresas al final del listado de ensamblado.
as11 archivo1 (archivo2 . . . ) ( - opción1 opción2 . . . )
Donde archivo1, archivo2, etc, son los nombres de los archivos origen que se desean ensamblar. Los archivos origen pueden tener extensiones en su nombre, pero el ensamblador no verifica si existe alguna extensión en particular (sin embargo, no se utilice la extensión .s19, ya que ésta es la extensión del archivo objeto producido por el ensamblador. Al crearse dicho archivo objeto se perdería el archivo origen, ya que sería sobre escrito en el disco).
Las opciones son uno o más de las siguientes:
Estas opciones también pueden ser indicadas al ensamblador mediante el uso de la directriz OPT en el archivo origen.
El archivo objeto creado es escrito en el disco y se le da el nombre " nombre archivo.s19 ", donde nombre archivo es el primer archivo origen indicado en la línea de comando.
Cualquier error y el listado opcional (si se especificó) son desplegados en la pantalla.
El listado y/o los mensajes de error pueden ser salvados en un archivo para su posterior examinación o impresión, esto se logra mediante un comando de redireccionamiento de E/S en la línea de comando.
En la PC, la redirección de E/S se indica con el símbolo mayor que ( ), seguido de un nombre de archivo nuevo o existente.
Línea_número: Descripción del error o
Línea_número: Peligro - - - Descripción del error
Los errores en la primer pasada ocasionan la cancelación de la segunda pasada.
Un mensaje de error del tipo peligro no ocasiona la cancelación de la segunda pasada, pero indica un posible problema.
Los mensajes de error están diseñados para ser explicados por sí mismos.
A continuación se muestran las directrices reconocidas por los ensambladores como válidas, se explican con más detalle las más usuales.
La notación utilizada para describirlas es la siguiente:
FORMATO DEL LISTADO DEL ENSAMBLADOR
El listado del ensamblador tiene el siguiente formato:
LÍNEA# DIR BYTES CÓDIGO OBJETO [ # CICLOS ] LÍNEA ORIGEN
LÍNEA# es un número decimal de 4 dígitos impreso como una referencia para la tabla de aparición de símbolos.
DIR es el valor hexadecimal de la dirección del primer byte del código objeto para esta dirección.
BYTES CÓDIGO OBJETO es el código objeto resultante del ensamblado de la línea origen dado en hexadecimal.
#CÍCLOS solamente aparecerá en el listado si la opción c está habilitada. Aparece dentro de corchetes para ayudar a distinguir este valor del resto de la línea origen. La LÍNEA ORIGEN es reimpresa exactamente igual que en el programa fuente, incluyendo las etiquetas.
La tabla de símbolos será impresa cuando la opción s sea habilitada. La tabla de símbolos tiene el siguiente formato:
La tabla de aparición de símbolos será impresa cuando la opción cre sea seleccionada. La tabla de aparición de símbolos tiene el siguiente formato: