El microprocesador Z80El microprocesador Z80
características
2
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 D0 D1 D2 D3 D4 D5 D6 D7
30 31 32 33 34 35 36 37 38 39 40 1 2 3 4 5 14 15 12 8 7 9 10 13
27 19 20 21 22 28 18 24 18 17 26 25 23 6 12 29
M1 MEQ IORQ RD WR RFSH HALT WAIT INT NMI RESET BUSRQ BUSAK RELOJ +5V TIERRA
Bus de direcciones Bus de datos
Esquema general Z80
Esquema del 8088GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
Vcc AD15 A16/S3 A17/S4 A18/S5 A19/S6 BHE/S7 MN/MX RDTEST READY RESETMN/ MX=1 MN/MX= 0
31 HOLD RQ/GT0
30HLDA RQ/GTI
29 WR LOCK
28 M/IO S2
27DT/R S1
26DEN S0
25ALE QS0
24 INTA QS1
Imagenes del Z80
Características
• Bus de datos de 8 bits
• Bus de direcciones de 16 bits
• En total 18 registros de 8 bits y 4 de 16 bits
• Cuenta con 12 registros de 8 bits que se pueden usar en pares para formar 6 de 16 bits
• Reloj de 4 MHz
• Compatible en software con el 8080A
Origenes• El Z80 es una versión apreciablemente mejorada del
INTEL 8080.• Es un microprocesador más rápido y sencillo en el
desarrollo de sistemas.• Solo usa una fuente de alimentación de +5 Volts• Contiene íntegramente todo el conjunto de instrucciones
del 8080.• El Z80 una expansión adicional de 80 instrucciones de ahí
se deriva su nombre, su repertorio suma un total de 156 instrucciones
Registros del Z80
A
B C
D
F
E
H L
A´
B´ C´
D´ E´
F´
H´ L´
REGISTROS
DE USO
GENERAL
CONJUNTO REGISTROS PRINCIPALES CONJUNTO REGISTROS ALTERNATIVOS
A : Registro Acumulador (almacena resultado de operaciones). Registro principalA´ : Registro Acumulador alterno.
F´ : Registro de estado (banderas) alterno.
F : Registro de estado (almacena bits de estado o banderas). Aquí se encuentranbits como el acarreo (CARRY), desborde (OVERFLOW), etc.
E/S en el Z80
• El sistema cuenta con tres localidades de E/S de uso general:– localidad C016 dispositvo E/S número 0
– localidad C116 dispositvo E/S número 1
– localidad C316 control dispositivos C016 y C11
Valor dispositivo C316 C016 C116
8016 Salida Salida
8216 Entrada Salida
9016 Salida Entrada
9216 Entradada Entrada
Direccionamiento• La memoria esta organizada en palabras de 8
bits (1 byte).
• Cada palabra puede ser referenciada por una dirección binaria de 16 bits
• La capacidad de direccionamiento directo total es de 65,536 bytes (64 K) de memoria.
• La memoria puede ser cualquier combinación de ROM, EPROM o PROM
Funciones Z801. Recibir datos desde la memoria.
2. Enviar datos hacia la memoria.
3. Incrementar o decrementar en uno su contenido.
4. Formar una dirección con el contenido de un par de registros.
5. Transferir datos entre los registros.
6. Obtener un operando durante las funciones de la ALU
Conjunto de instrucciones (1)
Mnemónico Acción
ADC suma con carryADD sumaAND and logicoBIT prueba de bitCALL llamada a una subrutinaCCF bandera de complementaria de carryCP comparaciónCPD comparación y decrementoCPDR comparación, decremento y repeticiónCPI comparación e incrementoCPIR comparación incremento y repeticiónCPL complement accumulatorDAA decimal adjust accumulatorDEC decrementoDI deshabilitar instruccionesDJNZ dec jump non-zeroEI habilitar interrupciones
Conjunto de instrucciones (2)
Mnemónico Acción
EX intercambio de un par de registrosEXX intercambio de registros alternosHALT halt, esperar por interrupción o resetIM interrupción modo 0 1 2IN entrada del puertoINC incrementoIND input, dec HL, dec BINDR input, dec HL, dec B, repetir si (B >0)INI input, inc HL, dec BINIR input, inc HL, dec B, repetir si (B>0)JP saltoJR salto relativoLD cargar datos a/desde los registrosLDD cargar, decrementarLDDR cargar, decrementar y repetirLDI cargar e incrementarLDIR carfar, incrementar y repetir
Conjunto de instrucciones (3)Mnemónico Acción
NEG negación acumulador concomplementos a 2sNOP no operaciónOR --OTDR output, dec HL, dec B, repetir si (B>0)OTIR output, inc HL, dec B, repetir si (B>0)OUT salida a un puertoOUTD output, inc HL, dec B,POP pop del stackPUSH push en el stackRES resetear el bitRET regresar de una subrutinaRETI regresar de una interrupciónRETN regresar de una interrupción no-enmascaradaRL rotación izquierda de un registroRLA rotación izquierda del acumuladorRLC rotación izquierda a través del carryRLCA rotación izquierda a través del carry acumulador
Conjunto de instrucciones (4)
Mnemónico Acción
RLD rotación izquierda del dígitoRR rotación derecha de un registroRRA rotación derecha del acumuladorRRC rotación derecha registro circularRRCA rotación derecha del acumulador circularRRD rotación derecha del dígitoRST reinicializarSBC subtraer con carrySCF activar la bandera de carrySET asignar un valor al bitSLA corrimiento izquierdo del registro aritméticoSRA corrimiento derecho del registro aritméticoSRK corrimiento derecho del registro lógicoSUB substracciónXOR or exclusivo
Instrucciones de uno y dos bytes
i7 i6 i5 i4 i3 i2 i1 i0 código operaciónbyte 1
• Instrucciones de un byte
• Instrucciones de dos bytes
i7 i6 i5 i4 i3 i2 i1 i0 código operaciónbyte 1
d7 d6 d5 d4 d3 d2 d1 d0byte 2 datos o direcciones
Instrucciones de tres y cuatro bytes
• Instrucciones de tres bytes
• Instrucciones de cuatro bytes
i7 i6 i5 i4 i3 i2 i1 i0 código operaciónbyte 1
d7 d6 d5 d4 d3 d2 d1 d0byte 2 datos o direccionesd7 d6 d5 d4 d3 d2 d1 d0byte 3
i7 i6 i5 i4 i3 i2 i1 i0 código operación
byte 1
byte 2
d7 d6 d5 d4 d3 d2 d1 d0
byte 4 d7 d6 d5 d4 d3 d2 d1 d0
byte 3
i7 i6 i5 i4 i3 i2 i1 i0
datos o direcciones
Ejemplo: variantes instrucciones LD y OUT
• LD A, n– el entero de 8 bits n se carga en el registro del
acumulador A
• OUT (n), A– el byte contenido en el acumulador se coloca en el bus
de datos y se escribe en el dispositivo periférico seleccionado en el operando n
0 0 1 1 1 1 1 0
n n n n n n n n
1 1 0 1 0 0 1 1
n n n n n n n n
( 1101 00112 =D316 )
( 0011 11102 = 3E16 )
n B
A [n]
Ejemplo programalenguaje ensamblador
LD A, #8016 Almacena en el registro Acumulador el valor 8016
OUT #C316, A Envía el valor del Acumulador al Dispositio C316
LD A, #dato16 Almacena en el Acumulador el valor dato16
OUT #C016, A Envía el valor del Acumulador al Dispositio C016
OUT #C116, A Envía el valor del Acumulador al Dispositio C116
Programa en lenguaje máquina
Localidad (Dirección)
de Memoria
MEMORIA
180016 3E16
180116 8016
180216 D316
180316 C316
180416 3E16
180516 dato16
180616 D316
180716 C016
180816 D316
180916 C116
Ejecutando el programa
tiempo
MEMRQ'
IORQ'
RD'
WR'
Bus de Direcciones
Bus de Datos
MAR
MBR
PC
IR
1800
3E
1800
1800
3E
3E
1801
80
1800
1801
80
3E
1802
1801
80
3E
Fetch Fetch Ejecución
1802
D3
1802
1802
D3
D3
Fetch
1803
C3
1802
1803
C3
D3
Fetch
Ejecutando el programa
tiempo
MEMRQ'
IORQ'
RD'
WR'
Bus de Direcciones
Bus de Datos
MAR
MBR
PC
IR
1804
80
D3
1804
80
1804
1804
3E
3E
1804
1805
dato
3E
FetchFetch Ejecución
1805
dato
1806
1805
dato
3E
1806
D3
1806
1806
C3
D3
Fetch
C3
3E
Ejecución
D3
Ejecutando el programa
tiempo
MEMRQ'
IORQ'
RD'
WR'
Bus de Direcciones
Bus de Datos
MAR
MBR
PC
IR
1807
1806
1807
C0
D3
1808
1808
D3
D3
FetchFetch
1808
D33E
1808
dato
D3
dato
C0
C0
Ejecución
1809
1808
1809
C1
D3
Fetch
C1
180A
dato
D3
dato
C1
C1
Ejecución
Otras instrucciones
• LD B, n– el entero de 8 bits n se carga en el registro del
acumulador A
• ADD A, B– el contenido del registro B se añade al contenido del
acumulador y el resultado se alamcena en el acumulador
( 1000 00002 = 8016 )
n B
0 0 0 0 0 1 1 0
n n n n n n n n ( 0000 01102 = 0616 )
B A A
1 0 0 0 0 0 0 0
Otras instrucciones ...
• LD (nn), A– el contenido del acumulador se carga en la posición de
memoria especificada por los operandos nn – el primer operando n es el byte de irden bajo de una
dirección de memoria de 2 bytes
0 0 1 1 0 0 1 0
n n n n n n n n
n n n n n n n n
( 0011 10102 = 3216 )
[nn] A
dirección enlittle endian
Otras instrucciones ...
• LD A, (nn)– el contenido de la posición de memoria especificada
por los operandos nn se cargan en el acumulador– el primer operando n es el byte de irden bajo de una
dirección de memoria de 2 bytes
0 0 1 1 1 0 1 0
n n n n n n n n
n n n n n n n n
( 0011 10102 = 3A16 )
[nn] A
dirección enlittle endian
Programa que suma dos números
LD A, #dato116 Almacena en el registro Acumulador el valor dato116
LD B, #dato216 Almacena en el registro B el valor dato216
ADD A, B Suma dato116 (A) mas dato216 (B) y lo deja en A
LD #mem16, A Almacena el valor del acumulador en la celda mem16
LD A, #8016 Almacena el valor 8016 en el Acumulador
OUT #C316, A Envía el valor del Acumulador al dispositivo C316
LD A, #mem16 Almacena en el Acumulador el valor de la celda mem16
OUT #C016, A Envía el valor del Acumulador al dispositivo C016
Versión lenguaje máquinaLocalidad (Dirección)
de Memoria
MEMORIA
180016 3E16
180116 dato116
180216 0616
180316 dato216
180416 8016
180516 3216
180616 0016180716 1916180816 3E16
180916 8016
180A16 D316
180B16 C316
180C16 3A16
180D16 0016
180E16 1916
180F16 D316
181016 C016
Top Related