You are on page 1of 18

Universidad de Alcal I. T.

Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

El microprocesador de 8 bits Z80


INTRODUCCIN
El Z80 es un microprocesador de la empresa Zilog Inc., que surgi de personas que
desarrollaron el 8080 en INTEL, por lo que mantiene cierta compatibilidad con este pero
mejorando notablemente sus prestaciones. Tuvo gran xito y se hizo muy popular desde su
aparicin, por su incorporacin al Spectrum y su utilizacin en muchos otros sistemas, adems
de ser el microprocesador alrededor del cual se dise el sistema operativo CP/M.

MODELO DE PROGRAMACIN
7 PSW 0
PSW S Z H PV N C
7 A 0
7 A 0
15 B 87 C 0
15 B 87 C 0
15 D 87 E 0
15 D 87 E 0
15 H 87 L 0
15 H 87 L 0
15 SP 0
15 PC 0 IFF1 IFF2 0/1 Prohibido/Permitido

15 IX 0
IFMa IFMb Modo
15 IY 0
7 IV 0
7 R 0

CARACTERSTICAS DEL Z80


Bus de datos bidireccional de 8 bits.
Bus de direcciones de 16 bits.
Lnea de salida /M1 que indica que el procesador se encuentra en el ciclo mquina de
recogida del cdigo de operacin en la memoria.
Terminal de salida /MREQ (Memory request) que indica acceso a memoria.
Terminal de salida /IOREQ (Input/Output request) que indica operacin de entrada/salida
sobre un perifrico.
Seales de salida /RD (Read) y /WR (Write) para indicar, respectivamente, operaciones de
lectura y escritura .
Lnea de salida /RFSH (Refresh) que se activa para indicar que los terminales de direcciones
A0-A7 contienen una direccin de refresco. El registro R hace de contador de filas en las
operaciones de refresco de las memorias dinmicas.
Lnea de salida /HALT que indica que la CPU se encuentra en espera (tras la instruccin
HALT ejecuta instrucciones NOP hasta la llegada de una interrupcin).
Seal de entrada /WAIT que hace que provoca el retraso de la ejecucin de la instruccin,
para conectar perifricos ms lentos.
Terminal /RESET que inicializa la CPU y pone el PC a cero.
Dos terminales de interrupcin: /INT (Programable) y /NMI (No enmascarable).

Z80 Pgina 1
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica 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.

BITS SIGNIFICATIVOS EN EL REGISTRO DE ESTADO (PSW)


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
IMPLCITO: El operando est referenciado implcitamente por el cdigo de operacin.
SCF Pone a 1 el flag C.

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.

INMEDIATO: El operando que se incluye en la instruccin (sin ningn smbolo adicional)


es el dato a utilizar, que puede ser de uno o de dos bytes.
LD C,3Fh Carga el registro C con el nmero 3Fh.
LD HL,1234h Carga el par HL con el dato 1234h.

DIRECTO EXTENDIDO: La direccin del dato se da directamente en la instruccin, en los


dos bytes que siguen al del cdigo de operacin.
LD A,(1234h) Carga el acumulador con el dato contenido en la posicin 1234h.
LD HL,(1234h) Carga el registro L con el contenido de la direccin 1234h y el
registro H con el contenido de la direccin 1235h.

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.
RELATIVO: Es utilizado exclusivamente en las instrucciones de salto condicional (Jump
relative). El operando de un byte incluido en la instruccin es un offset expresado en
complemento a 2 que se suma al contador de programa (PC) actualizado si se cumple la
condicin, pasando el PC a apuntar a la direccin de continuacin del programa.
JR Z,7Ah Salta, si el resultado anterior fue cero, a la direccin que resulta de
sumar al PC actualizado el nmero 7Ah en complemento a dos.

Z80 Pgina 2
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

INDEXADO: Los registros ndices IX o IY contienen un dato de 16 bits que, sumado al


offset en complemento a 2, que se incluye en la instruccin, permite obtener la direccin
efectiva.
SUB (IX+34h) Resta al acumulador el contenido de la posicin de memoria que se
obtiene al sumar 34h al contenido del registro IX.
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]).

EJEMPLOS DE PROGRAMAS PARA EL Z80


Programa que suma sin signo los contenidos de las direcciones 40A0h y 40A1h y guarda el
resultado en las posiciones 40B0h y 40B1h.

0000 CPU "Z80.TBL"


0000 HOF "INT8"
4000 ORG 4000H
4000 0600 INICIO: LD B,0 ;Asegura un cero en B
4002 DD21A040 LD IX,40A0h ;Direccin del primer dato
4006 DD7E00 LD A,(IX+0) ;Carga el primer operando
4009 DD8601 ADD A,(IX+1) ;Suma con el segundo
400C FD21B040 LD IY,40B0h ;Direccin del resultado
4010 FD7700 LD (IY+0),A ;Guarda LSB del resultado
4013 3E00 LD A,0
4015 88 ADC A,B ;Acarreo, si existe, a A

Z80 Pgina 3
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

4016 FD7701 LD (IY+1),A ;Guarda MSB del resultado


4019 76 FIN: HALT
4000 END INICIO

Programa que inicializa a FFh las posiciones de memoria comprendidas entre la 4080h y
408Fh.

0000 CPU "Z80.TBL"


0000 HOF "INT8"
4000 ORG 4000h
4000 06FF INICIO: LD B,0FFh ;En B el dato
4002 3E10 LD A,10h ;A es el contador
4004 DD218040 LD IX,4080H ;En IX la direccin base
4008 DD7000 BUCLE: LD (IX+00H),B ;Actualizamos la posicin
400B DD23 INC IX ;Siguiente direccin
400D 3D DEC A ;Contador del bucle
400E C20840 JP NZ,BUCLE ;Salta si no termin
4011 76 FIN: HALT
4000 END INICIO

Programa que inicializa el bloque de memoria entre las direcciones 4100h y 411Fh con los
valores 0, 1, 2, ..., 1Fh.

0000 CPU "Z80.TBL"


0000 HOF "INT8"
4000 ORG 4000H
4000 3E00 INICIO: LD A,00H ;En A el dato y contador
4002 DD210041 LD IX,4100H ;En IX la direccin base
4006 DD7700 BUCLE: LD (IX+00H),A ;Actualizamos la memoria
4009 DD23 INC IX ;Siguiente direccin
400B 3C INC A
400C FE20 CP 20H ;Lleg al final
400E C20640 JP NZ,BUCLE ;Si no, salta a BUCLE
4011 76 HALT
4000 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 CPU "Z80.TBL"


0000 HOF "INT8"
4000 ORG 4000H
4000 3E1F INICIO: LD A,1Fh ;En A el dato y contador
4002 DD210041 LD IX,4100H ;En IX la direccin base
4006 DD7700 BUCLE: LD (IX+00H),A ;Actualizamos la memoria
4009 DD23 INC IX ;Siguiente direccin
400B 3D DEC A
400C FEFF CP 0FFh ;Lleg al final
400E C20640 JP NZ,BUCLE ;Si no, salta a BUCLE
4011 76 HALT
4000 END INICIO

Z80 Pgina 4
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Programa que copia el bloque de memoria comprendido entre las direcciones 0000h y 001Fh
a partir de la direccin 4100h.

0000 CPU "Z80.TBL"


0000 HOF "INT8"
4000 ORG 4000h
4000 FD210000 INICIO: LD IY,0000h ;En IY direccin origen
4004 DD210041 LD IX,4100h ;En IX direccin destino
4008 3E20 LD A,020h ;En A el contador
400A FD4600 BUCLE: LD B,(IY+0h) ;Lee el dato
400D DD7000 LD (IX+0h),B ;Copia
4010 DD23 INC IX ;Incrementa ndices
4012 FD23 INC IY
4014 3D DEC A ;Decrementa contador
4015 C20A40 JP NZ,BUCLE ;Si no fin, salta a BUCLE
4018 76 FIN: HALT
4000 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.

;Nmeros sin signo


0000 CPU "Z80.TBL"
0000 HOF "INT8"
4000 ORG 4000h
4000 DD215040 INICIO: LD IX,4050h ;En IX la direccin base
4004 DD7E00 LD A,(IX+00h) ;En A el primer dato
4007 67 LD H,A ;El mayor en H
4008 6F LD L,A ;El menor en L
4009 060F LD B,0Fh ;Contador en B
400B DD23 INC IX ;Siguiente direccin
400D DD7E00 BUCLE: LD A,(IX+0h) ;Cargamos otro dato
4010 BC CP H ;Comparamos A-H
4011 DA1840 JP C,SALTO1 ;A es menor que H
4014 67 LD H,A ;A es mayor y se pasa a H
4015 C31D40 JP SIGUE
4018 BD SALTO1: CP L ;Comparamos A-L
4019 D21D40 JP NC,SIGUE ;A es mayor que L
401C 6F LD L,A ;A es menor y se pasa a L
401D DD23 SIGUE: INC IX
401F 10EC DJNZ BUCLE ;Decrementa B y comprueba
4021 DD21A040 LD IX,40A0H ;Actualiza la direccin
4025 DD7400 LD (IX+00H),H ;Guarda el mayor
4028 DD7510 LD (IX+10H),L ;Guarda el menor
402B 76 FIN: HALT
4000 END INICIO

Nmeros CON signo


0000 CPU "Z80.TBL"
0000 HOF "INT8"
4000 ORG 4000h
4000 DD215040 INICIO: LD IX,4050h ;En IX la direccin base
4004 DD7E00 LD A,(IX+00h) ;En A el primer dato
4007 67 LD H,A ;Guardamos el mayor en H

Z80 Pgina 5
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

4008 6F LD L,A ;Guardamos el menor en L


4009 060F LD B,0Fh ;Contador en B
400B DD23 INC IX ;Siguiente direccin
400D DD7E00 BUCLE: LD A,(IX+0h) ;Cargamos otro dato
4010 BC CP H ;Comparamos A-H
4011 2820 JZ SIGUE ;Si son iguales, sigue
4013 EA1C40 JP PE,VUNOH ;Si A>H entonces
;(S)xor(P/V)=0 (S=P/V)
;PE (paridad par, bit
;P/V=1)
4016 FA2340 VCEROH: JP M,SALTO1 ;P/V=0 y S=1. A es menor y;
;no hay cambios
4019 C31F40 JP CAMBIAH
401C F22340 VUNOH: JP P,SALTO1 ;P/V=1 y S=0. A es menor y
;no hay cambios
401F 67 CAMBIAH: LD H,A ;A es mayor y se pasa a H
4020 C33340 JP SIGUE
4023 BD SALTO1: CP L ;Comparamos A-L
4024 280D JZ SIGUE ;Si son iguales, sigue
4026 EA2F40 JP PE,VUNOL ;Si A<L entonces
;(S)xor(P/V)=1 (S<>P/V)
;PE (paridad par, bit P/V a
;1)
4029 F23340 VCEROL: JP P,SIGUE ;P/V=0 y S=0. A es mayor y
;no hay cambios
402C C33240 JP CAMBIAL
402F FA3340 VUNOL: JP M,SIGUE ;P/V=1 y S=1. A es mayor y
;no hay cambios
4032 6F CAMBIAL: LD L,A ;A es menor y se pasa a L
4033 DD23 SIGUE: INC IX
4035 10D6 DJNZ BUCLE ;Decrementa B y repite si
;no es cero
4037 DD21A040 LD IX,40A0H ;Actualiza la direccin
403B DD7400 LD (IX+00H),H ;Guarda el mayor
403E DD7510 LD (IX+10H),L ;Guarda el menor
4041 76 FIN: HALT
4000 END INICIO

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 CPU "Z80.TBL"


0000 HOF "INT8"
4000 ORG 4000h
4000 DD215040 INICIO: LD IX,4050h ;En IX la direccin base
4004 0608 LD B,08h ;En B el contador de bytes
4006 37 SCF ;Carry a 1
4007 3F CCF ;Complementacin del carry
4008 DD7E00 BUCLE: LD A,(IX+00h) ;En A byte del primer
400B DD8E10 ADC A,(IX+10h)
400E DD7750 LD (IX+50h),A ;Guarda byte del resultado

Z80 Pgina 6
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

4011 DD23 INC IX ;No afecta al carry


4013 10F3 DJNZ BUCLE ;Decrementa B y repite si
;no es cero
4015 3E00 LD A,0
4017 CE00 ADC A,0
4019 DD7750 LD (IX+50h),A ;Guarda byte de mayor peso
401C 76 FIN: HALT
4000 END INICIO

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 I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 8
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 9
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 10
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 11
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 12
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 13
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 14
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 15
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 16
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 17
Universidad de Alcal I. T. Informtica de Sistemas
Departamento de Automtica Laboratorio de Microprocesadores

Z80 Pgina 18

You might also like