Está en la página 1de 18

Universidad de Alcal

Departamento de Automtica

I. T. Informtica de Sistemas
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
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

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
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.

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
Departamento de Automtica

I. T. Informtica 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 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
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

;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 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

;En A el dato y contador


;En IX la direccin base
;Actualizamos la memoria
;Siguiente direccin
;Lleg al final
;Si no, salta a BUCLE

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

;En A el dato y contador


;En IX la direccin base
;Actualizamos la memoria
;Siguiente direccin
;Lleg al final
;Si no, salta a BUCLE

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

;En IY direccin origen


;En IX direccin 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 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

;Nmeros 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
Nmeros CON signo
CPU "Z80.TBL"
HOF "INT8"
ORG 4000h
INICIO:
LD IX,4050h
LD A,(IX+00h)
LD H,A

;En IX la direccin base


;En A el primer dato
;El mayor en H
;El menor en L
;Contador en B
;Siguiente direccin
;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 direccin
;Guarda el mayor
;Guarda el menor

;En IX la direccin base


;En A el primer dato
;Guardamos el mayor en H
Pgina 5

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

;En IX la direccin base


;En B el contador de bytes
;Carry a 1
;Complementacin del carry
;En A byte del primer
;Guarda byte del resultado
Pgina 6

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:

;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 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

También podría gustarte