
El Zilog Z80 es un microprocesador de 8 bits presentado en 1976. Su conjunto de instrucciones fue diseñado para ser compatible binariamente con el Intel 8080. Las instrucciones del Intel 8080 tienen una longitud de entre uno y tres bytes, mientras que el Z80 requiere hasta cuatro bytes por instrucción.
Zilog continuó ampliando el conjunto de instrucciones del Z80 con varios sucesores, incluidos el Z180 , el Z280 y el Z380 . La última versión, el eZ80 , se presentó en 2001 y estuvo disponible para su compra a partir de 2025.El conjunto de instrucciones también aparece en CPU que no son Zilog, como la Hitachi HD64180 , [ 1 ] la Mitsui R800 y la U880 del Bloque del Este . [ 2 ]
Conjunto de instrucciones
El Z80 utiliza 252 de los 256 códigos disponibles como códigos de operación de un solo byte (las "instrucciones raíz"), la mayoría de los cuales se heredan del 8080. Los cuatro códigos restantes se utilizan ampliamente como prefijos de código de operación : [ 3 ] CB y ED habilitan instrucciones adicionales, y DD o FD seleccionan IX o IY respectivamente en lugar de HL. Este esquema le da al Z80 una gran cantidad de permutaciones de instrucciones y registros. Zilog los clasifica en 158 "tipos de instrucción" diferentes, 78 de los cuales son los mismos que los del Intel 8080. [ 3 ] Esto permite la ejecución de todos los programas del 8080 en un Z80. La documentación de Zilog [ 4 ] agrupa aún más las instrucciones en categorías. La mayoría provienen del 8080, otras son completamente nuevas, como las instrucciones de bloque y de bit, y otras instrucciones del 8080 con modos de direccionamiento más versátiles, como las cargas de 16 bits, E/S, rotaciones/desplazamientos y saltos relativos. Las categorías son:
- Cargar e intercambiar
- Transferencia de bloques y búsqueda
- Aritmética y lógica
- Rotar y cambiar
- Manipulación de bits (establecer, restablecer, probar)
- Salta, llama y regresa
- Entrada/salida
- Control de la CPU
Orden de codificación
Para ampliar el conjunto de instrucciones del 8080, las instrucciones del Z80 pueden requerir una anulación IX/IY, un prefijo de código de operación o ambos. Cualquier instrucción puede contener hasta cuatro componentes. Los componentes de la instrucción se ensamblan en el siguiente orden: [ 5 ]
Instrucciones raíz
Los códigos de operación raíz incluyen todos los códigos de operación del 8080. El Z80 agrega ocho nuevas instrucciones de un byte, dos prefijos de código de operación y las anulaciones IX e IY. [ 6 ] Las filas coloreadas indican nuevas instrucciones del Z80.
- Las instrucciones de puerto OUT A e IN Ageneran una dirección de puerto de 16 bits, donde el número de puerto inmediato de 8 bits forma la parte inferior de la dirección y el registro A forma la parte superior. Normalmente, los dispositivos solo decodifican la parte inferior. En cambio, el 8080 duplica el número de puerto inmediato tanto en el bus de direcciones superior como en el inferior.
Instrucciones con el prefijo ED
Los códigos de operación con prefijo ED son un englobador de las nuevas instrucciones Z80 que no pudieron codificarse en un solo byte. Este grupo comprende solo 60 de los 256 códigos de operación disponibles. [ 6 ]
- ↑ El byte de entrada establece las banderas a diferencia de IN A,n
- 1 2 RETN y RETI son idénticos y restauran IFF1. Los dispositivos de interrupción compatibles con Z80 monitorean RETI mediante el rastreo del bus de datos mientras M1- está activado para 0xED seguido de 0x4D.
- 1 2 LD A,I y LD A,R son las únicas dos instrucciones LD que establecen indicadores. Además, IFF2 se carga en el indicador P/V. C no se ve afectado.
- 1 2 3 4 Cuando D = 1, los punteros HL y DE disminuyen. Cuando R = 1, la operación se repite hasta que BC o B = 0.
- 1 2 LDI, LDD, CPI y CPD establecen P/V si BC – 1 ≠ 0. Esto es útil para el control de bucle cuando no se utiliza repetición.
- ↑ CPIR/CPDR terminan antes si A = (HL).
- 1 2 Todas las instrucciones de E/S de bloque generan BC, no solo C, como dirección de puerto.
Instrucciones con el prefijo CB

Los códigos de operación con prefijo CB cubren desplazamientos y rotaciones, además de las instrucciones de prueba, borrado y establecimiento de bits. Todas estas instrucciones se pueden usar con cualquier registro o memoria. La forma (HL) de estas instrucciones se puede combinar con un prefijo de código de operación IX o IY para operar sobre (IX+d) o (IY+d). Este grupo comprende 248 de los 256 códigos de operación disponibles. [ 6 ]
Anulaciones IX e IY
Dos prefijos de código de operación amplían el número de modos de direccionamiento del Z80 para acceder a los nuevos registros de índice IX e IY:
- El prefijo DD cambia HL a IX o (HL) a (IX+desplazamiento)
- El prefijo FD cambia HL a IY o (HL) a (IY+desplazamiento).
Los registros de índice, IX e IY, fueron concebidos como punteros flexibles de 16 bits, lo que mejoró la capacidad de manipular la memoria, los marcos de pila y las estructuras de datos. Oficialmente, se trataron como de 16 bits únicamente. En realidad, se implementaron como un par de registros de 8 bits [ 8 ] de la misma manera que el registro HL, al que se puede acceder como 16 bits o por separado como los registros alto y bajo. Los códigos de operación binarios eran idénticos, pero precedidos por un nuevo prefijo. [ 9 ]
Usos no documentados de IX/IY
Zilog publicó los opcodes y los mnemónicos relacionados para las funciones previstas, pero no documentó el hecho de que cada opcode que permitía la manipulación del registro HL era igualmente válido para las mitades de 8 bits de los registros IX e IY. Por ejemplo, el opcode 26h seguido de un valor de byte inmediato forma la instrucción LD H,n. Cargará el valor inmediato n en el registro H. Anteponer a esta instrucción de dos bytes el prefijo del opcode del registro IX, DD, daría como resultado que los 8 bits más significativos del registro IX se cargaran con ese mismo valor. Una excepción notable a esto serían las instrucciones similares a LD H,(IX+d)que utilizan tanto el registro HL como el IX o IY en la misma instrucción. [ 9 ] En este caso, el prefijo DD solo se aplica a la parte (IX+d) de la instrucción.
El acceso a las mitades IX/IY puede acelerar algunas operaciones. Para cargar DE en IX usando las instrucciones oficiales, se podría usar PUSH DEy POP IX, lo que tomaría 25 ciclos. Usando la función de carga parcial, lo mismo podría codificarse como LD IXL,Ey LD IXH,D, ahorrando 9 ciclos pero tomando un byte adicional.
Las mitades IX e IY también pueden almacenar operandos para instrucciones aritméticas, lógicas y de comparación de 8 bits, lo que permite reservar los registros regulares de 8 bits para otros usos. Cualquier mitad IX/IY puede incrementarse, decrementarse o cargarse en o desde cualquier registro de 8 bits, excepto H o L. [ 9 ]
Sinónimos de instrucción
El Z80 amplía el conjunto de instrucciones del 8080 y lo hace más ortogonal. Como consecuencia, ciertas funciones de instrucción se corresponden con dos codificaciones de instrucción diferentes. En algunos casos, existe una codificación de instrucción del 8080 que es más pequeña y rápida que la codificación ortogonal del Z80. [ 5 ] Algunos ejemplos:
- El Z80 introdujo versiones ortogonales de las instrucciones
LD RP,(nn)yLD (nn),RPdonde RP puede ser cualquier par de registros o SP. El ensamblador del Z80 sustituye la versión del 8080 deLD HL,(nn)yLD (nn),HLpara ahorrar un byte y cuatro ciclos de reloj. RL ALas instrucciones ,RR A,RLC A,RRC A, ySLA Aforman parte de las rotaciones con prefijo CB del Z80. Las instruccionesRLA,RRA,RLCA,RRCA, y del 8080ADD A,Ason un byte más pequeñas y el doble de rápidas.- El Z80 introdujo un salto incondicional de dos bytes
JR. Aunque más grande, el 8080 de tres bytesJPes dos ciclos de reloj más rápido. - El Z80 añadió saltos condicionales de dos bytes:
JR NZ,JR Z,JR NC, yJR Ccomo alternativas a los saltos condicionales de tres bytes del 8080:JP NZ,JP Z,JP NC, yJP C. Aunque las formas de dos bytes son dos ciclos de reloj más lentas cuando se toman, son tres ciclos de reloj más rápidas cuando no se toman. - La instrucción DJNZ del Z80 tiene la mitad del tamaño de las instrucciones equivalentes del 8080 y es un ciclo de reloj más rápida.
Referencias
- ↑ Cohen, Charles L. (4 de marzo de 1985). "El sol sale sobre nuevos diseños" . ElectronicsWeek . págs. 18–21 . Recuperado el 2 de junio de 2024 .
- ↑ «UD 880 y UD 855» [ UD 880 y UD 855 ] . Radio Fernsehen Elektronik (en alemán). 35 (2). VEB Verlag Technik: 70. 1986. ISSN 0033-7900 .
- 1 2 "Introducción a la CPU Z80" . Zilog . 1995. Archivado del original el 20 de diciembre de 2023.
Tiene un lenguaje de 252 instrucciones raíz y, con los 4 bytes reservados como prefijos, accede a 308 instrucciones adicionales.
- ↑ "Conjunto de instrucciones de la CPU Z80" (PDF). Zilog . 1976. pág. 19. Archivado del original el 5 de noviembre de 2023. Consultado el 20 de julio de 2021 .
- 1 2 "Z80" . Wiki de CPC . Consultado el 6 de septiembre de 2025 .
- 1 2 3 Manual de usuario de la CPU Z80 (PDF) (11.ª ed.). Zilog. Agosto de 2016. Consultado el 15 de agosto de 2025 .
- ↑ "Errores de documentación del Z80" . Wiki de CPC . Consultado el 28 de noviembre de 2025 .A diferencia de lo que se indica en la documentación del Z80, OUTI OTIR OUTD OTDR decrementa B antes del acceso de E/S.
- ↑ Froehlich, Robert A. (1984). El catálogo y directorio de software libre . Crown Publishers. pág. 133. ISBN 978-0-517-55448-7Los códigos Z80 no
documentados permiten operaciones de 8 bits con los registros IX e IY.
- 1 2 3 Bot, Jacco JT "Instrucciones no documentadas del Z80" . Inicio de la CPU Z80 . Archivado del original el 23 de diciembre de 2023.
Si un código de operación funciona con los registros HL, H o L, entonces si ese código de operación está precedido por #DD (o #FD) funciona en IX, IXH o IXL (o IY, IYH, IYL), con algunas excepciones. Las excepciones son instrucciones como LD H,IXH y LD L,IYH.
- Arquitecturas de conjuntos de instrucciones