0000
0300
0306
B6 00
-------
-------------------- ----------
--
[1]
[2]
EQU, es la forma abreviada de 'equale' (igual), se usa para dar un nombre a una posición de memoria
específica o a número binario, que puede usarse en otras instrucciones del programa. En este caso, la directiva
EQU se usa para asignar el nombre PORTA al valor $00 que es la dirección del registro del puerto A en el
MC68HC705J1A. Es más fácil para un programador recordar el nombre mnemónico PORTA en lugar del
anónimo valor numérico $00. Cuando el ensamblador encuentra uno de éstos nombres, el nombre se reemplaza
automáticamente por su correspondiente valor binario, de la misma manera por la que se reemplazan las
instrucciones mnemónicas por instrucciones de códigos binarios.
La segunda línea mostrada en la
forma abreviada de 'originate' (origen), le dice al ensamblador donde empezará el programa (la dirección origen
de la primera instrucción que sigue a la línea directiva ORG). ORG más que como una directiva, se puede usar
en un programa para decirle al ensamblador donde poner partes diferentes del programa, en lugares específicos
de la memoria. Referirse al mapa de memoria de la MCU para seleccionar una posición de memoria apropiada,
de donde se debe empezar un programa.
En el listado ensamblador, los dos primeros campos [1] y [2], son generados por el ensamblador y los
cuatro siguientes campos [3], [4], [5] y [6], son originales del programa fuente escrito por el programador. En el
campo [3] es una etiqueta (TOP) qué puede enviarse a otras instrucciones. En el programa ejemplo, la última
instrucción es BRA TOP, que simplemente significa que la CPU continuará la ejecución con la instrucción que
se etiqueta TOP.
Cuando el programador está escribiendo un programa, las direcciones donde se localizarán las
instrucciones típicamente no se conocen. Pero todavía es peor, en instrucciones de bifurcación, en lugar de usar
la dirección de un destino, la CPU usa un desplazamiento (diferencia entre el valor actual y la dirección de
destino). Afortunadamente, el programador no tiene que preocuparse por estos problemas porque el ensamblador
cuida de estos detalles a través de un sistema de etiquetas. Este sistema de etiquetas es una buena manera para
que el programador pueda identificar puntos específicos en el programa (sin conocer sus direcciones exactas); el
ensamblador puede convertir después estas etiquetas mnemónicas en direcciones de memoria específicas e
incluso calcular los desplazamientos para las instrucciones de bifurcación para que la CPU pueda usarlos.
El campo [4], es el campo de la instrucción. El código mnemotécnico LDA es la forma abreviada 'load
accumulator' (cargar el acumulador). Ya que hay seis variaciones (opcodes diferentes) de la instrucción LDA, se
requiere la información adicional, antes de que el ensamblador pueda escoger el 'opcode' binario correcto para
que la CPU lo use durante la ejecución del programa.
El campo [5], es el campo del operando y proporciona información sobre la posición específica de la
memoria o el valor que va a ser procesado por la instrucción. El ensamblador usa el código mnemotécnico de la
instrucción y el operando especificado en el programa fuente, para determinar el 'opcode' específico para la
instrucción.
Hay diferentes modos de especificar como va ha ser procesado el valor, son los llamados modos de
direccionamiento. (Una descripción más completa de los modos de direccionamiento fueron presentados en
Modos de Direccionamiento ). La sintaxis del campo del operando es ligeramente diferente para cada modo de
direccionamiento, para que el ensamblador pueda determinar el modo de direccionamiento correcto deseado de
la sintaxis del operando. En este caso, el operando [5] es PORTA, que el ensamblador automáticamente lo ha
convertido en $00 (llamada a la directiva EQU). El ensamblador interpreta $00 como un modo de
direccionamiento directo entre $0000 y $00FF, seleccionando así el 'opcode' $B6, que es el modo de
direccionamiento directo, variación de la instrucción LDA. Si PORTA se hubiera precedido por un símbolo #, la
sintaxis habría sido interpretada por el ensamblador como un valor del modo de direccionamiento inmediato y se
habría escogido el 'opcode' $A6 en lugar de $B6.
PORTA EQU
$00
ORG
TOP
LDA
---------- --------------------- -------------------------------------------------
[3]
[4]
Figura 33. Explicación del Listado Ensamblador
Figura 33
;Dirección directa del puerto A
$0300
;El Programa empezará en $0300
PORTA
;Lee pulsador en LSB del Puerto A
[5]
es otra directiva del ensamblador. El mnemónico ORG,
72
[6] →