El microprocesador de 8 bits Z80

Anuncio
Universidad de Alcalá
Departamento de Automática
I. T. Informática de Sistemas
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
PSW
S Z
H
PV N C
7
A
0
15
B
87
C
0
15
D
87
E
0
15
H
87
L
0
15
SP
0
15
PC
0
15
IX
0
15
IY
0
7
IV
0
7
R
0
7
PSW’
0
7
A’
0
15
B’
87
C’
0
15
D’
87
E’
0
15
H’
87
L’
0
IFF1
IFF2
0/1 – Prohibido/Permitido
IFMa
IFMb
Modo
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á
Departamento de Automática
•
I. T. Informática de Sistemas
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á
Departamento de Automática
I. T. Informática de Sistemas
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
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
;Dirección del primer dato
;Carga el primer operando
;Suma con el segundo
;Dirección del resultado
;Guarda LSB del resultado
;Acarreo, si existe, a A
Página 3
Universidad de Alcalá
Departamento de Automática
4016 FD7701
4019 76
4000
•
;Guarda MSB del resultado
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 dirección base
;Actualizamos la posición
;Siguiente dirección
;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. Informática 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
;En A el dato y contador
;En IX la dirección base
;Actualizamos la memoria
;Siguiente dirección
;¿Llegó al final
;Si no, salta a BUCLE
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
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
;En A el dato y contador
;En IX la dirección base
;Actualizamos la memoria
;Siguiente dirección
;¿Llegó al final
;Si no, salta a BUCLE
Página 4
Universidad de Alcalá
Departamento de Automática
•
Programa que copia el bloque de memoria comprendido entre las direcciones 0000h y 001Fh
a partir de la dirección 4100h.
0000
0000
4000
4000
4004
4008
400A
400D
4010
4012
4014
4015
4018
4000
•
I. T. Informática 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
;En IY dirección origen
;En IX dirección destino
;En A el contador
;Lee el dato
;Copia
;Incrementa índices
;Decrementa contador
;Si no fin, salta a BUCLE
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.
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
;Números sin signo
CPU "Z80.TBL"
HOF "INT8"
ORG 4000h
INICIO:
LD IX,4050h
LD A,(IX+00h)
LD H,A
LD L,A
LD B,0Fh
INC IX
BUCLE:
LD A,(IX+0h)
CP H
JP C,SALTO1
LD H,A
JP SIGUE
SALTO1:
CP L
JP NC,SIGUE
LD L,A
SIGUE:
INC IX
DJNZ BUCLE
LD IX,40A0H
LD (IX+00H),H
LD (IX+10H),L
FIN:
HALT
END INICIO
Números CON signo
CPU "Z80.TBL"
HOF "INT8"
ORG 4000h
INICIO:
LD IX,4050h
LD A,(IX+00h)
LD H,A
;En IX la dirección base
;En A el primer dato
;El mayor en H
;El menor en L
;Contador en B
;Siguiente dirección
;Cargamos otro dato
;Comparamos A-H
;A es menor que H
;A es mayor y se pasa a H
;Comparamos A-L
;A es mayor que L
;A es menor y se pasa a L
;Decrementa B y comprueba
;Actualiza la dirección
;Guarda el mayor
;Guarda el menor
;En IX la dirección base
;En A el primer dato
;Guardamos el mayor en H
Página 5
Universidad de Alcalá
Departamento de Automática
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. Informática 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 dirección
;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 dirección
;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 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
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
;En IX la dirección base
;En B el contador de bytes
;Carry a 1
;Complementación del carry
;En A byte del primer
;Guarda byte del resultado
Página 6
Universidad de Alcalá
Departamento de Automática
I. T. Informática 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:
;No afecta al carry
;Decrementa B y repite si
;no es cero
;Guarda byte de mayor peso
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á
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 8
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 9
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 10
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 11
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 12
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 13
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 14
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 15
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 16
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 17
Universidad de Alcalá
Departamento de Automática
Z80
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 18
Descargar