El microprocesador Z80 características
Esquema general Z80 Bus de direcciones Bus de datos 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 Bus de direcciones Bus de datos 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
Esquema del 8088 GND 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 RD TEST READY RESET MN/ 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
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
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 Z80 1. 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)
Conjunto de instrucciones (2)
Conjunto de instrucciones (3)
Conjunto de instrucciones (4)
Instrucciones de uno y dos bytes Instrucciones de un byte Instrucciones de dos bytes byte 1 i7 i6 i5 i4 i3 i2 i1 i0 código operación byte 1 i7 i6 i5 i4 i3 i2 i1 i0 código operación d7 d6 d5 d4 d3 d2 d1 d0 datos o direcciones byte 2
Instrucciones de tres y cuatro bytes Instrucciones de tres bytes Instrucciones de cuatro bytes byte 1 i7 i6 i5 i4 i3 i2 i1 i0 código operación byte 2 d7 d6 d5 d4 d3 d2 d1 d0 datos o direcciones byte 3 d7 d6 d5 d4 d3 d2 d1 d0 byte 1 i7 i6 i5 i4 i3 i2 i1 i0 código operación byte 2 i7 i6 i5 i4 i3 i2 i1 i0 byte 3 d7 d6 d5 d4 d3 d2 d1 d0 datos o direcciones byte 4 d7 d6 d5 d4 d3 d2 d1 d0
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 ( 0011 11102 = 3E16 ) n n n n n n n n ( 1101 00112 =D316 ) 1 1 0 1 0 0 1 1 n n n n n n n n
Ejemplo programa lenguaje 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
Ejecutando el programa
Ejecutando el programa
Ejecutando el programa
Otras instrucciones LD B, n ADD A, B 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 0 0 0 0 0 1 1 0 ( 0000 01102 = 0616 ) n n n n n n n n ( 1000 00002 = 8016 ) 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 ( 0011 10102 = 3216 ) dirección en little endian n n n n n n n n n n n n n n n n
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 ( 0011 10102 = 3A16 ) dirección en little endian n n n n n n n n n n n n n n n n
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áquina