6. ENSAMBLADOR DEL MOTOROLA 68000
6.3 Directivas del ensamblador
6.3.1 ORG - Establecer el origen
El ensamblador mantiene un contador de posiciones de 32 bits, cuyo valor es inicialmente 0 y se incrementa una cierta cantidad siempre que una instrucción es ensamblada o se encuentra una directiva de almacenamiento de datos. El valor del contador de posición puede establecerse con la directiva ORG. Esta directiva se suele situar normalmente en el comienzo del programa y en lugares apropiados dentro de él. El formato de la directiva ORG es el siguiente:
<etiqueta> ORG <expresión>
Donde <expresión> es una expresión que no contiene posteriores referencias, es decir, es un valor conocido en la primera pasada en el punto en que la directiva ORG aparece. Se produce un error cuando se intenta establecer el contador de posición a un valor impar; en este caso el contador de posición se establece al valor dado más uno. La <etiqueta> es opcional, pero si aparece, el símbolo especificado se establecerá al nuevo valor del contador de posición.
Directivas de definición de símbolos
6.3.2 EQU – Igualar Símbolo
La directiva EQU se utiliza para definir símbolos de valores constantes, cuyo valor no cambiará dentro del programa. El formato de esta directiva es:
<etiqueta> EQU <expresión>
Donde <expresión> es una expresión que no contiene posteriores referencias, es decir, es un valor conocido en la primera pasada en el punto en que la directiva EQU aparece. La <etiqueta> debe especificarse, puesto que indica el símbolo que está siendo definido. Si se omite la etiqueta se produce un error. Si se realiza un intento de redefinir un símbolo que ha sido definido previamente con EQU, a través de una etiqueta o de cualquier otra directiva de definición de símbolos, se produce un error.
6.3.3 SET – Establecer Símbolo
La directiva SET es similar en función y formato a la directiva EQU, con una diferencia importante: los símbolos definidos usando SET pueden redefinirse posteriormente utilizando otra directiva SET (pero no usando las directivas EQU o REG). El formato de esta directiva es:
<etiqueta> SET <expresión>
6.3.4 REG – Rango de Registros
indicados (pueden darse en cualquier orden). Por ejemplo, la lista de registros D0, D1, D2, D3 D7, A1, A2 y A3 puede indicarse con:
D3-D0/D7/A1-A3
Los registros y los rangos pueden especificarse en cualquier orden. El mismo formato para las listas de registros se utiliza en la instrucción MOVEM. Para evitar confusiones, es preferible no especificar rangos que incluyan registros de direcciones y registros de datos, a pesar de que el ensamblador no los trate como rangos erróneos.
Directivas de almacenamiento de datos
6.3.5 DC – Definir Constante
La directiva DC se utiliza para almacenar cadenas y listas de constantes en memoria. El formato de la directiva DC es:
<etiqueta> DC.<tamaño> <item>,<item>,...
La etiqueta queda definida con la dirección de inicio de la lista de datos. El código de tamaño especifica que la lista es de bytes (.B), palabras (.W) o dobles palabras (.L); si se omite se utiliza el tamaño de palabra (.W).
Una lista de items sigue a la directiva; cada item puede ser una expresión o una cadena. Si el item es una expresión, ésta se evalúa y almacena en el tamaño indicado, es decir, en un byte, una palabra o una doble palabra. Se genera un error si el valor no encaja (como valor con signo o sin signo) dentro del tamaño especificado. Si el item es una cadena, delimitada por comillas simples, entonces la cadena se almacenará en entidades sucesivas del tamaño especificado; si la cadena no encaja dentro de un número completo de palabras o dobles palabras, entonces la cadena se rellena por su final con ceros. En una directiva DC pueden mezclarse cadenas y expresiones.
Si se están generando palabras (DC.W) o dobles palabras (DC.L), entonces el comienzo de la lista de constantes debe estar alineada a frontera de palabra, incrementando el contador de posición en uno si es necesario. Esto no se realiza para las directivas DC.B, por tanto, las cadenas de bytes pueden estar contiguas en la memoria. Si una instrucción sigue a una directiva DC.B, el ensamblador ajusta automáticamente el contador de localización (si es necesario) para ajustar las instrucción a frontera de palabra.
Lo siguiente es un ejemplo de una directiva DC que define una cadena terminada con un valor nulo:
TEXT DC.B ‘Ejemplo de DC’, $0D, $0A, 0
Esta directiva da como resultado la siguiente información en la dirección de TEXT: 44 43 20 45 78 61 6D 70 6C 65 0D 0A 00 (hexadecimal)
6.3.6 DCB – Definir Bloque Constante
La directiva DCB genera un bloque de bytes, palabras o dobles palabras, inicializadas con el mismo valor por el ensamblador. El formato de la directiva es:
<etiqueta> DCB.<tamaño> <longitud>,<valor>
La etiqueta queda definida con la dirección de inicio del bloque de datos. El código de
tamaño especifica que el bloque es de bytes (.B), palabras (.W) o dobles palabras (.L); si se omite se utiliza el tamaño de palabra (.W).
El argumento <longitud> es una expresión que indica el número de bytes, palabras o dobles palabras que compondrán el bloque. Este valor debe ser conocido en la primera pasada en el punto en que la directiva DCB aparece y además no puede ser negativo. El argumento <valor> es una expresión cuyo valor va a inicializar cada uno de los items de datos que componen el bloque; no necesita ser conocido en la primera pasada. Se
produce un mensaje de advertencia si el valor no encaja (como un número con signo o sin él) dentro del tamaño de datos seleccionado.
Si se están generando palabras (DCB.W) o dobles palabras (DCB.L), entonces el comienzo de la lista de constantes debe estar alineada a frontera de palabra, incrementando el contador de localización en uno si es necesario. Si una directiva DCB.B va seguida de una instrucción, el ensamblador ajusta automáticamente el contador de posición (si es necesario) para ajustar las instrucción a frontera de palabra.
6.3.7 DS – Definir Almacenamiento
La directiva DS reserva un bloque de bytes, palabras o dobles palabras sin inicializar. El formato de la directiva es:
<etiqueta> DS.<tamaño> <longitud>
La etiqueta queda definida con la dirección de inicio del bloque de datos. El código de tamaño especifica que el bloque es de bytes (.B), palabras (.W) o dobles palabras (.L); si se omite se utiliza el tamaño de palabra (.W).
El argumento <longitud> es una expresión que indica el número de bytes, palabras o dobles palabras que compondrán el bloque. Este valor debe ser conocido en la primera pasada en el punto en que la directiva DS aparece y además no puede ser negativo. El efecto de la directiva DS es básicamente aumentar el contador de posición con el valor del tamaño (si se está utilizando DS.B), con dos veces el tamaño (si se está utilizando DS.W) o con cuatro veces el tamaño (si se está utilizando DS.L).
Si se están reservando palabras (DS.W) o dobles palabras (DS.L), entonces el comienzo de la lista de constantes debe ser alineada a frontera de palabra, incrementando el contador de posición en uno si es necesario. Así, DS.W 0 se puede utilizar para forzar al contador de posición a alinearse a frontera de palabra, sin asignar ningún espacio. Si una directiva DS.B va seguida de una instrucción, el ensamblador ajusta automáticamente el contador de posición (si es necesario) para ajustar la instrucción a frontera de palabra.
6.3.8 END – Final del fichero fuente
La directiva END se utiliza para indicar el final del fichero fuente. Es puramente opcional. Su formato es sencillo:
END
El ensamblador ignorará cualquier cosa en el fichero fuente después de la directiva END.
6.3.9 INCLUDE – Inclusión
Esta directiva se utiliza para hacer que otro fichero parezca que es parte del fichero fuente actual. Cuando se encuentra esta directiva, se para el procesamiento del fichero fuente y se comienza inmediatamente con el fichero nombrado en la directiva. El efecto es que el contenido del fichero incluido se inserta en el fichero fuente en el punto en que aparece la directiva. El procesamiento continúa en el fichero incluido hasta que se encuentra el final del fichero. Posteriormente se reanuda el procesamiento sobre el fichero original en la línea inmediatamente posterior a la que incluía la directiva. Su formato es:
INCLUDE función.asm
Hay que tener en cuenta que si se define la misma etiqueta en el fichero fuente y en el fichero incluido se produce un error.