A1
Apndice A1
Conjunto de instrucciones del 8085
A1.1.
Introducci
n
Aunque el conjunto de instrucciones puede encontrarse en cualquier libro que trate este
tema especficamente, en este apartado se muestra un "diccionario" de las mismas. La
descripcin se lista funcionalmente para una localizacin ms inmediata y todas estn
descritas de forma detallada.
Si desea hacer una bsqueda alfabtica de las instrucciones puede usar la ayuda
incorporada en el programa simulador.
A1.2.
1
0 para STC1 para CMC
A1.2.1.
CM
C
Complementar
acarreo
Instruccin
Bits afectados
Direccionamie
nto
CM
C
CY
Descripcin
A1.2.2.
STC
Activar
acarreo
Instruccin
Bits afectados
Direccionamie
STC
CY
nto
Descripcin
A1.3.
Instrucciones de un
registro
A1.3.1.
IN
R
Incrementar registro o
memoria
Instruccin
Bits afectados
Direccionamie
nto
INR reg
Z, S, P, AC
Registro
indirecto
Descripcin
0 0 REGISTRO 1 0
Ejemplo
A1.3.2.
DC
R
Decrementa registro o
memoria
Instruccin
Bits afectados
Direccionamie
nto
DCR reg
Z, S, P,
AC
Registro
Descripcin
0 0 REGISTRO 1 0
Ejemplo
CM
A
Complementar acumulador
Instruccin
CM
A
Bits afectados
Direccionamie
nto
Descripcin
Cada uno de los bits del acumulador se complementa (operacin denominada a uno).
Formato
A1.3.4.
DAA
Instruccin
Bits afectados
Direccionamie
nto
DAA
Z, S, P, CY,
AC
Registro
Descripcin
Nota
Ejemplo
Supongamos que queremos realizar una suma decimal de dos nmeros (40 + 80).
Ambos bits de acarreo estn a cero.
La secuencia de instrucciones podra ser:
(1).MVI B,80H
(2).MVI A,40H
; Acumulador = 40H
(3).ADD B
(4).DAA
; Acumulador = 20H
; Bit de acarreo = 1
Acumulador
+6
Nuevo
acumulador
C0
H
60
H
20
H
1 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0
0 0 1 0 0 0 0 0
CY = 0
CY = 0
CY = 1
A1.4.
Instruccin
NOP
Instruccin
Bits afectados
Direccionamie
nto
Descripcin
NO
P
10
Formato
A1.5.
Instrucciones de transferencia de
datos
A1.5.1.
MOV
Movimiento
Instruccin
Bits afectados
Direccionamie
nto
11
Registro o registro
indirecto
Descripcin
(B).
(C).
(A).
MOV R1, R2
El contenido del registro R2 es transferido al registro R1. R1 y R2 pueden
ser los registros B, C, D, E, H, L o el acumulador A.
(B).
MOV R, M
El contenido de la direccin de memoria, cuya direccin est en los
registros H-L, es transferido al registro R. R puede ser cualquiera de los
registros A, B, C, D, E, H o L.
(C).
MOV M, R
El contenido del registro R es transferido a la direccin de memoria
indicada por los registros H-L.
12
Formato
1 Registro Registro
000 para registro B001
para registro C010 para
registro D011 para
registro E100 para
registro H101 para
registro L110 para
MEMORIA111 para
ACUMULADOR
Ejemplos
A1.5.2.
STAX
STAX rp
Registro
nto
13
indirecto
Descripcin
0
Par de registros pr (BD
o DE)
Ejemplo
A1.5.3.
LDAX
Cargar el
acumulador
Instruccin
Bits afectados
Direccionamie
nto
LDAX rp
Registro
indirecto
Descripcin
14
Formato
0
Par de registros pr (BD
o DE)
Ejemplo
A1.6.
15
A continuacin vamos a ver las instrucciones que operan con el contenido del
acumulador y el de uno de los registros o posicin de memoria. Estas instrucciones
ocupan un byte en la forma siguiente:
OPERACI
N
REGISTR
O
000 para registro
B001 para
registro C010
para registro
D011 para
registro E100
para registro
H101 para
registro L110
para
MEMORIA111
para
ACUMULADOR
A1.6.1.
ADD
16
acumulador
Instruccin
Bits afectados
Direccionamie
nto
ADD reg
Z, S, P, CY,
AC
Registro
Descripcin
REGISTR
O
Ejemplos
Nuevo
acumulador
3A
H
6C
H
A6
H
0 0 1 1 1 0 1 0
0 1 1 0 1 1 0 0
1 0 1 0 0 1 1 0
17
2. La instruccin
ADD A
duplica el contenido del acumulador.
A1.6.2.
AD
C
ADC reg
Z, S, P, CY, AC
Registro
indirecto
Descripcin
REGISTR
O
Ejemplo
18
Registro B
Acumulador
30
H
76
H
0 0 1 1 0 0 0 0
0 1 1 1 0 1 1 0
Bit de
acarreo
Nuevo
acumulador
A6
H
1 0 1 0 0 1 1 0
El nuevo contenido del acumulador ser A6H, mientras que todos los bits de
condicin quedarn puestos a cero excepto los de signo y paridad.
Si el bit de acarreo hubiera sido 1 antes de realizar la operacin, hubiera tenido
lugar la siguiente suma:
Registro B
Acumulador
30
H
76
H
0 0 1 1 0 0 0 0
0 1 1 1 0 1 1 0
Bit de
acarreo
Nuevo
acumulador
A7
H
1 0 1 0 0 1 1 1
A1.6.3.
SUB
SUB reg
Z, S, P, CY,
AC
Registro
19
Descripcin
REGISTR
O
Ejemplos
60H
+
(28H)
0 1 1 0 0 0 0 0
1 1 0 1 0 1 1 1
1
0 0 1 1 1 0 0 0
38H
20
2. La instruccin
SUB A
restar al acumulador a s mismo, obtenindose un resultado de cero. Se utiliza
en muchas ocasiones para poner a cero el bit de acarreo y el acumulador.
A1.6.4.
SBB
SBB reg
Z, S, P, CY, AC
Registro
indirecto
Descripcin
El valor del bit de acarreo se suma internamente al contenido del registro o posicin de
memoria especificados. Este valor se resta del acumulador usando aritmtica de
complemento a dos.
Esta instruccin es de gran utilidad en la realizacin de restas de varios bytes,
pues tiene en cuenta el valor positivo o negativo de la sustraccin anterior.
Formato
REGISTR
O
21
Ejemplo
Nuevo
acumulador
05
H
F7
H
FCH
0 0 0 0 0 1 0 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 0 0
4. No hay acarreo al final por lo que el bit de acarreo se queda a uno. Los bits de
signo y paridad estn puestos a uno mientras que es bit de cero est a cero.
A1.6.5.
ANA
ANA reg
Z, S, P, CY, AC
Registro
indirecto
Descripcin
Se realiza la funcin lgica AND bit a bit entre el contenido del registro o posicin de
memoria especificados y el contenido del acumulador. El bit de acarreo se pone a cero.
22
Formato
REGISTR
O
Nota
B
0
1
0
1
R
0
0
0
1
Ejemplo
Nuevo
acumulador
A1.6.6.
XR
A
3A
H
6C
H
0 0 1 1 1 0 1 0
0 1 1 0 1 1 0 0
28
H
0 0 1 0 1 0 0 0
XRA reg
Bits afectados
Direccionamie
nto
23
Z, S, P, CY,
AC
Registro
Descripcin
Se realiza la funcin lgica O-EXCLUSIVO bit a bit entre el contenido del registro o
posicin de memoria especificados y el contenido del acumulador, guardndose el
resultado en este ltimo.
Formato
REGISTR
O
Nota
B
0
1
0
1
R
0
1
1
0
Ejemplos
3A
0 0 1 1 1 0 1 0
24
Registro B
Nuevo
acumulador
H
6C
H
0 1 1 0 1 1 0 0
56
H
0 1 0 1 0 1 1 0
A1.6.7.
OR
A
Descripcin
ORA reg
Z, S, P, CY, AC
Registro
indirecto
25
Se realiza la funcin lgica AND bit a bit entre el contenido del registro o posicin de
memoria especificados y el contenido del acumulador, quedando en este ltimo el
resultado. El bit de acarreo se pone a cero.
Formato
REGISTR
O
Nota
B
0
1
0
1
R
0
1
1
1
Ejemplo
Como sea que la funcin OR de cualquier bit con un uno da como resultado uno, y de
cualquier bit con cero, lo deja invariable, esta funcin se utiliza frecuentemente para
poner a uno grupos de bits.
Si el registro B contiene OFH y el acumulador almacena 33H, la instruccin
ORA B
realiza la siguiente operacin:
Acumulador
Registro B
Acumulador
33
H
0F
H
0 0 1 1 0 0 1 1
3F
0 0 1 1 1 1 1 1
0 0 0 0 1 1 1 1
26
H
Este ejemplo concreto garantiza que los cuatro bits de menos peso del
acumulador son unos, mientras que los dems permanecen invariables.
A1.6.8.
CM
P
CMP reg
Z, S, P, CY, AC
Registro
indirecto
Descripcin
REGISTR
O
27
Ejemplos
0A
H
5
H
0 0 0 0 1 0 1 0
05
H
0 0 0 0 0 1 0 1
1 1 1 1 1 0 1 1
02
H
5
H
0 0 0 0 0 0 1 0
FD
H
1 1 1 1 1 1 0 1
1 1 1 1 1 0 1 1
En este el bit de acarreo se pone a uno (no existe acarreo del bit 7) y el bit de
cero estar a cero, indicando que el contenido del registro B es mayor que el
acumulador.
28
1B
H
5H
1 1 1 0 0 1 0 1
E0
H
1 1 1 0 0 0 0 0
1 1 1 1 1 0 1 1
Aqu el bit de acarreo est a cero. Como los dos nmeros difieren en signo, el
hecho de que el bit de acarreo est a cero indica que el contenido del registro B
es mayor que el del acumulador, al contrario de cmo ocurra en el ejemplo
anterior.
A1.7.
A continuacin se describen las instrucciones que provocan una rotacin del contenido
del acumulador. Esta operacin nicamente puede realizarse con el acumulador, no con
ningn registro o posicin de memoria.
OPERA
C
29
A1.7.1.
RLC
Desplazar el acumulador a la
izquierda
Instruccin
Bits afectados
Direccionamie
nto
RLC
CY
Descripcin
RLC rota un bit hacia la izquierda todo el contenido del acumulador, transfiriendo el bit
de ms alto orden al bit de acarreo y al mismo tiempo a la posicin de menor orden del
acumulador.
Formato
Ejemplo
Bit de acarreo
Acumulador
30
A1.7.2.
RRC
RRC
CY
Descripcin
Ejemplo
Acumulador
acarreo
Bit de
A1.7.3.
RA
L
31
RAL
CY
Descripcin
RAL hace girar el contenido del acumulador y el bit de acarreo un espacio de un bit
hacia la salida (izquierda). El bit 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 bit de acarreo. No tiene operandos.
Formato
Ejemplo
Bit de acarreo
Acumulador
32
A1.7.4.
RA
R
RAR
CY
Descripcin
RAR rota el contenido del acumulador y del bit de acarreo 1 bit de posicin a la
derecha. El bit de acarreo que es tratado como si fuera parte del acumulador se
transfiere al bit de ms alto orden del acumulador. El bit de menor peso del acumulador
se carga en el bit de acarreo. No existen operandos en la instruccin RAR.
Formato
Ejemplo
En este caso el acumulador contendr el valor 6AH. La instruccin RAL efectuar las
siguientes modificaciones en el registro acumulador y en el bit de acarreo:
Acumulador
acarreo
Bit de
A1.8.
33
A continuacin se describen las instrucciones que dan lugar a operaciones con pares de
registros.
A1.8.1.
PUS
H
Instruccin
Bits afectados
Direccionamie
nto
Descripcin
PUSH pr
Registro
indirecto
34
signo
cero
arrrast
re
auxilia
r
parida
d
acarreo
Sea cual sea el par de registros especificado, una vez que los datos se han
guardado, el puntero de pila se decrementa en dos unidades.
Formato
pr
B, D, H o
PSW
1
00 para registros B y
C01 para registros D y
E10 para registros H y
L11 para bits de
condicin y reg. A
Ejemplos
35
Registro C
16
MEMORIA
00
00
00
00
DIRECCION
2027
2028
2029
2030
Despus de PUSH
Puntero
stack
2028
Registro B
3F
Registro C
16
MEMORIA
00
16
3F
00
DIRECCION
2027
2028
2029
2030
36
A1.8.2.
PO
P
Instruccin
Bits afectados
Direccionamie
nto
POP pr
Registro
indirecto
Descripcin
pr
B, D, H o
PSW
1
00 para registros B y
C01 para registros D y
E10 para registros H y
L11 para bits de
condicin y reg. A
Ejemplos
37
POP B
Carga el registro C con el valor de 16H de la posicin de memoria 2028H, carga
el registro B con el valor 3FH de la posicin 2029H, e incrementa dos unidades
el puntero de stack, dejndolo en 2030H. Grficamente podemos ver este
proceso:
Despus de POP
Antes de POP
Puntero
stack
2030
Puntero
stack
2028
Registro B
00
Registro C
00
Registro B
3F
Registro C
16
MEMORIA
00
16
3F
00
DIRECCION
2027
2028
2029
2030
MEMORIA
00
16
3F
00
DIRECCION
2027
2028
2029
2030
16h =
A1.8.3.
DAD
S
0
Z
0
AC
1
P
1
CY
0
Suma doble
Instruccin
Bits afectados
Direccionamie
nto
DAD pr
CY
Registr
o
38
Descripcin
pr
1
00 para registros B y C01
para registros D y E10
para registros H y L11
para registros de puntero
de pila
B, D, H o SP
Ejemplos
339F
A17B
HL
051A
39
2. Al ejecutar la instruccin
DAD H
se duplica el valor del nmero de 16 bits contenido en H L (equivale a
desplazar los 16 bits una posicin hacia la izquierda).
A1.8.4.
IN
X
Incrementar par de
registros
Instruccin
Bits afectados
Direccionamie
nto
INX pr
Registr
o
Descripcin
pr
B, D, H o SP
1
00 para registros B y C01
para registros D y E10
para registros H y L11
para registros de puntero
de pila
Ejemplos
40
INX H
hace que el registro H contenga 30H y el registro L el valor 01H.
2. Si el puntero de pila contiene FFFFH, la instruccin
INX SP
hace que ste contenga 0000H.
A1.8.5.
DC
X
Decrementar par de
registros
Instruccin
Bits afectados
Direccionamie
nto
DCR pr
Registr
o
Descripcin
pr
B, D, H o SP
Ejemplo
1
00 para registros B y C01
para registros D y E10
para registros H y L11
para registros de puntero
de pila
41
XCHG
XCHG
Registr
o
Descripcin
Ejemplo
A1.8.7.
E
04
XTHL
H
01
L
02
E
02
H
03
L
04
42
Instruccin
Bits afectados
Direccionamie
nto
XTHL
Registro
indirecto
Descripcin
XTHL cambia los dos bytes de la posicin ms alta del stack con los dos bytes
almacenados en los registros H y L. As XTHL salva el contenido actual del par HL y
carga nuevos valores en HL.
XTHL cambia el contenido del L con la posicin de memoria especificada por el stack
pointer y el registro H es intercambiado con el contenido del SP+1.
Formato
Ejemplo
Despus de XTHL
Puntero
stack
40B4
Registro H
AA
Registro L
BB
Registro H
DD
Registro L
CC
MEMORIA
00
CC
DD
00
DIRECCION
40B3
40B4
40B5
40B6
MEMORIA
00
BB
AA
00
DIRECCION
40B3
40B4
40B5
40B6
A1.8.8.
SPH
L
43
SPHL
Descripcin
Ejemplo
44
A1.9.
0 0
pr
Parte alta de
datos
0 0 0 1
Parte baja de
datos
00 para registros B y
C01 para registros D y
E10 para registros H y
L11 para registro
puntero de pila
0 0
REG
1 1 0
Datos
45
3. Por ltimo, para el resto de las instrucciones, que ocupan 2 bytes, se cuenta con
este formato:
1 1 OPER 1 1 0
Datos
000 para instruccin
ADI001 para instruccin
ACI010 para instruccin
SUI011 para instruccin
SBI100 para instruccin
ANI101 para instruccin
XRI110 para instruccin
DRI111 para instruccin
CPI
La instruccin LXI opera sobre el par de registros especificado por PR, usando
dos bytes de datos inmediatos.
La instruccin MVI opera sobre el registro especificado por REG, usando un
byte de datos inmediatos. Si se hace referencia a la memoria, la instruccin opera sobre
la posicin de memoria de la misma determinada por los registros H y L. El registro H
contiene los 8 bits ms significativos de la direccin, mientras que el registro L contiene
los 8 bits menos significativos.
Las restantes instrucciones operan sobre el acumulador, usando un byte de datos
inmediatos. El resultado sustituye al contenido del acumulador.
46
A1.9.1.
LXI
LXI pr,
datos
Inmediato
Descripcin
LXI es una instruccin de 3 bytes; su segundo y tercer byte contienen el dato que ha de
ser cargado en el par de registros (PR). 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 instruccin inmediata que acepta
un valor de 16 bits. El resto trabajan con datos de 8 bits.
Si el par de registros especificados es SP, el segundo byte de la instruccin
sustituye a los 8 bits menos significativos del puntero de pila, mientras que el tercer byte
de la instruccin reemplaza a los 8 bits ms significativos del puntero de pila.
Formato
0 0
pr
0 0 0 1
B, D, H o
SP
Ejemplos
1. La instruccin
Parte alta de
datos
Parte baja de
datos
00 para registros B y
C01 para registros D y
E10 para registros H y
L11 para registro
puntero de pila
47
LXI B, 00FFH
carga en el registro B el valor 00H y en el registro C el valor FFH.
2. La siguiente instruccin carga en el puntero de pila el valor 1000H
LXI SP, 1000H
A1.9.2.
MV
I
MVI reg,
datos
Inmediato
Descripcin
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 (DATOS). El dato no debe exceder de
un byte.
Formato
0 0
REG
1 1 0
A, B, C, D, E, H,
LoM
Datos
00 para registros B y
C01 para registros D y
E10 para registros H y
L11 para registro
puntero de pila
48
Ejemplos
(1).La instruccin
MVI H, 33H
carga en el registro H el valor 33H.
(2).La instruccin
MVI L, 44H
carga en el registro L el valor 44H.
(3).Supuestos los dos ejemplos anteriores, la instruccin
MVI M, 2AH
carga en la posicin de memoria 3344H (direccin aportada por los registros H
y L) el valor 2AH.
A1.9.3.
ADI
ADI datos
Z, S, P, CY,
AC
Inmediato
Descripcin
49
1 1 0 0 0 1 1 0
Datos
Ejemplo
22
H
14
H
33
H
0 0 1 0 0 0 1 0
0 0 0 1 0 1 0 0
0 0 1 1 0 1 1 0
33H
ECH
0 0 1 1 0 1 1 0
1 1 1 0 1 1 0 0
50
Nuevo
acumulador
22
H
0 0 1 0 0 0 1 0
Ahora los bits de paridad, acarreo y acarreo auxiliar se quedan a uno y el resto a
cero.
A1.9.4.
ACI
ACI datos
Z, S, P, CY,
AC
Inmediato
Descripcin
1 1 0 0 1 1 1 0
Ejemplo
Datos
51
(2).ACI 20
y suponemos el bit de acarreo puesto a uno.
La instruccin (1) carga en el acumulador el valor 22H.
La instruccin (2) realiza la siguiente suma:
Acumulador
Dato
inmediato
Bit de
acarreo
Nuevo
acumulador
22
H
14
H
0 0 1 0 0 0 1 0
0 0 0 1 0 1 0 0
1
37
H
0 0 1 1 0 1 1 1
A1.9.5.
SUI
SUI datos
Z, S, P, CY,
AC
Inmediato
Descripcin
El byte de datos inmediato se resta del contenido del acumulador usando aritmtica de
complemento a dos. El resultado se deja en el acumulador.
Ya que se trata de una operacin de resta, el bit de acarreo se pone a uno cuando
no hay acarreo del bit de ms peso, y se pone a cero si tiene dicho acarreo.
52
Formato
1 1 0 1 0 1 1 0
Datos
Ejemplo
B3
H
6D
H
00
H
1 0 1 1 0 0 1 1
0 1 0 0 1 1 0 1
0 0 0 0 0 0 0 0
Como era de esperar el resultado final del acumulador es cero ya que le estamos
restando su propio valor. El valor 6DH del dato inmediato corresponde al complemento
a dos del valor B3H que estamos restando.
Debido a que existe desbordamiento del sptimo bit se produce acarreo y se
pone el bit de acarreo a cero.
El bit de paridad se pone a uno mientras que los dems permanecen inactivos.
A1.9.6.
SBI
53
SBI datos
Z, S, P, CY,
AC
Inmediato
Descripcin
1 1 0 1 1 1 1 0
Datos
Ejemplo
54
00
H
FFH
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0
1H
1 1 1 1 1 1 1 1
No hay acarreo, por lo que el bit de acarreo se pone a uno. Los bits de cero y
acarreo auxiliar estn a cero, mientras que los de signo y paridad se ponen a uno.
A1.9.7.
ANI
ANI datos
Z, S, P, CY,
AC
Inmediato
Descripcin
1 1 1 0 0 1 1 0
55
Datos
Ejemplo
A0H
OF
H
1 0 1 0 0 0 0 0
0 0 0 0 1 1 1 1
00
H
0 0 0 0 0 0 0 0
La instruccin ANI del ejemplo pone a cero los cuatro bits de mayor peso,
dejando invariables los cuatro menores. Ya que los cuatro bits de menor peso del
acumulador eran cero, el resultado final es 00H con lo que el bit de cero se pondr a
cero.
A1.9.8.
XRI
XRI datos
Z, S, P, CY,
AC
Inmediato
56
Descripcin
Se realiza la funcin lgica O-EXCLUSIVO bit a bit entre un byte de datos inmediatos
y el contenido del acumulador. El resultado se guarda en el acumulador. El bit de
acarreo se pone a cero.
Formato
1 1 1 0 1 1 1 0
Datos
Ejemplo
Esta instruccin se suele utilizar para complementar bits especficos del acumulador
dejando los restantes en su estado original. De este modo y suponiendo que el
acumulador contiene ABH, la instruccin
XRI 80H
complementa el bit de ms peso del acumulador, tal y como se muestra en la siguiente
figura:
Acumulador
Dato
inmediato
Nuevo
acumulador
A1.9.9.
ORI
AB
H
80H
1 0 1 0 1 0 1 1
1 0 0 0 0 0 0 0
2B
H
0 0 1 0 1 0 1 1
ORI datos
Z, S, P, CY,
Direccionamie
nto
57
AC
Inmediato
Descripcin
ORI desarrolla una operacin lgica OR entre el contenido especificado por DATOS y
el contenido del acumulador. El resultado se deja en el acumulador. Los bits de acarreo
y acarreo auxiliar se ponen a cero.
Formato
1 1 1 1 0 1 1 0
Datos
Ejemplo
3C
H
F0H
FCH
0 0 1 1 1 1 0 0
1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0
Como vemos la instruccin ORI de nuestro ejemplo activa los cuatro bits de
menor peso, dejando invariables los restantes.
58
A1.9.10.
CPI
CPI datos
Z, S, P, CY, AC
Registro
indirecto
Descripcin
Compara el valor del byte especificado (DATOS) con el contenido del acumulador y
posiciona los bits de cero y acarreo para indicar el resultado. El bit de cero indica
igualdad. Un 0 en el acarreo indica que el contenido del acumulador es mayor que
DATOS. Un 1 en el acarreo indica que el acumulador es menor que DATOS. Sin
embargo, el significado del bit de acarreo es contrario cuando los valores tienen
diferente signo o cuando uno de los valores est complementado. El valor de DATOS no
debe exceder de un byte.
Formato
1 1 1 1 1 1 1 0
Datos
Ejemplo
Acumulador
Dato
inmediato
Nuevo
acumulador
25
H
E1
H
03
H
59
0 0 1 0 0 1 0 1
1 1 1 0 0 0 0 1
0 0 0 0 0 1 1 0
Existe desbordamiento del ltimo bit, por lo que el bit de acarreo se pone a cero.
El acumulador continua con su valor inicial pero el bit de cero est a cero, indicando
que las cantidades no son iguales. Al estar el bit de acarreo a cero, nos indica que los
datos inmediatos son menores que el contenido del acumulador.
A1.10.
Instrucciones de direccionamiento
directo
0 0 1
OPE
0 1 0
R
Parte baja de la
direccin
Parte alta de la
direccin
00 para instruccin
STA01 para instruccin
LDA10 para instruccin
SHLD11 para
instruccin LHLD
A1.10.1.
STA
60
Instruccin
Bits afectados
Direccionamie
nto
STA
dir
Direct
o
Descripcin
STA DIR almacena una copia del contenido actual del acumulador en la posicin de
memoria especificada por DIR.
Formato
0 0 1 1 0 0 1 0
Parte baja de la
direccin
Parte alta de la
direccin
Ejemplo
A1.10.2.
LDA
STA 0080H
// Base hexadecimal
STA 128
// Base decimal
STA 0000000010000000B
// Base binaria
Carga directa en el
acumulador
Instruccin
Bits afectados
Direccionamie
nto
Descripcin
LDA
dir
Direct
o
61
LDA DIR carga el acumulador con el contenido de la memoria direccionada por DIR.
La direccin puede ser puesta como un nmero, una etiqueta previamente definida o una
expresin.
Formato
0 0 1 1 1 0 1 0
Parte baja de la
direccin
Parte alta de la
direccin
Ejemplo
A1.10.3.
SHL
D
LDA 300H
SHLD
dir
Directo
Descripcin
Almacena una copia del registro L en la posicin de memoria especificada por DIR, a
continuacin almacena una copia del registro H en la siguiente posicin de memoria
62
(DIR+1).
Formato
0 0 1 0 0 0 1 0
Parte baja de la
direccin
Parte alta de la
direccin
Ejemplo
Suponiendo que los registros H y L contienen respectivamente los valores 3CH y 54H,
la instruccin
SHLD 34B3
efectuar las siguientes modificaciones en memoria:
A1.10.4.
LHLD
Memoria despus de
ejecutar SHLD
DIRECCIN
34B2
34B3
34B4
34B5
FF
54
3C
FF
Cargar H y L
directamente
Instruccin
Bits afectados
Direccionamie
nto
LHLD
dir
Directo
63
Descripcin
LHLD DIR carga el registro L con una copia del byte almacenado en la posicin de
memoria especificada por DIR. Despus carga el registro H con una copia del byte
almacenado en la posicin siguiente de memoria especificada por DIR. La instruccin
LHLD esta prevista para cargar direcciones nuevas en los registros H y L.
Formato
0 0 1 0 1 0 1 0
Parte baja de la
direccin
Parte alta de la
direccin
Ejemplo
A1.11.
Instrucciones de
salto
64
1 1 1 0 1 0 0 1
1 1 OPER 0 1 X
Parte baja de la
direccin
Parte alta de la
direccin
65
A1.11.1.
PCH
L
Cargar el contador de
programa
Instruccin
Bits afectados
Direccionamie
nto
PCHL
Registr
o
Descripcin
1 1 1 0 1 0 0 1
Ejemplo
66
A1.11.2.
JMP
Salto incondicional
Instruccin
Bits afectados
Direccionamie
nto
JMP dir
Inmedia
to
Descripcin
La instruccin JMP DIR altera la ejecucin del programa cargando el valor especificado
por DIR en el contador de programa.
Formato
1 1 0 0 0 0 1 1
A1.11.3.
JC
Parte baja de la
direccin
Parte alta de la
direccin
Saltar si hay
acarreo
Instruccin
Bits afectados
Direccionamie
nto
JC dir
Inmedia
to
Descripcin
1 1 0 1 1 0 1 0
Parte baja de la
direccin
Parte alta de la
direccin
A1.11.4.
JNC
67
Saltar si no hay
acarreo
Instruccin
Bits afectados
Direccionamie
nto
JNC dir
Inmedia
to
Descripcin
La instruccin JNC DIR comprueba el estado del bit acarreo. Si esta a 0 el programa
cambia a la direccin especificada por DIR. Si esta a 1 la ejecucin del programa
contina normalmente.
Formato
1 1 0 1 0 0 1 0
A1.11.5.
JZ
Parte baja de la
direccin
Parte alta de la
direccin
Saltar si hay
cero
Instruccin
Bits afectados
Direccionamie
nto
JZ dir
Inmedia
to
Descripcin
68
Formato
1 1 0 0 1 0 1 0
A1.11.6.
JNZ
Parte baja de la
direccin
Parte alta de la
direccin
Saltar si no hay
cero
Instruccin
Bits afectados
Direccionamie
nto
JNZ dir
Inmedia
to
Descripcin
La instruccin JNZ DIR comprueba el valor del bit de cero. Si el contenido del
acumulador no es cero (Bit de cero = 0) el programa contina en la direccin
especificada por DIR. Si el contenido del acumulador es cero (Bit de cero = 1) el
programa contina su ciclo normal.
Formato
1 1 0 0 0 0 1 0
A1.11.7.
JM
Parte baja de la
direccin
Parte alta de la
direccin
JM dir
Inmedia
to
69
Descripcin
1 1 1 1 1 0 1 0
A1.11.8.
JP
Parte baja de la
direccin
Parte alta de la
direccin
JP dir
Inmedia
to
Descripcin
1 1 1 1 0 0 1 0
A1.11.9.
JPE
Parte baja de la
direccin
Parte alta de la
direccin
JPE dir
70
Direccionamie
nto
Inmedia
to
Descripcin
La paridad existe si el byte que esta en el acumulador tiene un nmero par de bits. El bit
de paridad se pone a 1 para indicar esta condicin.
La instruccin JPE DIR comprueba la situacin del bit de paridad. Si esta a 1, la
ejecucin del programa contina en la direccin especificada por DIR. Si esta a 0,
contina con la siguiente instruccin de forma secuencial.
Las instrucciones JPE y JPO son especialmente usadas para comprobar la
paridad de los datos de entrada. (Sin embargo con la instruccin IN los bits no actan.
Esto puede evitarse sumando 00H al acumulador para activarlos).
Formato
1 1 1 0 1 0 1 0
A1.11.10.
JP0
Parte baja de la
direccin
Parte alta de la
direccin
JPO dir
Inmedia
to
Descripcin
La instruccin JPO DIR comprueba el estado del bit de paridad. Si esta a 0, el programa
contina en la direccin marcada por DIR. Si est a 1 contina con la secuencia normal.
Formato
1 1 1 0 0 0 1 0
Parte baja de la
direccin
Parte alta de la
direccin
A1.12.
71
Instrucciones de llamada a
subrutina
1 1 OPER 1 0 X
Parte baja de la
direccin
Parte alta de la
direccin
72
A1.12.1.
CALL
Llamada incondicional
Instruccin
Bits afectados
Direccionamie
nto
CALL dir
Inmediato / Registro
indirecto
73
Descripcin
1 1 0 0 0 1 0 1
A1.12.2.
CC
Parte baja de la
direccin
Parte alta de la
direccin
Llamar si hay
acarreo
Instruccin
Bits afectados
Direccionamie
nto
CC dir
Inmediato / Registro
indirecto
Descripcin
CC comprueba el estado del bit de acarreo. Si el bit est a 1, CC carga el contenido del
contador de programa en el stack y a continuacin salta a la direccin especificada por
DIR. Si el bit esta a 0, la ejecucin del programa contina con la prxima instruccin de
su secuencia normal. Aunque el uso de una etiqueta es lo ms normal, la direccin
puede ser especificada tambin como un nmero o una expresin.
74
Formato
1 1 0 1 1 1 0 0
A1.12.3.
CNC
Parte baja de la
direccin
Parte alta de la
direccin
Llamar si no hay
acarreo
Instruccin
Bits afectados
Direccionamie
nto
CNC dir
Inmediato / Registro
indirecto
Descripcin
CNC chequea el valor del bit de acarreo. Si est en cero CNC carga el contenido de
contador de programa en el stack y a continuacin salta a la direccin especificada por
la instruccin en DIR. Si el bit est a 1, el programa contina con su secuencia normal.
Aunque el uso de una etiqueta es lo ms comn, la direccin puede tambin estar
indicada por un nmero o por una expresin.
Formato
1 1 0 1 0 1 0 0
A1.12.4.
CZ
Parte baja de la
direccin
Parte alta de la
direccin
Llamar si hay
cero
Instruccin
Bits afectados
Direccionamie
nto
CZ dir
Inmediato / Registro
indirecto
Descripcin
CZ chequea el bit de cero. Si el bit esta a 1 (indicando que el contenido del acumulador
75
1 1 0 0 1 1 0 0
A1.12.5.
CNZ
Parte baja de la
direccin
Parte alta de la
direccin
Llamar si no hay
cero
Instruccin
Bits afectados
Direccionamie
nto
CNZ dir
Inmediato / Registro
indirecto
Descripcin
CNZ chequea el bit de Cero. Si est en 0 (indicando que el contenido del acumulador no
es cero), CNZ manda el contenido del contador de programa al stack y salta a la
direccin especificada por DIR. Si el bit est a 1 el programa contina su desarrollo
normal.
Formato
1 1 0 0 0 1 0 0
A1.12.6.
CM
Parte baja de la
direccin
Parte alta de la
direccin
CM dir
Inmediato / Registro
indirecto
76
Descripcin
CM comprueba el estado del bit del signo. Si el bit esta a 1 (indicando que el contenido
del acumulador es negativo) CM manda el contenido del contador de programa al stack
y salta a la direccin especificada por DIR. Si el bit es 0 la ejecucin del programa
contina con su secuencia normal. El uso de la etiqueta es lo ms corriente, pero la
direccin puede especificarse tambin por un nmero o una expresin.
Formato
1 1 1 1 1 1 0 0
A1.12.7.
CP
Parte baja de la
direccin
Parte alta de la
direccin
CP dir
Inmediato / Registro
indirecto
Descripcin
CP chequea el valor del bit de signo. Si est a 0 (indicando que el contenido del
acumulador es positivo), CP enva el contenido del contador de programa al stack y
salta a la direccin especificada por DIR. Si el bit tiene un 1, contina el programa
normalmente con la instruccin siguiente.
Formato
1 1 1 1 0 1 0 0
A1.12.8.
CPE
Parte baja de la
direccin
Parte alta de la
direccin
CPE dir
Bits afectados
Direccionamie
nto
77
Inmediato / Registro
indirecto
Descripcin
Existe paridad en un byte si el nmero de unos que tiene es par. El bit de paridad se
pone a 1 para indicar esta condicin. CPE chequea el valor del bit de paridad. Si tiene
un 1, CPE enva el contenido del contador de programa al stack y salta a la direccin
especificada por la instruccin en DIR. Si el bit tiene un cero, el programa contina
normalmente.
Formato
1 1 1 0 1 1 0 0
A1.12.9.
CPO
Parte baja de la
direccin
Parte alta de la
direccin
CPO dir
Inmediato / Registro
indirecto
Descripcin
CPO chequea el bit de paridad. Si el bit esta a 0, CPO carga el contenido del contador
de programa en el stack y salta a la direccin especificada en DIR. Si el bit est a 1 el
programa contina su desarrollo normal.
Formato
1 1 1 0 0 1 0 0
Parte baja de la
direccin
Parte alta de la
direccin
78
A1.13.
1 1 OPER 1 0 X
79
A1.13.1.
RET
Retorno
incondicional
Instruccin
Bits afectados
Direccionamie
nto
RET
Registro
indirecto
Descripcin
80
1 1 0 0 1 0 0 1
A1.13.2.
RC
Retorno si hay
acarreo
Instruccin
Bits afectados
Direccionamie
nto
RC
Registro
indirecto
Descripcin
1 1 0 1 1 0 0 0
A1.13.3.
RNC
Retorno si no hay
acarreo
Instruccin
Bits afectados
Direccionamie
nto
Descripcin
RNC
Registro
indirecto
81
1 1 0 1 0 0 0 0
A1.13.4.
RZ
Retorno si hay
cero
Instruccin
Bits afectados
Direccionamie
nto
RZ
Registro
indirecto
Descripcin
1 1 0 0 1 0 0 0
A1.13.5.
RNZ
Retorno si no hay
cero
Instruccin
Bits afectados
Direccionamie
nto
RNZ
Registro
indirecto
82
Descripcin
La instruccin RNZ comprueba el bit cero. Si est a 0, indicando que el contenido del
acumulador no es cero, la instruccin echa fuera del stack dos bytes y los carga en el
contador de programa. Si el bit est a 1, contina el ciclo normal.
Formato
1 1 0 0 0 0 0 0
A1.13.6.
RM
RM
Registro
indirecto
Descripcin
1 1 1 1 1 0 0 0
A1.13.7.
RP
RP
Registro
nto
83
indirecto
Descripcin
1 1 1 1 0 0 0 0
A1.13.8.
RPE
Retorno si la paridad es
par
Instruccin
Bits afectados
Direccionamie
nto
RPE
Registro
indirecto
Descripcin
1 1 1 0 1 0 0 0
A1.13.9.
RPO
Retorno si la paridad es
impar
84
Instruccin
Bits afectados
Direccionamie
nto
RPO
Registro
indirecto
Descripcin
1 1 1 0 0 0 0 0
A1.14.
85
Instruccin
RST
Instruccin
Bits afectados
Direccionamie
nto
RST exp
Registro
indirecto
Descripcin
Es una instruccin CALL para usar con interrupciones. RST carga el contenido del
contador de programa en el stack, para proveerse de una direccin de retorno y salta a
una de las "ocho" direcciones determinadas previamente.
Un cdigo de tres bits incluido en el cdigo de operacin de la instruccin RST
especifica la direccin de salto. Esta instruccin es empleada por los perifricos cuando
intentan una interrupcin.
Para volver a la instruccin en que ha tenido lugar la interrupcin, se debe
utilizar una instruccin de RETORNO.
Formato
EXP
CONTADOR DE PROGRAMA
C7
H
CFH
D7
H
DF
0000
H
0008
H
0010
H
0018
86
1111
1110
0111
1110
1111
1111
0111
1111
1111
H
E7H
EFH
F7H
FFH
H
0020
H
0028
H
0030
H
0038
H
Ejemplos
1. La instruccin
RST 3
llama a la subrutina de la posicin 0018H.
2. La instruccin
RST 10
es una instruccin ilegal ya que el argumento de RST debe ser un nmero entre 0
y 7.
A1.15.
87
En este apartado estudiamos las instrucciones que operan directamente sobre el flip-flop
de actuacin de interrupciones. Todas estas instrucciones ocupan un byte siguiendo el
formato que se muestra:
1 1 1 1 X 0 1 1
1 para instruccin
EI0 para instruccin
DI
A1.15.1.
EI
Activar
interrupciones
Instruccin
E
I
Bits afectados
Direccionamie
nto
Descripcin
88
1 1 1 1 1 0 1 1
A1.15.2.
DI
Desactivar
interrupciones
Instruccin
D
I
Bits afectados
Direccionamie
nto
Descripcin
1 1 1 1 0 0 1 1
A1.16.
89
Instrucciones de Entrada /
Salida
Ahora nos ocuparemos de las instrucciones que hacen que los datos entren o salgan de
la CPU. Estas instrucciones ocupan dos bytes en la forma siguiente:
1 1 0 1 X 0 1 1
Nmero de
puerto
0 para instruccin OUT1
para instruccin IN
El nmero de puerto viene definido por el hardware del sistema, no estando bajo
el control del programador. Este, nicamente selecciona uno de ellos para realizar la
correspondiente operacin.
A1.16.1.
IN
Entrad
a
90
Instruccin
Bits afectados
Direccionamie
nto
IN
port
Direct
o
Descripcin
La instruccin IN PORT lee los 8 bits de datos que hay en el "PORT" especificado y los
carga en el acumulador. El operando debe ser un nmero o una expresin que produzca
un valor comprendido entre 00H y FFH.
Formato
1 1 0 1 1 0 1 1
Nmero de
puerto
Ejemplos
1. La instruccin
IN 2
deposita en el acumulador los datos de entrada del puerto 2.
2. La instruccin
IN 3*2
deposita en el acumulador los datos de entrada del puerto 6.
A1.16.2.
OUT
Salida
Instruccin
Bits afectados
Direccionamie
nto
91
OUT
port
Directo
Descripcin
OUT PORT pone el contenido del acumulador en el bus de datos de 8 bits del puerto
seleccionado. El nmero de puertos oscila de 0 a 255 y es duplicado en el bus de
direcciones. Es la lgica externa la encargada de seleccionar el puerto y aceptar el dato
de salida. El operando (PORT) debe especificar el nmero del puerto de salida
seleccionado.
Formato
1 1 0 1 0 0 1 1
Nmero de
puerto
Ejemplos
1. La instruccin
OUT 2
enva el contenido del acumulador al puerto de salida nmero 2.
2. La instruccin
OUT 3*2
enva el contenido del acumulador al puerto de salida nmero 6.
92
A1.17.
Instruccin de alto
HLT
Instruccin
Bits afectados
Direccionamie
nto
HLT
Descripcin
93
A1.18.
RI
M
Bits afectados
Direccionamie
nto
Descripcin
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
SID
I7.5
I6.5
I5.5
IE
M7.5
M6.5
M5.5
94
donde:
Formato
A1.19.
95
SI
M
Bits afectados
Direccionamie
nto
Descripcin
SIM es una instruccin de usos mltiples 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. La estructura de la instruccin SIM es como sigue:
96
bit 7
bit 6
bit 5
Bit 4
bit 3
bit 2
bit 1
bit 0
SOD
SOE
R7.5
MSE
M7.5
M6.5
M5.5
donde:
97
El bit 7 se sita en la salida SOD donde puede ser tratado por los aparatos
perifricos. Si el bit 6 se pone a cero, el bit 7 no tendr efecto alguno, siendo ignorado.
Formato