Continuamos describiendo el hardware
y software de los microcontroladores tomando como
base al 8085, vimos cómo es un sistema básico,
cuáles son los apoyos del µP y hasta
la fuente de alimentación, describimos las
características del software del 8085 y desde
la edición 203 comenzamos a analizar las diferentes
instrucciones que nos permitirán avanzar sobre
la construcción de programas. En este artículo
continuamos con la descripción de las instrucciones
del 8085A |
|
|
Continuamos describiendo
las funciones de las primeras instrucciones de la
tabla publicada en Saber Electrónica Nº203.
En cada una de las instrucciones que se muestran
a continuación se especificará:
- El formato de la instrucción.
- El código objeto de la misma.
- El número de bytes que emplea.
- Los ciclos necesarios para su ejecución.
- Los flags afectados al ejecutarse dicha
instrucción.
- El modo de direccionamiento empleado
en la misma.
|
|
La instrucción
RET echa fuera dos bytes de datos del stack y los
mete en el registro contador de programa. El programa
continúa entonces en la nueva dirección.
Normalmente RET se emplea conjuntamente con CALL.
- Código Objeto: C9
- Cantidad de Bytes: 1
- Ciclos de ejecución: 10
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
RIM carga los 8 bits de datos siguientes
en el acumulador:
- Código Objeto: 29
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: --
- Modos de direccionamiento: ---
SID I7.5 I6.5 I5.5 IE M7.5 M6.5 M5.5
SID = Bit presente en la entrada serie
I7.5 = Interrupción 7.5 pendiente si está
a 1
I6.5 = Interrupción 6.5 pendiente si está
a 1
I5.5 = Interrupción 5.5 pendiente si está
a 1
IE = Las interrupciones son autorizadas si es 1
M7.5 = La interrupción 7.5 está prohibida
si está a 1
M6.5 = La interrupción 6.5 está prohibida
si está a 1
M5.5 = La interrupción 5.5 está prohibida
si está a 1 |
|
|
RLC rota un bit
hacia la izquierda todo el contenido del acumulador,
transfiriendo el bit de más alto orden al
flag de acarreo y al mismo tiempo a la posición
de menor orden del acumulador
- Código Objeto: 07
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: CV
- Modos de direccionamiento: ---
|
|
La instrucción
RM comprueba el flag de signo. Si tiene un 1, indicando
dato negativo en el acumulador, la instrucción
echa dos bytes fuera del stack y los mete en el
contador de programa. Si el flag tiene 0, continúa
el programa normal con la siguiente instrucción.
- Código Objeto: F8
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
La instrucción
RNC comprueba el flag de acarreo. Si está
a 0 indicando que no hay acarreo, la instrucción
echa fuera del stack dos bytes y los carga en el
contador de programa. Si el flag está a 1
continúa el ciclo normal.
- Código Objeto: DO
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
La instrucción
RNZ comprueba el flag cero. Si está a 0,
indicando que el contenido del acumulador no es
cero, la instrucción echa fuera del stack
dos bytes y los carga en el contador de programa.
Si el flag está a 1, continúa el ciclo
normal.
- Código Objeto: CO
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
La instrucción
RP comprueba el flag signo. Si está a 0,
indicando que el contenido del acumulador es positivo,
la instrucción echa fuera del stack dos bytes
y los carga en el contador de programa. Si el flag
está a 1 continúa el ciclo normal.
- Código Objeto: FO
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
La instrucción
RPE comprueba el flag de paridad. Si está
a 1, indicando que existe paridad, la instrucción
echa fuera del stack dos bytes y los carga en el
contador de programa. Si el flag está a 0
continúa el ciclo normal. (Existe paridad
si el byte que está en el acumulador tiene
un número par de bits, colocándose
el flag de paridad a 1 en este caso).
- Código Objeto: B8
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
La instrucción
RPO comprueba el flag de paridad. Si está
a 0, indicando que no hay paridad, la instrucción
echa fuera del stack dos bytes y los carga en el
contador de programa. Si el flag está a 1,
continúa el ciclo normal.
- Código Objeto: EO
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
RRC rota el contenido
del acumulador un bit a la derecha, transfiriendo
el bit de más bajo orden a la posición
de más alto orden del acumulador, además
pone el flag de acarreo igual al bit de menor orden
del acumulador.
- Código Objeto: OF
Cantidad de Bytes: 1
Ciclos de ejecución: 4
Flags afectados: CV
Modos de direccionamiento: ---
|
|
Es una instrucción
CALL para usar con interrupciones. RST carga el
contenido del contador de programa en el stack,
para proveerse de una dirección de retorno
y salta a una de las "ocho" direcciones
determinadas previamente. Un código de tres
bits incluido en el código de operación
de la instrucción RST especifica la dirección
de salto. Esta instrucción es empleada por
los periféricos cuando intentan una interrupción.
- Código Objeto: 11XX X111
- Cantidad de Bytes: 1
- Ciclos de ejecución: 12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
La instrucción RST tiene el siguiente formato:
1 1 C C C 1 1 1
Luego según la combinación
de 0 y 1 que demos a C C C obtendremos los distintos
formatos y las distintas direcciones de las interrupciones,
que serán: |
|
FORMATO |
RST |
CONTADOR
DE PROGRAMA
|
1100 0111 |
C7 |
0000000000000000 |
0000H |
1100 1111 |
CF |
0000000000001000 |
0008H |
1101 0111 |
D7 |
0000000000010000 |
0010H |
1101 1111 |
DF |
0000000000011000 |
0018H |
1110 0111 |
E7 |
0000000000100000 |
0020H |
1110 1111 |
EF |
0000000000101000 |
0028H |
1111 0111 |
F7 |
0000000000110000 |
0030H |
1111 1111 |
FF |
0000000000111000 |
0038H |
|
|
|
La instrucción
RZ comprueba el flag de cero. Si está a 1,
indicando que el contenido del acumulador es cero,
la instrucción echa fuera del stack dos bytes
y los carga en el contador de programa. Si el flag
está a 0, continúa el ciclo normal.
- Código Objeto: C8
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
SBB reg resta
uno de los registros del A al E, el H o el L y el
flag de acarreo, del contenido del acumulador, dejando
el resultado en el acumulador.
- Código Objeto: 1001 1XXX
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: Z, S, P, CY, AC
- Modos de direccionamiento: REGISTRO
|
|
Esta instrucción
resta el flag de acarreo y el contenido de la posición
de memoria direccionada por los registros H y L,
del contenido del acumulador y deja el resultado
en el acumulador.
- Código Objeto: 9E
- Cantidad de Bytes: 1
- Ciclos de ejecución: 7
- Flags afectados: Z, S, P, CY, AC
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
SBI resta el
contenido de DATA y el flag de acarreo, del contenido
del acumulador, dejando el resultado en el acumulador.
- Código Objeto: DE YY
- Cantidad de Bytes: 2
- Ciclos de ejecución: 7
- Flags afectados: Z, S, P, CY, AC
- Modos de direccionamiento: INMEDIATO
|
|
SHLD almacena
una copia del registro L en la posición de
memoria especificada por ADDR, a continuación
almacena una copia del registro H en la siguiente
posición de memoria (ADDR+1). SHLD es una
instrucción proyectada para salvar el contenido
del par HL.
- Código Objeto: 22 PP QQ
- Cantidad de Bytes: 3
- Ciclos de ejecución: 16
- Flags afectados: --
- Modos de direccionamiento: DIRECTO
|
|
SIM es una instrucción
de usos múltiples que utiliza el contenido
del acumulador para posicionar el enmascaramiento
de interrupciones para las RST 5.5, RST 6.5, RST
7.5; pone a cero el flanco sensitivo de la entrada
RST 7.5 y saca el bit 7 del acumulador al latch
de datos de salida serie.
- Código Objeto: 30
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: ---
- Modos de direccionamiento: --
La estructura de la instrucción SIM es como
sigue:
SOD SOE X R7.5 MSE M7.5 M6.5 M5.5
SOD = Bit a presentar sobre la salida serie.
SOE = La salida serie está autorizada si
está a 1.
R7.5 = Reset de RST 7.5. Si es 1 el flip-flop se
pone a 0
MSE = Si es un 1 los enmascarados están autorizados.
M7.5 = Si es 1 la interrupción 7.5 queda
prohibida.
M6.5 = Si es 1 la interrupción 6.5 queda
prohibida.
M5.5 = Si es 1 la interrupción 5.5 queda
prohibida.
Si el bit 3 se pone a 1, la función
poner "mask" se pone enable (permitida).
Los bits 0 al 2 ponen en servicio la correspondiente
interrupción RST colocando un 0 en la interrupción
que deseamos habilitar. Si colocamos un 1 en alguno
de los bits 0 al 2, la interrupción correspondiente
no se cumplirá. Si el bit 3 tiene un 0, los
bits 0 al 2 no tienen efectos. Se debe usar esta
peculiaridad para enviar un bit de salida serie
sin afectar al enmascaramiento de las interrupciones.
(La instrucción DI anula la SIM).
Si el bit 6 (SOE) se pone a 1 se
habilita la función de salida serie. El bit
7 se sitúa en la salida SOD donde puede ser
tratado por los aparatos periféricos. Si
el bit 6 se pone a cero, el bit 7 no tendrá
efecto alguno, siendo ignorado. |
|
|
SPHL carga el contenido de los registros
H y L en el stack.
- Código Objeto: F9
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6
- Flags afectados: --
- Modos de direccionamiento: --
|
|
Almacena una
copia del contenido actual del acumulador en la
posición de memoria especificada por ADDR.
- Código Objeto: 32 PPQQ
- Cantidad de Bytes: 3
- Ciclos de ejecución: 13
- Flags afectados: --
- Modos de direccionamiento: DIRECTO
|
|
STAX RP almacena
una copia del contenido del acumulador en la posición
de memoria direccionada por el par de registros
especificados por RP (Par BC o par DE).
- Código Objeto: 000X 0010
- Cantidad de Bytes: 1
- Ciclos de ejecución: 7
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
STC pone el flag de acarreo a 1. No
afecta a otro flag.
- Código Objeto: 37
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: CY
- Modos de direccionamiento: --
|
|
El operando debe
especificar uno de los registros del A al E, el
H o el L. La instrucción resta el contenido
del registro especificado del contenido del acumulador,
usando representación de los datos en complemento
a dos. El resultado es almacenado en el acumulador.
- Código Objeto: 001 0XXX
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: Z, S, P, CY, AC
- Modos de direccionamiento: REGISTRO
|
|
La instrucción
resta el contenido de la posición de memoria
direccionada por los registros H y L del contenido
del acumulador. El resultado es almacenado en el
acumulador.
- Código Objeto: 96
- Cantidad de Bytes: 1
- Ciclos de ejecución: 7
- Flags afectados: Z, S, P, CY, AC
- Modos de direccionamiento: REGISTRO INDIRECTO
|
Sobre
bibliografía de: Ing. Celestino Benítez
Vázquez |
|