Está en la página 1de 18

Universidad de Alcalá I. T.

Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

El microprocesador de 8 bits Z80


INTRODUCCIÓN
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
aparición, por su incorporación al Spectrum y su utilización en muchos otros sistemas, además
de ser el microprocesador alrededor del cual se diseñó el sistema operativo CP/M.

MODELO DE PROGRAMACIÓN
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

CARACTERÍSTICAS DEL Z80


• Bus de datos bidireccional de 8 bits.
• Bus de direcciones de 16 bits.
• Línea de salida /M1 que indica que el procesador se encuentra en el ciclo máquina de
recogida del código de operación en la memoria.
• Terminal de salida /MREQ (Memory request) que indica acceso a memoria.
• Terminal de salida /IOREQ (Input/Output request) que indica operación de entrada/salida
sobre un periférico.
• Señales de salida /RD (Read) y /WR (Write) para indicar, respectivamente, operaciones de
lectura y escritura .
• Línea de salida /RFSH (Refresh) que se activa para indicar que los terminales de direcciones
A0-A7 contienen una dirección de refresco. El registro R hace de contador de filas en las
operaciones de refresco de las memorias dinámicas.
• Línea de salida /HALT que indica que la CPU se encuentra en espera (tras la instrucción
HALT ejecuta instrucciones NOP hasta la llegada de una interrupción).
• Señal de entrada /WAIT que hace que provoca el retraso de la ejecución de la instrucción,
para conectar periféricos más lentos.
• Terminal /RESET que inicializa la CPU y pone el PC a cero.
• Dos terminales de interrupción: /INT (Programable) y /NMI (No enmascarable).

Z80 Página 1
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

• Señal de entrada /BUSREQ (Bus request) para la petición del bus y señal de salida
/BUSACK (Bus acknowledge) para la confirmación de bus cedido que permiten implementar
los protocolos de gestión 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 operación 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 aritméticas.
• 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
• IMPLÍCITO: El operando está referenciado implícitamente por el código de operación.
SCF Pone a 1 el flag C.

• DE REGISTROS: El propio código de operación indica los registros cuyos contenidos serán
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 instrucción (sin ningún símbolo adicional)


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

• DIRECTO EXTENDIDO: La dirección del dato se da directamente en la instrucción, en los


dos bytes que siguen al del código de operación.
LD A,(1234h) Carga el acumulador con el dato contenido en la posición 1234h.
LD HL,(1234h) Carga el registro L con el contenido de la dirección 1234h y el
registro H con el contenido de la dirección 1235h.

• PÁGINA CERO: Solo se utiliza en la instrucción RST, que salta y continua ejecutando la
instrucción contenida en la posición en página cero cuya dirección se incluye en la
instrucción, 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
instrucción contenida en esa dirección.
• RELATIVO: Es utilizado exclusivamente en las instrucciones de salto condicional (Jump
relative). El operando de un byte incluido en la instrucción es un offset expresado en
complemento a 2 que se suma al contador de programa (PC) actualizado si se cumple la
condición, pasando el PC a apuntar a la dirección de continuación del programa.
JR Z,7Ah Salta, si el resultado anterior fue cero, a la dirección que resulta de
sumar al PC actualizado el número 7Ah en complemento a dos.

Z80 Página 2
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática 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 instrucción, permite obtener la dirección
efectiva.
SUB (IX+34h) Resta al acumulador el contenido de la posición de memoria que se
obtiene al sumar 34h al contenido del registro IX.
• INDIRECTO POR REGISTRO: La dirección 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
dirección indicada en el par HL.

INTERRUPCIONES
La línea /NMI provoca una interrupción no enmascarable (siempre será atendida) y actúa
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 instrucción RETN
para que se restaure el contenido original de IFF1.

La interrupción /INT solo será atendida si IFF1 está a 1 (los biestables IFF1 y IFF2
constituyen la máscara 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 interrupción la CPU espera, en el bus de datos, un código
de operación que será ejecutado en lugar de la siguiente instrucción de la memoria.
Normalmente el código de operación enviado será el de la instrucción RST que producirá
un salto a una posición en página cero.
• Modo 1: Cuando se produce la interrupción se ejecuta la instrucción RST 38h, es decir,
comienza a ejecutar el programa que se localice a partir de la dirección 0038h.
• Modo 2: Al producirse la interrupción, en el bus de datos se espera un vector de 8 bits
que constituirá la parte baja de una dirección de memoria, la parte alta de esa dirección
deberá encontrarse en el registro IV. La dirección de comienzo de la rutina de atención a
la interrupción 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 ;Dirección 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 ;Dirección 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 Página 3
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática 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 dirección base
4008 DD7000 BUCLE: LD (IX+00H),B ;Actualizamos la posición
400B DD23 INC IX ;Siguiente dirección
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 dirección base
4006 DD7700 BUCLE: LD (IX+00H),A ;Actualizamos la memoria
4009 DD23 INC IX ;Siguiente dirección
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 inicialización 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 dirección base
4006 DD7700 BUCLE: LD (IX+00H),A ;Actualizamos la memoria
4009 DD23 INC IX ;Siguiente dirección
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 Página 4
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

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

0000 CPU "Z80.TBL"


0000 HOF "INT8"
4000 ORG 4000h
4000 FD210000 INICIO: LD IY,0000h ;En IY dirección origen
4004 DD210041 LD IX,4100h ;En IX dirección 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 posición 4050h y los almacena, respectivamente, en las posiciones 40A0h y 40B0h.

;Números sin signo


0000 CPU "Z80.TBL"
0000 HOF "INT8"
4000 ORG 4000h
4000 DD215040 INICIO: LD IX,4050h ;En IX la dirección 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 dirección
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 dirección
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

Números CON signo


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

Z80 Página 5
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática 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 dirección
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 dirección
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 dirección 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 dirección 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 dirección base
4004 0608 LD B,08h ;En B el contador de bytes
4006 37 SCF ;Carry a 1
4007 3F CCF ;Complementación 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 Página 6
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática 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 más completos y
complejos de los microprocesadores de su categoría, además de mantener la compatibilidad con
el juego del 8080. (Ver hojas adjuntas).

Z80 Página 7
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 8
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 9
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 10
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 11
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 12
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 13
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 14
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 15
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 16
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 17
Universidad de Alcalá I. T. Informática de Sistemas
Departamento de Automática Laboratorio de Microprocesadores

Z80 Página 18

También podría gustarte