Continuamos describiendo el hardware
y software de los microprocesadores 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 en
la edición anterior 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. |
|
|
En la edición
anterior publicamos la tabla donde se pueden observar
en forma ordenada todas las instrucciones que componen
el set de trabajo del 8085A. A continuación
continuamos describiendo las funciones de las primeras
instrucciones de la tabla.
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.
|
|
|
LDA ADDR carga el acumulador con el contenido
de la memoria direccionada por ADDR. La dirección
puede ser puesta como un número, una etiqueta
previamente definida o una expresión.
|
|
|
LDAX RP carga el acumulador con una copia del
byte almacenado en la localización de memoria
direccionada por el par de registros BC o DE.
(El par BC se especifica con B y el par DE con
D).
|
|
|
LHLD ADDR carga
el registro L con una copia del byte almacenado
en la posición de memoria especificada por
ADDR. Después carga el registro H con una
copia del byte almacenado en la posición
siguiente de memoria especificada por ADDR.
La instrucción LHLD esta prevista para
cargar direcciones nuevas en los registros H y
L.
|
|
|
LXI es una instrucción
de 3 bytes; su segundo y tercer byte contienen el
dato que ha de ser cargado en el par de registros
(RP). El primer operando debe especificar el par
de registros a ser cargados, pueden ser los pares
BC, DE, HL, o el SP. El segundo operando especifica
los dos bytes a ser cargados. LXI es la única
instrucción inmediata que acepta un valor
de 16 bits. El resto trabajan con datos de 8 bits.
|
|
|
Copia el contenido
del segundo registro en el primero. Cada operando
debe especificar uno de los registros A, B, C, D,
E, H o L.
|
|
|
Copia el contenido
del registro especificado en la posición
de memoria direccionada por los registros H y L.
El segundo operando (reg) debe especificar uno de
los registros A, B, C, D, E, H o L.
|
|
|
Copia el contenido
de la posición de memoria direccionada por
los registros H y L en el registro especificado.
El primer operando debe especificar el registro
deseado como destino.
|
|
|
El primer operando
debe ser uno de los registros A,B,C,D,E,H o L, que
será cargado con el dato especificado en
el segundo operando (DATA). El dato no debe exceder
de un byte.
- Código Objeto: 00ddd110 YY
- Cantidad de Bytes: 2
- Ciclos de ejecución: 7
- Flags afectados: --
- Modos de direccionamiento: INMEDIATO
|
|
|
Esta instrucción
carga el dato especificado por DATA en la posición
de memoria direccionada por el par HL.
- Código Objeto: 36 YY
- Cantidad de Bytes: 2
- Ciclos de ejecución: 10
- Flags afectados: --
- Modos de direccionamiento: INMEDIAT./REG. INDIREC.
|
|
|
NOP no realiza
ninguna operación y no afecta a ninguno de
los flags de condición. Se emplea normalmente
para completar ciclos de lazo.
- Código Objeto: 00
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: --
- Modos de direccionamiento: ----
|
|
|
El operando debe
especificar uno de los registros del A al E, el
H o el L. Esta instrucción realiza una operación
lógica "O" entre el contenido del
registro especificado y el acumulador, dejando el
resultado en el acumulador. Los flags de acarreo
y acarreo auxiliar se ponen a cero.
- Código Objeto: 1011 OXXX
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: Z, S, P, C, Y, A, C
- Modos de direccionamiento: REGISTRO
|
|
|
Realiza una operación
"O" entre el contenido de la dirección
de memoria especificada por el par HL y el contenido
del acumulador. El resultado es almacenado en el
acumulador. Los flags de acarreo y acarreo auxiliar
son puestos a cero.
- Código Objeto: B6
- Cantidad de Bytes: 1
- Ciclos de ejecución: 7
- Flags afectados: Z, S, P, C, Y, A, C
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
|
ORI desarrolla
una operación lógica "O inclusiva"
entre el contenido especificado por DATA y el contenido
del acumulador. El resultado se deja en el acumulador.
Los flags de acarreo y acarreo auxiliar se ponen
a cero.
- Código Objeto: F6 YY
- Cantidad de Bytes: 2
- Ciclos de ejecución: 7
- Flags afectados: Z, S, P, C, Y, A, C
- Modos de direccionamiento: INMEDIATO
|
|
|
OUT PORT pone
el contenido del acumulador en el bus de datos de
8 bits del puerto seleccionado en el bus de direcciones
de 16 bits. El número de puertos oscila de
0 a 255 y es duplicado en el bus de direcciones.
Es la lógica externa la encargada de seleccionar
el puerto y aceptar el dato de salida. El operando
(PORT) debe especificar el número del puerto
de salida seleccionado.
- Código Objeto: D3YY
- Cantidad de Bytes: 2
- Ciclos de ejecución: 10
- Flags afectados: --
- Modos de direccionamiento: DIRECTO
|
|
|
PCHL carga el
contenido de los registros H y L en el contador
de programa. Como el procesador busca la siguiente
instrucción en la siguiente dirección
del contador de programa, PCHL tiene el efecto de
una instrucción de salto. El contenido de
H va a los 8 bits más altos de contador de
programa y el contenido de L va a los 8 bits más
bajos.
- Código Objeto: E9
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6
- Flags afectados: --
- Modos de direccionamiento: REGISTRO
|
|
|
POP RP copia
el contenido de la posición de memoria direccionada
por el stack pointer en el registro de bajo orden
del par de registros especificados. A continuación
se incrementa el stack pointer en 1 y copia el contenido
de la dirección resultante en el registro
de más alto orden del par. Luego se incrementa
el stack pointer otra vez de modo que se apunta
al siguiente dato del stack.
El operando debe especificar el
par de registros BC, DE, HL o PSW.
POP PSW usa el contenido de la
localización de memoria especificada por
el stack pointer para restablecer los flags de condiciones.
- Código Objeto: 11XX 0001
- Cantidad de Bytes: 1
- Ciclos de ejecución: 10
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
|
PUSH copia dos
bytes de datos en el stack. El dato puede ser el
contenido de un par de registros o la "palabra
de estado del programa". PUSH resta 1 del stack
pointer y copia el contenido del registro de "alto
orden" del par de registros en la dirección
resultante. A continuación se resta otra
vez 1 al stack pointer y se copia el registro de
bajo orden en la dirección resultante. Los
registros permanecen invariables.
- Código Objeto: 11XX 0101
- Cantidad de Bytes: 1
- Ciclos de ejecución: 12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
|
RAL hace girar
el contenido del acumulador y el flag de acarreo
un espacio de un bit hacia la salida (izquierda).
El flan de acarreo que es tratado como si fuera
del acumulador, se transfiere el bit de menor orden
del acumulador. El bit de mayor orden del acumulador
se transfiere al flag de acarreo. No tiene operandos.
- Código Objeto: 17
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: CY
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
|
RAR rota el contenido
del acumulador y del flag de acarreo 1 bit de posición
a la derecha. El flag de acarreo que es tratado
como si fuera parte del acumulador se transfiere
al bit de más alto orden del acumulador.
El bit de menor peso del acumulador se carga en
el flag de acarreo. No existen operandos en la instrucción
RAR.
- Código Objeto: 1F
- Cantidad de Bytes: 1
- Ciclos de ejecución: 4
- Flags afectados: CY
- Modos de direccionamiento: ---
|
|
|
La instrucción
RC comprueba el estado del flag de acarreo. Si tiene
un 1 (indicando que hay acarreo) la instrucción
saca dos bytes del stack y los mete en el contador
de programa. El programa continúa en la nueva
dirección suministrada.
Si el flag es 0, el programa continúa
en la siguiente instrucción de la secuencia
normal.
- Código Objeto: D8
- Cantidad de Bytes: 1
- Ciclos de ejecución: 6/12
- Flags afectados: --
- Modos de direccionamiento: REGISTRO INDIRECTO
|
|
Sobre
Bibliografía de: Ing. Celestino Benítez
Vázquez |
|