Você está na página 1de 16

Instrucciones Del HC12

|Instrucciones de carga y almacena (LOAD y STORE)

Instrucciones de carga:
Transfieren datos desde la memoria a uno de los registros internos del HC12, estas instrucciones no
afectan a la memoria ya que solo la leen sin embargo el registro destino adquiere un nuevo valor. Se
pueden leer directamente datos de 8 y de 16 bits. Las instrucciones de carga (excepto LEA_ )afectan a las
banderas N y Z para que pueda detectarse cuando el valor cargado es cero o negativo sin necesitar
instrucciones adicionales. La tabla 1 muestra el resumen de las instrucciones de carga.

TABLA 1
Las instrucciones LEA_ cargan el registro de 16bits especificado con el valor de la dirección efectiva
según el modo de direccionamiento que se indica en el programa, por ejemplo la instrucción LEAS 3,X
carga en el SP la dirección efectiva que resulta del modo de direccionamiento 3,X osea carga en el SP
IX+3 contrario a la instrucción LDS 3,X que carga en SP el valor almacenado en la dirección IX+3
(SP(H) <= M(IX+3) SP(L) <= M(IX+4))

Las instrucciones de almacenar


Estas instrucciones copian el contenido del registro indicado en la memoria. Afectan las banderas N, Z
para que se pueda detectar si el valor almacenado es negativo o cero sin requerir una instrucción de
comparación. La tabla 2 muestra un resumen de las instrucciones de almacenar.

TABLA 2
Instrucciones de transferencias e intercambios
Las instrucciones de transferencias copian el contenido de un registro a otro registro sin alterar el registro
origen, la instrucción TFR (Transfiere Registro) es universal pero se aceptan otros mnemónicos por
compatibilidad tales como TAB TAP etc.
Las instrucciones de intercambios intercambian el contenido de los acumuladores o de un par de registros,
la tabla 3 presenta un resumen de las instrucciones de intercambios y transferencias.
Instrucciones Del HC12
Instrucciones de Intercambio

Instrucciones de Transferencia

TABLA 3
Ni las instrucciones de intercambio ni de transferencia afectan a la memoria estas últimas si afectan a las
banderas N y Z.

Instruccion SEX
Transfiere el contenido de uno de los acumuladores A, B o CCR a cualquiera de los registros de 16bits D,
IX, IY o SP realizando la extensión del signo o sea los ocho bits mas significativos se igualan al bit mas
significativo de cualquiera de los dos acumuladores o del CCR, por ejemplo si A = $85 y se ejecuta la
instrucción SEX A,D el valor final en D será $FF85 si por el contrario A hubiese sido $7F entonces el
resultado en D hubiese sido $007F. La tabla 4 muestra el resumen de la instrucción SEX.

TABLA 4
Instrucción “MOVE”
Estas instrucciones mueven bytes o palabras de una posición de memoria origen (M1, (M : M+1)1) a una
posición de memoria destino (M2, (M : M+1)2), las direcciones del origen y del destino pueden
especificarse en cualquiera de los modos de direccionamientos revisados anteriormente exceptuando que
el destino no puede ser inmediato las siguientes son las combinaciones posibles:
(IMM EXT, IMM  IDX, EXT  EXT, EXT  IDX, IDX  EXT, IDX  IDX) la tabla 5 resume
las instrucciones MOV
Instrucciones Del HC12

TABLA 5
IMM => EXT es de inmediato a extendido osea un valor fijo a una dirección de 16bits.
Ejemplo: movb #$ff,$400 ; copia $ff en la dirección $400.
IMM => IDX de inmediato a indexado osea de un valor fijo a una dirección indexada
Ejemplo: ldx #$410
movw #$b6, 4,x ;Escribe #$00b6 en la dirección $414
movb #$b4, 4,-x ;Escribe #$b4 en la dirección $40c IX cambia a $40c
movb #$b5, 4,x- ;Escribe #$b5 en la dirección $410 IX cambia a $40c
;Tambien puede ser x+ o +x la constante solo puede variar entre 1 y 8
EXT => EXT de extendido a extendido para un byte o word desde una dirección de 16bits a otra
dirección de 16bits.
Ejemplo: movb #$a8,$400 ;Escribe $a8 en la dirección $400
movb $400,$410 ;Copia M($400) en la dirección $410
EXT => IDX de extendido a indexado para un byte o word desde una dirección de 16b a otra
dirección especificada en base a indexado.
Ejemplo: ldx #$410
movw #$1f8,$410
movw $410,4,+x
Instrucciones Del HC12
Instrucciones de suma y resta
La suma y la resta de números con o sin signo de 8 o de 16bits puede ser realizada usando las
instrucciones de suma y resta. La operación puede hacer la suma o resta de datos en los
registros internos o suma y resta de datos de memoria y los registros internos de HC12.
Operaciones especiales de suma y resta incluyen al bit C del CCR para posibilitar operaciones
con múltiples bytes de precisión. La tabla 6 resumen las operaciones de suma y de resta del
HC12.

TABLA 6
Las instrucciones ABY (Y = B+Y) y ABX (X = B+X) se considera que el valor de B representa un
número de 8 bits sin signo.

Instrucciones BCD
Para sumar números BCD solo hay que realizar la operación con instrucciones que manejen el
acarreo medio ‘H’ y utilizar luego la instrucción DAA que ajusta el resultado de binario a BCD. La
tabla 6a presenta un resumen de las instrucciones que pueden usarse para suma BCD

TABLA 6a
Por ejemplo si A = $45 y B = $29 el resultado de ABA arroja que A = 6E pero ejecutar
Instrucciones Del HC12
posteriormente la instrucción DAA produce que A cambie a $74 que es el resultado de sumar 45
+ 29 asumiendo BCD.

Instrucciones de incremento y decremento


Las instrucciones incremento y decremento son sumas y restas optimizadas para aplicarlas a
variables que hacen de contadores en las estructuras de programa cíclicas. Estas instrucciones
afectan las banderas N, Z y V, no afecta ‘C’ por lo que cuando se trata de números sin signo solo
las instrucciones BEQ, BNE, LBEQ y LBNE se pueden usar, para números con signo todas las
ramificaciones signadas pueden usarse. La tabla 7 presenta el resumen de las instrucciones.

TABLA 7

Instrucciones de comparación y prueba


Estas instrucciones realizan la resta de valores entre los registros o entre registros y memoria
pero en vez de almacenar el resultado en el registro destino, este se refleja en el estado de las
banderas del registro CCR. Estas instrucciones son usualmente utilizadas en preparación de una
instrucción re ramificación o salto condicionado para implantar una de las estructuras de
programación conocidas. Tome en cuenta que la mayoría de las instrucciones establecen los bits
del registro CCR así que usualmente no es necesario incluir una instrucción de comparación
adicional. La tabla 8 resume las instrucciones de comparación y prueba.
Instrucciones Del HC12

TABLA 8
Instrucciones lógicas
Estas instrucciones realizan las operaciones del algebra booleana entre uno de los
acumuladores de ocho bit y un dato en la memoria o entre el registro CCR y la memoria. Solo se
pueden realizar las operaciones AND, OR y XOR. La tabla 9 presenta el resumen de estas
instrucciones

TABLA 9
La operación lógica se realiza bit a bit cada bit del acumulador se opera contra el bit
correspondiente de la memoria por ejemplo si A = $F5 y M = $0F entonces la instrucción ANDA
produce A= $05 mientras que ORAA resulta A = $FF y EORA produce A = $FA

Instrucciones de complementar, negar y borrar


Cada una realiza una operación específica sobre el operando ya sea este un registro o una
posición de memoria. Complementa cambia el valor en el operando por el complemento a 1
del valor original, mientras que negar cambia su valor por el complemento a dos finalmente
borrar pone todos los bits en cero. La tabla 10 resume las instrucciones.
Instrucciones Del HC12

TABLA 10
Instrucciones de multiplicación y división
La multiplicación se aplica a números enteros de 8 y 16 bits con signo o sin signo, cuando se
multiplican dos números de 8 bits el resultado es un entero de 16bits, cuando se multiplican dos
números de 16 bits el resultado es un entero de 32bits.

La división entera o fraccionaria de 16bits involucra dividendo, divisor, cociente y residuo de


16bits, mientras que la división extendida usa dividendo de 32bits junto con un divisor de 16 bits
para producir un cociente de 16bits y un residuo de 16bits. La tabla 11 presenta las instrucciones
de multiplicación y división

TABLA 11
Instrucciones Del HC12
La división fraccionaria
Implica un dividendo menor que el divisor, mientras que una división entera implica un dividendo
mayor o igual al divisor.

Desbordamiento y División entre cero


La división fraccionaria produce desbordamiento (V = 1) cuando el dividendo es igual o mayor
que el divisor. La división entera con signo produce desbordamiento (V = 1) cuando se divide
entre 0 (lo que es ilegal) o cuando se divide -32768/(-1) = $8000/$FFFF = 32768, el valor mayor
con positivo de 16 bits es 32767 por lo que el resultado desbordó.
La división entre cero no cambia los valores en D y X, produce C = 1 mientras deja Z, N y V del
CCR indeterminados.

Signo
En la división con signo el signo del cociente es de acuerdo a las reglas de la división algebraica
(signos iguales => positivo; signos diferentes => negativo) el signo del residuo es igual al signo
del dividendo.

Instrucciones de manipulación y prueba de bits


Estas instrucciones utilizan una máscara para probar o cambiar los bits en una memoria o
acumulador. Las instrucciones BITA y BITB proporcionan una modo conveniente para detectar el
estado de bits sin alterar ninguno de los dos operando. La tabla 12 resume las instrucciones.

TABLA 12
En la tabla ‘mm’ representa la máscara, el ‘•’ indica la operación lógica AND y + representa la
operación lógica OR. La máscara ‘mm’ no es mas que un valor de 8bits que señalan con 1 los
bits de interés, de tal forma que si mm = #$80 entonces el bit en cuestión es el b7, mientras que
si mm = #$01 el bit en cuestión es el b0, mm se puede referir a mas de un bit por ejemplo la
instrucción BCLR M,#$81 produce el borrado de los bits b7 y b0 de la memoria.

Instrucciones de traslación y de rotación


Existen instrucciones de traslación y de rotación para todos los acumuladores y para los bytes de
memoria. Todas estas instrucciones hacen que el bit que sale como resultado de la traslación
pase a la bandera C del CCR esto permite que la traslación o la rotación pueda hacerse con
datos de múltiples bytes. Cuando la traslación es hacia la derecha existe diferencia entre hacer
una traslación lógica ‘LSR’ y una traslación aritmética ‘ASR’, cuando la traslación es hacia la
izquierda no existe tal diferencia por eso es que no existe una ASL y solo existe una LSL. La tabla
13 presenta el detalle de las instrucciones de traslación y rotación
Instrucciones Del HC12

TABLA 13
Instrucciones de ramificación
Las instrucciones de ramificación producen que la ejecución de instrucciones se mude a una
diferente secuencia en caso tal que se cumpla la condición especificada. El HC12 respalda tres
tipo de instrucciones de ramificación: las ramificaciones cercanas las lejanas y las condicionadas
Instrucciones Del HC12
a bits.
Las instrucciones de ramificación pueden ser clasificadas también de acuerdo al tipo de
condición que debe cumplirse para que se ejecuten, algunas instrucciones entran en mas de una
clasificación
 Ramificaciones unitarias son las que siempre se ejecutan.
 Ramificaciones de condiciones simples solo dependen de un bit específico del CCR cuyo
estado fue definido por la ejecución de una instrucción precedente.
 Ramificaciones sin signo son las que la condición resulta por la comparación de números
sin signo que resulta en el establecimiento o borrado de los bits Z y C en el CCR.
 Ramificaciones con signo son las que la condición resulta por la comparación de
números con signo que resulta en el establecimiento o borrado de los bits N, Z y V del
CCR.
Ramificaciones cercanas
Son instrucciones que operan así: cuando la condición especificada se cumple un número con
signo de 8bits se le suma al PC y así la ejecución continua a partir de esta nueva posición. El
alcance de la bifurcación se limita a 127 ($7F) posiciones en avance y 128 ($80) en retroceso. La
tabla 14 es resume las instrucciones de ramificación corta.

TABLA 14
Ramificaciones lejanas
Instrucciones Del HC12
Estas instrucciones operan de manera similar a las lejanas la única diferencia es que el
desplazamiento puede ser un número de 16 bits lo que involucra que el destino de la ramificación
puede estar 32767 posiciones adelante ó 32768 posiciones hacia atrás. Este tipo de ramificación
es útil cuando el destino final reside muy alejado del punto donde se realiza la comparación, la
tabla 15 presenta un resumen de las instrucciones de ramificación lejana.

TABLA 15

Instrucciones de salto basadas en condiciones de bits


Estas ramificaciones se ejecutan basadas en el estado que tengan ciertos bits en un byte de
memoria. El operando máscara es usado para determinar cuales son los bits a detectar. Si todos
los bits en esa ubicación que corresponden con la máscara son unos (BRSET) o ceros (BRCLR),
la ramificación se ejecuta.
El rango de esta instrucción es de 8 bits por lo que el desplazamiento puede ser de hasta 127
($7F) hacia adelante o de 128 ($80) hacia atrás desde el punto de partida.
La tabla 16 presenta el resumen de estas instrucciones:
Instrucciones Del HC12

TABLA 16
En este cuadro el punto en la columna Equation or Operation representa la operación AND que
se usa para determinar la condición que define si la ramificación se ejecuta o no.

Instrucciones de final de bucles


Estas instrucciones asumen que cualquiera de los registros (A, B, D, X, Y o SP) se utiliza como
contador que lleva el control de la cantidad de veces que se ejecuta un bucle. decrementando o
incrementando uno de los contadores y detectando cuando estos son iguales o diferentes de
cero y ejecutando una bifurcación en base al resultado. El rango de la ramificación está limitado a
8 bits por lo que va desde 127 ($7F) hacia adelante o 128 ($80) en reversa. La tabla 17 presenta
el listado de estas instrucciones

TABLA 17
Instrucciones de y de salto a subrutinas
Estas instrucciones producen un cambio en la secuencia de instrucciones que se estén
ejecutando. Cuando esta instrucción se ejecuta se carga en el PC la dirección absoluta de la
nueva ubicación de la secuencia de instrucciones la cual puede estar establecida en cualquier
dirección dentro del rango de 64K que constituye el mapa de memoria del HC12. La dirección
absoluta puede ser obtenida de forma explícita como un número de 16 bits o a través de
cualquier de los modos de direccionamiento ya estudiados.
Las subrutinas son mecanismos optimizados para transferir la ejecución de la secuencia a un
grupo de instrucciones que poseen un fin determinado. Existen diferentes formas de invocar una
subrutina:
 Usando una ramificación cercana (BSR) máximo 127 posiciones adelante o 128
Instrucciones Del HC12
posiciones en reversa.
 Por medio de un salto absoluto (JSR) dentro del mapa de memoria de 64K o
 Usando un salto expandido (CALL) a cualquier dirección dentro del mapa de memoria de
16Mbytes del HC12
Cuando se ejecuta una de estas instrucciones la dirección de retorno (PC) se deposita en la
pila antes de cargar en el PC la dirección de la subrutina. Las subrutinas que están dentro del
mapa de memoria de 64K (BSR y JSR) son finalizadas con la instrucción RTS la cual saca de
la pila el valor del PC así la ejecución normal de la secuencia continúa después de la
instrucción BSR o JSR. Cuando se usa JSR la dirección de la subrutina puede ser
especificada usando cualquier de los modos de direccionamiento estudiados. BSR solo
especifica el modo relativo.
La instrucción de CALL se utiliza cuando la subrutina se encuentra fuera del mapa de
memoria de 64K. CALL mete en la pila el valor del registro PPAGE y el PC que constituye la
dirección de retorno completa (24bits), la dirección de la subrutina puede ser especificada
usando cualquier de los modos de direccionamiento en este caso el valor de la página es un
operando inmediato para todos los modos excepto para los indexados indirectos en estos
modos el operando apunta a una posición de memoria donde el valor de PPAGE y la
dirección de la nueva subrutina residen. Para terminar una subrutina invocada con CALL se
usa la instrucción RTC en vez de la RTS, la RTC saca de la pila el valor del PPAGE y del PC
retornando para ejecutar la siguiente instrucción después del CALL. Si se usa RTS en vez
solo se saca de la pila el PC la cual sería la dirección incorrecta. CALL y RTC constituyen un
par que implementan las llamadas a subrutinas en direcciones expandidas. La tabla 18
resume las instrucciones

TABLA 18
Instrucciones Del HC12
Instrucciones de interrupción
Las instrucciones de interrupción entregan la secuencia de control a una subrutina que
realiza una operación que es crítica para el sistema. Las subrutinas de interrupción son
usualmente llamadas Excepciones.
SWI (software interrupts) inicia el procesamiento sincrónico de una excepción apilando
primero la dirección de retorno en el PC y luego el contexto del programa en ejecución (todos
los registros incluyendo el CCR) a continuación la ejecución de la excepción a partir de la
dirección en el vector SWI.
La ejecución de SWI produce una interrupción sin que haya una solicitud de interrupción por
lo que esta no puede ser inhibida por las máscaras ‘I’ ni ‘X’ del CCR. La ejecución de SWI
establece la máscara ‘I’ del CCR inhibiendo futuras solicitudes de interrupción. La máscara ‘I’
usualmente se borra cuando a través de la ejecución de la instrucción RTI al final de la
excepción restablece el valor original del CCR incluyendo la máscara ‘I’.
La instrucción RTI es usada para terminar todas las excepciones incluyendo las rutinas que
dan servicio a la interrupción. RTI primero recupera el CCR, D, X, Y y luego la dirección de
retorno de la pila, si no hay otra interrupción pendiente entonces la ejecución de la secuencia
normal después de la instrucción SWI o desde donde se presentó la petición de interrupción
continúa.
El núcleo del HC12 utiliza interrupciones de software para atrapar la ejecución de opcódigos
que no han sido implementadas existen opcódigos en todos los 256bytes de la página 1 pero
solo 54 en la página 2 si por alguna falla el CPU trata de ejecutar alguna instrucción que no
ha sido implementada entonces ocurre una interrupción tipo TRAP. La tabla 19 resume las
instrucciones de interrupción

TABLA 19
Instrucciones de pila
Se usan para depositar datos en la pila o para extraer datos de la pila, PSH_ deposita el
registro en la pila pre-modificando automáticamente el registro SP. PUL_ recupera el registro
de la pila con la pos-modificación del SP. La pila trabaja como una estructura de memoria
LIFO por lo que el último dato en depositarse es el primero que debe recuperarse. La tabla 20
las muestra
Instrucciones Del HC12

TABLA 20
Instrucciones del CCR
La tabla 21 presenta las instrucciones que pueden modificar las banderas del CCR de
manera directa

TABLA 21
Instrucciones STOP y WAIT
Estas instrucciones pueden poner al microprocesador en un estado de hibernación en el cual
el consumo de energía se reduce.
La instrucción de STOP mete en la pila la dirección de retorno y el contenido de todos los
registros y acumuladores y luego detiene todos los relojes.
WAIT mete en la pila la dirección de retorno y el contenido de todos los registros y
acumuladores no obstante los relojes no se detienen
Tanto STOP como WAIT requieren una excepción para salir de hibernación. La tabla 22
muestra estas instrucciones.
Instrucciones Del HC12

TABLA 22