Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplos z80
Ejemplos z80
Departamento de Automtica
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
MODELO DE PROGRAMACIN
PSW
S Z
PV N C
15
87
15
87
15
87
15
SP
15
PC
15
IX
15
IY
IV
PSW
15
87
15
87
15
87
IFF1
IFF2
0/1 Prohibido/Permitido
IFMa
IFMb
Modo
Z80
Pgina 1
Universidad de Alcal
Departamento de Automtica
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Seal de entrada /BUSREQ (Bus request) para la peticin del bus y seal de salida
/BUSACK (Bus acknowledge) para la confirmacin de bus cedido que permiten implementar
los protocolos de gestin del bus para el DMA y el multiproceso.
C es el indicador de acarreo.
N es el indicador de operacin de resta, para tenerse en cuenta en las instrucciones de ajuste
decimal (DAA).
P/V es el indicador de paridad en operaciones de entrada o desplazamiento (si est a 1
indica paridad par) o indica desbordamiento en operaciones aritmticas.
H es el bit acarreo auxiliar o acarreo mitad, usado en las instrucciones de ajuste decimal.
Z es el indicador de cero. Se pone a 1 si el resultado fue nulo.
S es el indicador del signo del resultado.
MODOS DE DIRECCIONAMIENTO
DE REGISTROS: El propio cdigo de operacin indica los registros cuyos contenidos sern
los operandos.
ADD A,B
Suma el contenido del acumulador (A) con el contenido del registro
B, dejando el resultado en el acumulador.
PGINA CERO: Solo se utiliza en la instruccin RST, que salta y continua ejecutando la
instruccin contenida en la posicin en pgina cero cuya direccin se incluye en la
instruccin, que puede ser 0, 8, 10h, 18h, 20h, 28h, 30h y 38h.
RST 10h
Carga el PC con el valor 0010h, con lo que se ejecutar la
instruccin contenida en esa direccin.
Z80
Pgina 2
Universidad de Alcal
Departamento de Automtica
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
INDIRECTO POR REGISTRO: La direccin del dato (de 16 bits) est almacenada en uno de
los pares de registros.
OR (HL)
Realiza la OR entre el acumulador y el dato contenido en la
direccin indicada en el par HL.
INTERRUPCIONES
La lnea /NMI provoca una interrupcin no enmascarable (siempre ser atendida) y acta
del siguiente modo:
1. Copia IFF1 en IFF2.
2. Pone IFF1 a cero (prohibe las interrupciones enmascarables).
3. Guarda el PC en la pila.
4. Salta a la rutina que comienza en 0066h y que debe finalizar con la instruccin RETN
para que se restaure el contenido original de IFF1.
La interrupcin /INT solo ser atendida si IFF1 est a 1 (los biestables IFF1 y IFF2
constituyen la mscara de interrupciones) y puede funcionar de tres modos diferentes (las
instrucciones IM0, IM1 e IM2 seleccionan cada uno de ellos):
Modo 0: Cuando se produce la interrupcin la CPU espera, en el bus de datos, un cdigo
de operacin que ser ejecutado en lugar de la siguiente instruccin de la memoria.
Normalmente el cdigo de operacin enviado ser el de la instruccin RST que producir
un salto a una posicin en pgina cero.
Modo 1: Cuando se produce la interrupcin se ejecuta la instruccin RST 38h, es decir,
comienza a ejecutar el programa que se localice a partir de la direccin 0038h.
Modo 2: Al producirse la interrupcin, en el bus de datos se espera un vector de 8 bits
que constituir la parte baja de una direccin de memoria, la parte alta de esa direccin
deber encontrarse en el registro IV. La direccin de comienzo de la rutina de atencin a
la interrupcin se obtiene de forma indirecta: byte bajo en (IV[vector]) y byte alto en
(IV[vector+1]).
Programa que suma sin signo los contenidos de las direcciones 40A0h y 40A1h y guarda el
resultado en las posiciones 40B0h y 40B1h.
0000
0000
4000
4000
4002
4006
4009
400C
4010
4013
4015
Z80
0600
DD21A040
DD7E00
DD8601
FD21B040
FD7700
3E00
88
INICIO:
CPU
HOF
ORG
LD
LD
LD
ADD
LD
LD
LD
ADC
"Z80.TBL"
"INT8"
4000H
B,0
IX,40A0h
A,(IX+0)
A,(IX+1)
IY,40B0h
(IY+0),A
A,0
A,B
;Asegura un cero en B
;Direccin del primer dato
;Carga el primer operando
;Suma con el segundo
;Direccin del resultado
;Guarda LSB del resultado
;Acarreo, si existe, a A
Pgina 3
Universidad de Alcal
Departamento de Automtica
4016 FD7701
4019 76
4000
06FF
3E10
DD218040
DD7000
DD23
3D
C20840
76
INICIO:
BUCLE:
FIN:
CPU "Z80.TBL"
HOF "INT8"
ORG 4000h
LD B,0FFh
LD A,10h
LD IX,4080H
LD (IX+00H),B
INC IX
DEC A
JP NZ,BUCLE
HALT
END INICIO
;En B el dato
;A es el contador
;En IX la direccin base
;Actualizamos la posicin
;Siguiente direccin
;Contador del bucle
;Salta si no termin
Programa que inicializa el bloque de memoria entre las direcciones 4100h y 411Fh con los
valores 0, 1, 2, ..., 1Fh.
0000
0000
4000
4000
4002
4006
4009
400B
400C
400E
4011
4000
LD (IY+1),A
HALT
END INICIO
Programa que inicializa a FFh las posiciones de memoria comprendidas entre la 4080h y
408Fh.
0000
0000
4000
4000
4002
4004
4008
400B
400D
400E
4011
4000
FIN:
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
3E00
DD210041
DD7700
DD23
3C
FE20
C20640
76
INICIO:
BUCLE:
CPU "Z80.TBL"
HOF "INT8"
ORG 4000H
LD A,00H
LD IX,4100H
LD (IX+00H),A
INC IX
INC A
CP 20H
JP NZ,BUCLE
HALT
END INICIO
Programa anterior modificado para que la inicializacin se realice en orden inverso (de la
4100h a la 411Fh con los valores 1Fh, 1Eh, ...0).
0000
0000
4000
4000
4002
4006
4009
400B
400C
400E
4011
4000
Z80
3E1F
DD210041
DD7700
DD23
3D
FEFF
C20640
76
INICIO:
BUCLE:
CPU "Z80.TBL"
HOF "INT8"
ORG 4000H
LD A,1Fh
LD IX,4100H
LD (IX+00H),A
INC IX
DEC A
CP 0FFh
JP NZ,BUCLE
HALT
END INICIO
Pgina 4
Universidad de Alcal
Departamento de Automtica
Programa que copia el bloque de memoria comprendido entre las direcciones 0000h y 001Fh
a partir de la direccin 4100h.
0000
0000
4000
4000
4004
4008
400A
400D
4010
4012
4014
4015
4018
4000
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
FD210000
DD210041
3E20
FD4600
DD7000
DD23
FD23
3D
C20A40
76
INICIO:
BUCLE:
FIN:
CPU "Z80.TBL"
HOF "INT8"
ORG 4000h
LD IY,0000h
LD IX,4100h
LD A,020h
LD B,(IY+0h)
LD (IX+0h),B
INC IX
INC IY
DEC A
JP NZ,BUCLE
HALT
END INICIO
Programa que localiza el mayor y el menor de los 16 datos de un byte almacenados a partir
de la posicin 4050h y los almacena, respectivamente, en las posiciones 40A0h y 40B0h.
0000
0000
4000
4000
4004
4007
4008
4009
400B
400D
4010
4011
4014
4015
4018
4019
401C
401D
401F
4021
4025
4028
402B
4000
DD215040
DD7E00
67
6F
060F
DD23
DD7E00
BC
DA1840
67
C31D40
BD
D21D40
6F
DD23
10EC
DD21A040
DD7400
DD7510
76
0000
0000
4000
4000 DD215040
4004 DD7E00
4007 67
Z80
Universidad de Alcal
Departamento de Automtica
4008
4009
400B
400D
4010
4011
4013
BUCLE:
LD
LD
INC
LD
CP
JZ
JP
L,A
B,0Fh
IX
A,(IX+0h)
H
SIGUE
PE,VUNOH
4016 FA2340
VCEROH:
JP
M,SALTO1
4019 C31F40
401C F22340
VUNOH:
JP
JP
CAMBIAH
P,SALTO1
SALTO1:
LD
JP
CP
JZ
JP
H,A
SIGUE
L
SIGUE
PE,VUNOL
4029 F23340
VCEROL:
JP
P,SIGUE
402C C33240
402F FA3340
VUNOL:
JP
JP
CAMBIAL
M,SIGUE
401F
4020
4023
4024
4026
6F
060F
DD23
DD7E00
BC
2820
EA1C40
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
67
C33340
BD
280D
EA2F40
4032 6F
4033 DD23
4035 10D6
4037
403B
403E
4041
4000
DD21A040
DD7400
DD7510
76
CAMBIAH:
CAMBIAL:
SIGUE:
FIN:
LD L,A
INC IX
DJNZ BUCLE
LD IX,40A0H
LD (IX+00H),H
LD (IX+10H),L
HALT
END INICIO
;Guardamos el menor en L
;Contador en B
;Siguiente direccin
;Cargamos otro dato
;Comparamos A-H
;Si son iguales, sigue
;Si A>H entonces
;(S)xor(P/V)=0 (S=P/V)
;PE (paridad par, bit
;P/V=1)
;P/V=0 y S=1. A es menor y;
;no hay cambios
;P/V=1 y S=0. A es menor y
;no hay cambios
;A es mayor y se pasa a H
;Comparamos A-L
;Si son iguales, sigue
;Si A<L entonces
;(S)xor(P/V)=1 (S<>P/V)
;PE (paridad par, bit P/V a
;1)
;P/V=0 y S=0. A es mayor y
;no hay cambios
;P/V=1 y S=1. A es mayor y
;no hay cambios
;A es menor y se pasa a L
;Decrementa B y repite si
;no es cero
;Actualiza la direccin
;Guarda el mayor
;Guarda el menor
Programa que suma dos datos de 8 bytes que comienzan en las posiciones 4050h y 4060h y
almacena el resultado a partir de la direccin 40A0h. Como el Z80 almacena los datos en
memoria con los bytes de pesos mayores en las direcciones mayores, en caso de producirse
acarreo final, este deber almacenarse en la direccin 40A8h, si no hay acarreo, deber
ponerse a cero.
0000
0000
4000
4000
4004
4006
4007
4008
400B
400E
Z80
DD215040
0608
37
3F
DD7E00
DD8E10
DD7750
INICIO:
BUCLE:
CPU
HOF
ORG
LD
LD
SCF
CCF
LD
ADC
LD
"Z80.TBL"
"INT8"
4000h
IX,4050h
B,08h
A,(IX+00h)
A,(IX+10h)
(IX+50h),A
Universidad de Alcal
Departamento de Automtica
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
4011 DD23
4013 10F3
INC IX
DJNZ BUCLE
4015
4017
4019
401C
4000
LD A,0
ADC A,0
LD (IX+50h),A
HALT
END INICIO
3E00
CE00
DD7750
76
FIN:
REPERTORIO DE INSTRUCCIONES
El repertorio de instrucciones del Z80 es, probablemente, uno de los ms completos y
complejos de los microprocesadores de su categora, adems de mantener la compatibilidad con
el juego del 8080. (Ver hojas adjuntas).
Z80
Pgina 7
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 8
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 9
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 10
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 11
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 12
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 13
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 14
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 15
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 16
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 17
Universidad de Alcal
Departamento de Automtica
Z80
I. T. Informtica de Sistemas
Laboratorio de Microprocesadores
Pgina 18