Instructieset van 8080 en Z80

lijst met interne opdrachten van de Z80 en 8080 microprocessors

Onderstaande tabellen bevatten de instructieset van de Z80. De instructieset van de Intel 8080 is hiervan een deelverzameling.

Z80

De 8085 wordt hier niet behandeld. Hij heeft twee instructies (RIM en SIM) meer dan de 8080 en is daardoor niet geheel compatibel met de Z80. De 8085 heeft ook nog een aantal ongedocumenteerde instructies.

De mnemonische codes van Intel en Z80 zijn niet aan elkaar gelijk. Dat is vermoedelijk gedaan om het auteursrecht van Intel niet te schenden. De codes van Z80 worden echter door velen beschouwd als gemakkelijker te leren.

De Z280 is een uitbreiding van de Z80, met nog meer instructies dan de Z80.

Registers

bewerken
A F A' F'
B C B' C'
D E D' E'
H L H' L'
IX IY
SP PC
IFF1 (één bit) IFF2 (één bit) I R

Register F

bewerken

Het register F (flags of conditiecode) bestaat uit acht bits waarvan er zes gedocumenteerd zijn:

bit naam betekenis test
0 C (carry) Bij optellen en aftrekken de overdracht uit hoogste bit
Bij schuifinstructies het bit dat uit het register geschoven werd
C, NC
1 N 0 na optellen en INC, 1 na aftrekken en DEC door DAA-instructie
2 PV (parity, overflow) Na optellen en aftrekken de 2-complements overflow
Na logische instructies de pariteit van het resultaat
PE, PO
3 Niet gebruikt
4 H (half carry) Bij optellen en aftrekken de overdracht uit bit 3 (bij 16-bits bewerkingen de overdracht uit bit 11) door DAA-instructie
5 Niet gebruikt
6 Z (zero) 1 als het resultaat van een bewerking nul is, anders 0 Z, NZ
7 S (sign) gelijk aan bit 7 van het resultaat van een bewerking, het teken van het resultaat M, P

Legenda

bewerken
n
een byte die in de instructie is opgenomen
nn
twee bytes die in de instructie zijn opgenomen
e
een byte die een sprong over een beperkte afstand mogelijk maakt
i
IX of IY

Instructies zonder prefix en met prefix DD en FD

bewerken

In elk vak staat boven de syntaxis van de Z80, daaronder van de 8080/8085. Is er maar een syntaxis vermeld, dan werkt de instructie niet op de 8080, resp 8085.

Een instructie die gebruik maakt van HL kan worden voorzien van het prefix DD of FD en werkt dan niet met HL maar met IX of IY.

Een instructie die gebruik maakt van (HL) kan worden voorzien van het prefix DD of FD en werkt dan niet met (HL) maar met (IX+n) of (IY+n). Deze instructies hebben dus nog een extra byte, die de waarde van n (de offset) bevat.

Het gebruik van deze prefixen met een instructie waarin niet met HL of (HL) wordt gewerkt is voor de Z80 niet gedocumenteerd, maar de Z280 heeft veel extra instructies die beginnen met DD of FD, ook instructies die niet met IX of IY werken.

Opmerking:

  • De sprongopdracht JP (HL) heeft een inconsequente syntaxis. Het zou JP HL moeten zijn. Met een prefix verandert deze instructie dan ook in JP (IX) of JP (IY), zonder een extra byte bij te tellen.
 Vanaf Z80, niet op 8080
 Werkt vanaf Z80, gedocumenteerd vanaf Z280
 Vanaf Z280
 De tabel vermeldt een i als IX of IY wordt bedoeld. Met prefix DD wordt IX gebruikt en met prefix FD wordt IY gebruikt.
laatste 3 bits: 0 1 2 3 4 5 6 7
eerste 5 of 13 bits
00 NOP
NOP
LD BC,nn
LXI B,nn
LD (BC),A
STAX B
INC BC
INX B
INC B
INC B
DEC B
DCR B
LD B,n
MVI B,n
RLCA
RLC
DD00
FD00
LDW (HL),nn
 
INCW (HL)
INCW (IX+nn)
INC (SP+nn)
INC (PC+nn)
DEC (SP+nn)
DEC (PC+nn)
LD (SP+nn),n
LD (PC+nn),nn
08 EX AF,AF'
 
ADD HL,BC
DAD B
LD A,(BC)
LDAX B
DEC BC
DCX B
INC C
INC C
DEC C
DCR C
LD C,n
MVI C,n
RRCA
RRC
DD08
FD08
ADD i,BC DECW (HL)
DECW (IX+nn)
INC (HL+IX)
INC (IX+nn)
DEC (HL+IX)
DEC (IX+nn)
LD (HL+IX),n
LD (IX+nn),n
10 DJNZ e
 
LD DE,nn
LXI D,nn
LD (DE),A
STAX D
INC DE
INX D
INC D
INC D
DEC D
DCR D
LD D,n
MVI D,n
RLA
RAL
DD10
FD10
LDW (nn),nn
 
INCW (nn)
INCW (IY+nn)
INC (HL+IY)
INC (IY+nn)
DEC (HL+IY)
DEC (IY+nn)
LD (HL+IY),n
LD (IY+nn),n
18 JR e
 
ADD HL,DE
DAD D
LD A,(DE)
LDAX D
DEC DE
DCX D
INC E
INC E
DEC E
DCR E
LD E,n
MVI E,n
RRA
RAR
DD18
FD18
ADD i,DE DECW (nn)
DECW (IY+nn)
INC (IX+IY)
INC (HL+nn)
DEC (IX+IY)
DEC (HL+nn)
LD (IX+IY),n
LD (HL+nn),n
20 JR NZ,e
RIM (8085)
LD HL,nn
LXI H,nn
LD (nn),HL
SHLD nn
INC HL
INX H
INC H
INC H
DEC H
DCR H
LD H,n
MVI H,n
DAA
DAA
DD20
FD20
JAR (n)
 
LD i,nn LD (nn),i INC i INC iH DEC iH LD iH,n
28 JR Z,e
 
ADD HL,HL
DAD H
LD HL,(nn)
LHLD nn
DEC HL
DCX H
INC L
INC L
DEC L
DCR L
LD L,n
MVI L,n
CPL
CPL
DD28
FD28
JAF (n)
 
ADD i,i LD i,(nn) DEC i INC iL DEC iL LD iL,n
30 JR NC,e
SIM (8085)
LD SP,nn
LXI SP,nn
LD (nn),A
STA nn
INC SP
INX SP
INC (HL)
INC M
DEC (HL)
DCR M
LD (HL),n
MVI M,n
SCF
SCF
DD30
FD30
LDW (PC+nn),nn
 
INCW (PC+nn)
 
INC (i+n) DEC (i+n) LD (i+n),n
38 JR C,e
 
ADD HL,SP
DAD SP
LD A,(nn)
LDA nn
DEC SP
DCX SP
INC A
INC A
DEC A
DCR A
LD A,n
MVI A,n
CCF
CCF
DD38
FD38
ADD i,SP DECW (PC+nn)
 
INC (nn)
 
DEC (nn)
 
LD (nn),n
 
40 LD B,B
MOV B,B
LD B,C
MOV B,C
LD B,D
MOV B,D
LD B,E
MOV B,E
LD B,H
MOV B,H
LD B,L
MOV B,L
LD B,(HL)
MOV B,M
LD B,A
MOV B,A
DD40-FD40 LD B,iH LD B,iL LD B,(i+n)
48 LD C,B
MOV C,B
LD C,C
MOV C,C
LD C,D
MOV C,D
LD C,E
MOV C,E
LD C,H
MOV C,H
LD C,L
MOV C,L
LD C,(HL)
MOV C,M
LD C,A
MOV C,A
DD48-FD48 LD C,iH LD C,iL LD C,(i+n)
50 LD D,B
MOV D,B
LD D,C
MOV D,C
LD D,D
MOV D,D
LD D,E
MOV D,E
LD D,H
MOV D,H
LD D,L
MOV D,L
LD D,(HL)
MOV D,M
LD D,A
MOV D,A
DD50-FD50 LD D,iH LD D,iL LD D,(i+n)
58 LD E,B
MOV E,B
LD E,C
MOV E,C
LD E,D
MOV E,D
LD E,E
MOV E,E
LD E,H
MOV E,H
LD E,L
MOV E,L
LD E,(HL)
MOV E,M
LD E,A
MOV E,A
DD58-FD58 LD E,iH LD E,iL LD E,(i+n)
60 LD H,B
MOV H,B
LD H,C
MOV H,C
LD H,D
MOV H,D
LD H,E
MOV H,E
LD H,H
MOV H,H
LD H,L
MOV H,L
LD H,(HL)
MOV H,M
LD H,A
MOV H,A
DD60-FD60 LD iH,B LD iH,C LD iH,D LD iH,E LD iH,iL LD H,(i+n) LD iH,A
68 LD L,B
MOV L,B
LD L,C
MOV L,C
LD L,D
MOV L,D
LD L,E
MOV L,E
LD L,H
MOV L,H
LD L,L
MOV L,L
LD L,(HL)
MOV L,M
LD L,A
MOV L,A
DD68-FD68 LD iL,B LD iL,C LD iL,D LD iL,E LD iL,iH LD L,(i+n) LD iL,A
70 LD (HL),B
MOV M,B
LD (HL),C
MOV M,C
LD (HL),D
MOV M,D
LD (HL),E
MOV M,E
LD (HL),H
MOV M,H
LD (HL),L
MOV M,L
HALT
HLT
LD (HL),A
MOV M,A
DD70-FD70 LD (i+n),B LD (i+n),C LD (i+n),D LD (i+n),E LD (i+n),H LD (i+n),L LD (i+n),A
78 LD A,B
MOV A,B
LD A,C
MOV A,C
LD A,D
MOV A,D
LD A,E
MOV A,E
LD A,H
MOV A,H
LD A,L
MOV A,L
LD A,(HL)
MOV A,M
LD A,A
MOV A,A
DD78
FD78
LD A,(SP+nn)
LD A,(PC+nn)
LD A,(HL+IX)
LD A,(IX+nn)
LD A,(HL+IY)
LD A,(IY+nn)
LD A,(IX+IY)
LD A,(HL+nn)
LD A,iH LD A,iL LD A,(i+n)
80 ADD A,B
ADD B
ADD A,C
ADD C
ADD A,D
ADD D
ADD A,E
ADD E
ADD A,H
ADD H
ADD A,L
ADD L
ADD A,(HL)
ADD M
ADD A,A
ADD A
DD80
FD80
ADD A,(SP+nn)
ADD A,(PC+nn)
ADD A,(HL+IX)
ADD A,(IX+nn)
ADD A,(HL+IY)
ADD A,(IY+nn)
ADD A,(IX+IY)
ADD A,(HL+nn)
ADD A,iH ADD A,iL ADD A,(i+n) ADD A,(nn)
 
88 ADC A,B
ADC B
ADC A,C
ADC C
ADC A,D
ADC D
ADC A,E
ADC E
ADC A,H
ADC H
ADC A,L
ADC L
ADC A,(HL)
ADC M
ADC A,A
ADC A
DD88
FD88
ADC A,(SP+nn)
ADC A,(PC+nn)
ADC A,(HL+IX)
ADC A,(IX+nn)
ADC A,(HL+IY)
ADC A,(IY+nn)
ADC A,(IX+IY)
ADC A,(HL+nn)
ADC A,iH ADC A,iL ADC A,(i+n) ADC A,(nn)
 
90 SUB A,B
SUB B
SUB A,C
SUB C
SUB A,D
SUB D
SUB A,E
SUB E
SUB A,H
SUB H
SUB A,L
SUB L
SUB A,(HL)
SUB M
SUB A,A
SUB A
DD90
FD90
SUB A,(SP+nn)
SUB A,(PC+nn)
SUB A,(HL+IX)
SUB A,(IX+nn)
SUB A,(HL+IY)
SUB A,(IY+nn)
SUB A,(IX+IY)
SUB A,(HL+nn)
SUB A,iH SUB A,iL SUB A,(i+n) SUB A,(nn)
 
98 SBC A,B
SBC B
SBC A,C
SBC C
SBC A,D
SBC D
SBC A,E
SBC E
SBC A,H
SBC H
SBC A,L
SBC L
SBC A,(HL)
SBC M
SBC A,A
SBC A
DD98
FD98
SBC A,(SP+nn)
SBC A,(PC+nn)
SBC A,(HL+IX)
SBC A,(IX+nn)
SBC A,(HL+IY)
SBC A,(IY+nn)
SBC A,(IX+IY)
SBC A,(HL+nn)
SBC A,iH SBC A,iL SBC A,(i+n) SBC A,(nn)
 
A0 AND A,B
AND B
AND A,C
AND C
AND A,D
AND D
AND A,E
AND E
AND A,H
AND H
AND A,L
AND L
AND A,(HL)
AND M
AND A,A
AND A
DDA0
FDA0
AND A,(SP+nn)
AND A,(PC+nn)
AND A,(HL+IX)
AND A,(IX+nn)
AND A,(HL+IY)
AND A,(IY+nn)
AND A,(IX+IY)
AND A,(HL+nn)
AND A,iH AND A,iL AND A,(i+n) AND A,(nn)
 
A8 XOR A,B
XOR B
XOR A,C
XOR C
XOR A,D
XOR D
XOR A,E
XOR E
XOR A,H
XOR H
XOR A,L
XOR L
XOR A,(HL)
XOR M
XOR A,A
XOR A
DDA8
FDA8
XOR A,(SP+nn)
XOR A,(PC+nn)
XOR A,(HL+IX)
XOR A,(IX+nn)
XOR A,(HL+IY)
XOR A,(IY+nn)
XOR A,(IX+IY)
XOR A,(HL+nn)
XOR A,iH XOR A,iL XOR A,(i+n) XOR A,(nn)
 
B0 OR A,B
OR B
OR A,C
OR C
OR A,D
OR D
OR A,E
OR E
OR A,H
OR H
OR A,L
OR L
OR A,(HL)
OR M
OR A,A
OR A
DDB0
FDB0
OR A,(SP+nn)
OR A,(PC+nn)
OR A,(HL+IX)
OR A,(IX+nn)
OR A,(HL+IY)
OR A,(IY+nn)
OR A,(IX+IY)
OR A,(HL+nn)
OR A,iH OR A,iL OR A,(i+n) OR A,(nn)
 
B8 CP A,B
CP B
CP A,C
CP C
CP A,D
CP D
CP A,E
CP E
CP A,H
CP H
CP A,L
CP L
CP A,(HL)
CP M
CP A,A
CP A
DDB8
FDB8
CP A,(SP+nn)
CP A,(PC+nn)
CP A,(HL+IX)
CP A,(IX+nn)
CP A,(HL+IY)
CP A,(IY+nn)
CP A,(IX+IY)
CP A,(HL+nn)
CP A,iH CP A,iL CP A,(i+n) CP A,(nn)
 
C0 RET NZ
RNZ
POP BC
POP B
JP NZ,nn
JNZ nn
JP nn
JMP nn
CALL NZ,nn
CNZ nn
PUSH BC
PUSH B
ADD A,n
ADI n
RST 0
RST 0
DDC0
FDC0
POP (HL)
 
JP NZ,(HL)
JP NZ,PC+nn
(zie E9)
JP PC+nn
CALL NZ,(HL)
CALL NZ,PC+nn
PUSH (HL)
 
C8 RET Z
RZ
RET
RET
JP Z,nn
JZ nn
prefix
 
CALL Z,nn
CZ nn
CALL nn
CALL nn
ADC A,n
ACI n
RST 8
RST 1
DDC8
FDC8
JP Z,(HL)
JP Z,PC+nn
prefix CALL Z,(HL)
CALL Z,PC+nn
CALL (HL)
CALL PC+nn
D0 RET NC
RNC
POP DE
POP D
JP NC,nn
JNC nn
OUT (n),A
OUT n
CALL NC,nn
CNC nn
PUSH DE
PUSH D
SUB A,n
SUI n
RST 10h
RST 2
DDD0
FDD0
POP (nn)
 
JP NC,(HL)
JP NC,PC+nn
CALL NC,(HL)
CALL NC,PC+nn
PUSH (nn)
 
D8 RET C
RC
EXX
 
JP C,nn
JC nn
IN A,(n)
IN n
CALL C,nn
CC nn
prefix IX
 
SBC A,n
SBI n
RST 18h
RST 3
DDD8
FDD8
JP C,(HL)
JP C,PC+nn
CALL C,(HL)
CALL C,PC+nn
E0 RET PO
RPO
POP HL
POP H
JP PO,nn
JPO nn
EX (SP),HL
XTHL
CALL PO,nn
CPO nn
PUSH HL
PUSH H
AND A,n
ANI n
RST 20h
RST 4
DDE0
FDE0
POP i JP PO,(HL)
JP PO,PC+nn
EX (SP),i CALL PO,(HL)
CALL PO,PC+nn
PUSH i
E8 RET PE
RPE
JP (HL)
PCHL
JP PE,nn
JPE nn
EX DE,HL
XCHG
CALL PE,nn
CPE nn
prefix
 
XOR A,n
XRI n
RST 28h
RST 5
DDE8
FDE8
JP (i) JP PE,(HL)
JP PE,PC+nn
EX i,HL CALL PE,(HL)
CALL PE,PC+nn
F0 RET P
RP
POP AF
POP PSW
JP P,nn
JP nn
DI
DI
CALL P,nn
CP nn
PUSH AF
PUSH PSW
OR A,n
ORI n
RST 30h
RST 6
DDF0
FDF0
POP (PC+nn)
 
JP P,(HL)
JP P,PC+nn
CALL P,(HL)
CALL P,PC+nn
PUSH (PC+nn)
PUSH nn
F8 RET M
RM
LD SP,HL
SPHL
JP M,nn
JM nn
EI
EI
CALL M,nn
CM nn
prefix IY
 
CP A,n
CPI n
RST 38h
RST 7
DDF8
FDF8
LD SP,i JP M,(HL)
JP M,PC+nn
CALL M,(HL)
CALL M,PC+nn

Z80-instructies beginnend met CB

bewerken

Na de opcode CB heeft de Z80 een aantal instructies voor bitmanipulaties.

Sommige van deze instructies zijn uitbreidingen van reeds bestaande instructies. Zo werkt RLC met elk 8-bitsregister, ook met A, hoewel RLCA reeds bestaat, maar uitsluitend met A. Er is echter meer verschil: RLC A verandert meer flags dan RLCA.

Opmerkelijk is dat de tweede byte van deze uitgebreide instructies gelijk is aan de opcode van de oorspronkelijke instructie. Bijvoorbeeld: RLCA is 07 en RLC A is CB07.

Een van de instructies is voor de Z80 niet gedocumenteerd. Hobbyisten die de instructie ontdekten gaven hem de opcode SLL of beter SL1. Men vermoedt dat de instructie een onbedoeld neveneffect is van het decoderen van de opcodes en dat de fabrikant niet dacht dat de instructie ergens nuttig voor zou zijn. Bij de latere Z280 is de opcode gebruikt voor de instructie TSET. De Z280 is dus niet geschikt voor een programma dat gebruik maakt van de ongedocumenteerde SL1.

De prefixen DD en FD kunnen gecombineerd worden met CB. Dit is alleen gedocumenteerd voor de instructies die (HL) gebruiken, en hierin wordt dus (IX+n) of (IY+n) gebruikt in plaats van (HL). Merkwaardig is dat in dit geval de laatste twee bytes van de instructie verwisseld worden. Na CB komt eerst de offset n en daarna de eigenlijke opcode. Vergelijk het volgende:

CB C6       SET 0,(HL)
DD CB 03 C6 SET 0,(IX+3)

Men kan zich afvragen wat er gebeurt als de laatste drie bits van de vierde byte niet 110 zijn, wat niet gedocumenteerd is. Er is dan in principe geen offset nodig, maar dat kan de processor op dat moment nog niet weten. Bij onderzoek blijkt dat de bewerking met (IX+n) of (IY+n) wordt uitgevoerd en dat bovendien het resultaat wordt geladen in het register dat door de laatste drie bits wordt aangewezen. Dit is ongetwijfeld een onbedoeld neveneffect.

 Vanaf Z80
 Vanaf Z280
eerste 13 bits   eerste 10 bits   eerste 16 bits en laatste 8 bits   eerste 16 bits en laatste 8 bits
CB00
1100 1011 0000 0
RLC r CB40
1100 1011 01
BIT b,r DDCBnn06-FDCBnn06 RLC (i+n) DDCBnn46-FDCBnn46 BIT b,(i+n)
CB08
1100 1011 0000 1
RRC r CB80
1100 1011 10
RES b,r DDCBnn0E-FDCBnn0E RRC (i+n) DDCBnn86-FDCBnn86 RES b,(i+n)
CB10
1100 1011 0001 0
RL r CBC0
1100 1011 11
SET b,r DDCBnn16-FDCBnn16 RL (i+n) DDCBnnC6-FDCBnnC6 SET b,(i+n)
CB18
1100 1011 0001 1
RR r DDCBnn1E-FDCBnn1E RR (i+n)
CB20
1100 1011 0010 0
SLA r DDCBnn26-FDCBnn26 SLA (i+n)
CB28
1100 1011 0010 1
SRA r DDCBnn2E-FDCBnn2E SRA (i+n)
CB30
1100 1011 0011 0
TSET r DDCBnn30-FDCBnn30 TSET (i+n)
CB38
1100 1011 0011 1
SRL r DDCBnn3E-FDCBnn3E SRL (i+n)

Z80-instructies beginnend met ED

bewerken

Na de opcode ED heeft de Z80 nog een aantal verschillende instructies. De latere processor Z280 heeft hier nog veel meer aan toegevoegd. Bovendien kent de Z280 combinaties van ED met DD en FD.

 Z80
 Z280
laatste 3 bits: 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F
eerste 13 of 21 bits
ED00 LDA HL,(SP+nn) LD (SP+nn),A LD HL,(SP+nn) LD (SP+nn),HL LD BC,(HL) EX A,B
DDED00
FDED00
LDA i,(SP+nn) LD i,(SP+nn) LD (SP+nn),i LD BC, (i+n) EX A,(SP+nn)
EX A,(PC+nn)
ED08 LDA HL,(HL+IX) LD (HL+IX),A LD HL,(HL+IX) LD (HL+IX),HL LD (HL),BC EX A,C
DDED08
FDED08
LDA i,(HL+IX) LD i,(HL+IX) LD (HL+IX),i LD (i+n),BC EX A,(HL+IX)
EX A,(IX+nn)
ED10 LDA HL,(HL+IY) LD (HL+IY),A LD HL,(HL+IY) LD (HL+IY),HL LD DE,(HL) EX A,D
DDED10
FDED10
LDA i,(HL+IY) LD i,(HL+IY) LD (HL+IY),i LD DE,(i+n) EX A,(HL+IY)
EX A,(IY+nn)
ED18 LDA HL,(IX+IY) LD (IX+IY),A LD HL,(IX+IY) LD (IX+IY),HL LD (HL),DE EX A,E
DDED18
FDED18
LDA i,(IX+IY) LD i,(IX+IY) LD (IX+IY),i LD (i+n),DE EX A,(IX+IY)
EX A,(HL+nn)
ED20 LDA HL,(PC+nn) LD (PC+nn),A LD HL,(PC+nn) LD (PC+nn),HL LD HL,(HL) EX A,H
DDED20-FDED20 LDA i,(PC+nn) LD i,(PC+nn) LD (PC+nn),i LD HL,(i+n) EX A,iH
ED28 LDA HL,(IX+nn) LD (IX+nn),A LD HL,(IX+nn) LD (IX+nn),HL LD (HL),HL EX A,L
DDED28-FDED28 LDA i,(IX+nn) LD i,(IX+nn) LD (IX+nn),i LD (i+n),HL EX A,iL
ED30 LDA HL,(IY+nn) LD (IY+nn),A LD HL,(IY+nn) LD (IY+nn),HL LD SP,(HL) EX A,(HL)
DDED30-FDED30 LDA i,(IY+nn) LD i,(IY+nn) LD (IY+nn),i LD SP,(i+n) EX A,(i+n)
ED38 LDA HL,(HL+nn) LD (HL+nn),A LD HL,(HL+nn) LD (HL+nn),HL LD (HL),SP EX A,A
DDED38-FDED38 LDA i,(HL+nn) LD i,(HL+nn) LD (HL+nn),i LD (i+n),SP
ED40 IN B,(C) OUT (C),B SBC HL,BC LD(nn),BC NEG A RETN IM 0 LD I,A
DDED40
FDED40
IN (SP+nn),(C)
IN (PC+nn),(C)
OUT (C),(SP+nn)
OUT (C),(PC+nn)
SBC i,BC
ED48 IN C,(C) OUT (C),C ADC HL,BC LD BC,(nn) NEG HL RETI IM 3 LD R,A
DDED48
FDED48
IN (HL+IX),(C)
IN (IX+nn),(C)
OUT (C),(HL+IX)
OUT (C),(IX+nn)
ADC i,BC
ED50 IN D,(C) OUT (C),D SBC HL,DE LD (nn),DE RETIL IM 1 LD A,I
DDED50
FDED50
IN (HL+IY),(C)
IN (IY+nn),(C)
OUT (C),(HL+IY)
OUT (C),(IY+nn)
SBC i,DE
ED58 IN E,(C) OUT (C),E ADC HL,DE LD DE,(nn) IM 2 LD A,R
DDED58
FDED58
IN (IX+IY),(C)
IN (HL+nn),(C)
OUT (C),(IX+IY)
OUT (C),(HL+nn)
ADC i,DE
ED60 IN H,(C) OUT (C),H SBC HL,HL (zie 22) EXTS A PCACHE LDCTL HL,(C) RRD
DDED60-FDED60 IN iH,(C) OUT (C),iH SBC i,i LDCTL i,(C)
ED68 IN L,(C) OUT (C),L ADC HL,HL (zie 2A) EXTS HL ADD HL,A LDCTL (C),HL RLD
DDED68-FDED68 IN iL,(C) OUT (C),iL ADC i,i ADD i,A LDCTL (C),i
ED70 TST (C) SC nn SBC HL,SP LD (nn),SP DI n
DDED70-FDED70 SBC i,SP
ED78 IN A,(C) OUT (C),A ADC HL,SP LD SP,(nn) EI n
DDED78
FDED78
IN (nn),(C)
 
OUT (C),(nn)
 
ADC i,SP
ED80 INIW OUTIW EPUM (SP+nn) MEPU (SP+nn) LDUD A,(HL) LDCTL HL,USP
DDED80-FDED80 LDUD A,(i+n) LDCTL i,USP
ED88 INDW OUTDW EPUM (HL+IX) MEPU (HL+IX) LDUD (HL),A LDCTL USP,HL
DDED88-FDED88 LDUD (i+n),A LDCTL USP,i
ED90 INIRW OTIRW EPUM(HL+IY) MEPU(HL+IY) LDUP A,(HL) EPUF
DDED90-FDED90 LDUP A,(i+n)
ED98 INDRW OTDRW EPUM (IX+IY) MEPU (IX+IY) LDUP (HL),A EPUI
DDED98-FDED98 LDUP (i+n),A
EDA0 LDI CPI INI OUTI EPUM (PC+nn) MEPU (PC+nn) EPUM (HL) EPUM (nn)
EDA8 LDD CPD IND OUTD EPUM (IX+nn) MEPU (IX+nn) MEPU (HL) MEPU (nn)
EDB0 LDIR CPIR INIR OTIR EPUM (IY+nn) MEPU (IY+nn) IN HL,(C)
EDB8 LDDR CPDR INDR OTDR EPUM (HL+nn) MEPU (HL+nn) OUT C,HL
EDC0 MULT A,B MULTU A,B MULT HL,BC MULTU HL,BC DIV HL,B DIVU HL,B ADD HL,BC CP HL,BC
DDEDC0
FDEDC0
MULT A,(SP+nn)
MULT A,(PC+nn)
MULTU A,(SP+nn)
MULTU A,(PC+nn)
MULT HL,(HL)
MULT HL,(IX+nn)
MULTU HL,(HL)
MULTU HL,(IX+nn)
DIV HL,(SP+nn)
DIV HL,(PC+nn)
DIVU HL,(SP+nn)
DIVU HL,(PC+nn)
ADD HL,(HL)
ADD HL,(IX+nn)
CP HL,(HL)
CP HL,(IX+nn)
EDC8 MULT A,C MULTU A,C DIV DEHL,BC DIVU DEHL,BC DIV HL,C DIVU HL,C SUB HL,BC
DDEDC8
FDEDC8
MULT A,(HL+IX)
MULT A,(IX+nn)
MULTU A,(HL+IX)
MULTU A,(IX+nn)
DIV DEHL,(HL)
DIV DEHL,(IX+nn)
DIVU DEHL,(HL)
DIVU DEHL,(IX+nn)
DIV HL,(HL+IX)
DIV HL,(IX+nn)
DIVU HL,(HL+IX)
DIVU HL,(IX+nn)
SUB HL,(HL)
SUB HL,(IX+nn)
EDD0 MULT A,D MULTU A,D MULT HL,DE MULTU HL,DE DIV HL,D DIVU HL,D ADD HL,DE CP HL,DE
DDEDD0
FDEDD0
MULT A,(HL+IY)
MULT A,(IY+nn)
MULTU A,(HL+IY)
MULTU A,(IY+nn)
MULT HL,(nn)
MULT HL,(IY+nn)
MULTU HL,(nn)
MULTU HL,(IY+nn)
DIV HL,(HL+IY)
DIV HL,(IY+nn)
DIVU HL,(HL+IY)
DIVU HL,(IY+nn)
ADD HL,(nn)
ADD HL,(IY+nn)
CP HL,(nn)
CP HL,(IY+nn)
EDD8 MULT A,E MULTU A,E DIV DEHL,DE DIVU DEHL,DE DIV HL,E DIVU HL,E SUB HL,DE
DDEDD8
FDEDD8
MULT A,(IX+IY)
MULT A,(HL+nn)
MULTU A,(IX+IY)
MULTU A,(HL+nn)
DIV DEHL,(nn)
DIV DEHL,(IY+nn)
DIVU DEHL,(nn)
DIVU DEHL,(IY+nn)
DIV HL,(IX+IY)
DIV HL,(HL+nn)
DIVU HL,(IX+IY)
DIVU HL,(HL+nn)
SUB HL,(nn)
SUB HL,(IY+nn)
EDE0 MULT A,H MULTU A,H MULT HL,HL MULTU HL,HL DIV HL,H DIVU HL,H ADD HL,HL CP HL,HL
DDEDE0-FDEDE0 MULT A,(iH) MULTU A,(iH) MULT HL,i MULTU HL,i DIV HL,iH DIVU HL,iH ADD HL,i CP HL,i
EDE8 MULT A,L MULTU A,L DIV DEHL,HL DIVU DEHL,HL DIV HL,L DIVU HL,L SUB HL,HL EX H,L
DDEDE8-FDEDE8 MULT A,iL MULTU A,iL DIV DEHL,iL DIVU DEHL,iL DIV HL,iL DIVU HL,iL SUB HL,i
EDF0 MULT A,(HL) MULTU A,(HL) MULT HL,SP MULTU HL,SP DIV HL,(HL) DIVU HL,(HL) ADD HL,SP CP HL,SP
DDEDF0
FDEDF0
MULT A,(i+n) MULTU A,(i+n) MULT HL,(PC+nn)
MULT HL,nn
MULTU HL,(PC+nn)
MULTU HL,nn
DIV HL,i DIVU HL,i ADD HL,(HL)
ADD HL,nn
CP HL,(PC+nn)
CP HL,nn
EDF8 MULT A,A MULTU A,A DIV DEHL,SP DIVU DEHL,SP DIV HL,A DIVU HL,A SUB HL,SP
DDEDF8
FDEDF8
MULT A,(nn)
MULT A,n
MULTU A,(nn)
MULTU A,n
DIV DEHL,(PC+nn)
DIV DEHL,nn
DIVU DEHL,(PC+nn)
DIVU DEHL,nn
DIV HL,(nn)
DIV HL,n
DIVU HL,(nn)
DIVU HL,n
SUB HL,(PC+nn)
SUB HL,nn

Beschrijving van de instructies

bewerken

Hieronder staan alleen de Z80-instructies.

ADC
De operanden en bit C van register F worden opgeteld en het resultaat komt in de linker operand. De conditiecode wordt gezet.
ADD
De operanden worden opgeteld en het resultaat komt in de linker operand. De conditiecode wordt gezet.
AND
Logische En van A en de operand. Het resultaat komt in A. De conditiecode wordt gezet.
BIT
Een bit van de rechter operand wordt getest. Bit Z van de conditiecode wordt het omgekeerde van de geteste bit.
CALL
Voorwaardelijke of onvoorwaardelijke aanroep van subroutine. PC wordt op de stack gezet, SP wordt met 2 verminderd en het nieuwe executieadres komt in PC. Geen invloed op conditiecode.
CCF
Bit C van de conditiecode wordt omgekeerd.
CP
A wordt verminderd met de operand. Het resultaat van de aftrekking gaat verloren maar de conditiecode wordt gezet.
CPD
A wordt verminderd met (HL). Het resultaat van de aftrekking gaat verloren maar de conditiecode wordt gezet. Daarna worden HL en BC met 1 verminderd.
CPDR
Als CPD. Is BC na de bewerking ongelijk nul en de flag Z gelijk aan nul, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
CPI
A wordt verminderd met (HL). Het resultaat van de aftrekking gaat verloren maar de conditiecode wordt gezet. Daarna wordt HL met 1 verhoogd en BC met 1 verminderd.
CPIR
Als CPI. Is BC na de bewerking ongelijk nul en de flag Z gelijk aan nul, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
CPL
Alle bits in register A worden omgekeerd. Geen invloed op de conditiecode (behalve H en N).
DAA
Na een optelling wordt register A gecorrigeerd voor BCD. De conditiecode wordt gezet.
DEC
De operand wordt met 1 verminderd. Is het een 8-bits bewerking, dan wordt de conditiecode gezet, met uitzondering van bit C. Is het een 16-bits bewerking, dan blijft de conditiecode onveranderd.
DI
Bits IFF1 en IFF2 worden nul gemaakt, zodat de processor niet reageert op interrupts.
DJNZ
Register B wordt met 1 verminderd. Is het resultaat ongelijk aan nul, dan wordt de positieve of negatieve 8-bits operand bij PC opgeteld. De conditiecode blijft onveranderd.
EI
Bits IFF1 en IFF2 worden 1 gemaakt, zodat de processor reageert op interrupts.
EX
De inhoud van de operanden wordt verwisseld.
EXX
De inhoud van BC, DE en HL wordt verwisseld met BC', DE' en HL'.
IM
De processor werkt vanaf nu in interruptmodeus 0, 1 of 2.
IN
Invoer van een port naar het aangegeven register. Wordt register C voor de port gebruikt, dan wordt de conditiecode gezet.
INC
De operand wordt met 1 verhoogd. Is het een 8-bits bewerking, dan wordt de conditiecode gezet, met uitzondering van bit C. Is het een 16-bits bewerking, dan blijft de conditiecode onveranderd.
IND
Invoer van een port naar (HL). Daarna worden B en HL met 1 verminderd. Bit Z van de conditiecode wordt bepaald door de nieuwe waarde van B.
INDR
Als IND. Is bit Z daarna 0, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
INI
Invoer van een port naar (HL). Daarna worden B met 1 verminderd en HL met 1 verhoogd. Bit Z van de conditiecode wordt bepaald door de nieuwe waarde van B.
INIR
Als INI. Is bit Z daarna 0, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
JP
Voorwaardelijke of onvoorwaardelijke sprong. Het nieuwe executieadres komt in PC. Geen invloed op conditiecode.
JR
Voorwaardelijke of onvoorwaardelijke sprong. De positieve of negatieve 8-bits operand bij PC opgeteld. Geen invloed op conditiecode. Deze instructie kost slechts twee bytes in het programmageheugen, maar is trager dan JP als de sprong wordt uitgevoerd.
LD
De tweede operand wordt gekopieerd naar de eerste operand. Geen invloed op conditiecode. Uitzondering: bij LD A,I en LD A,R worden de bits S en Z beïnvloed door het resultaat en bovendien wordt IFF2 naar bit P/V gekopieerd. Dit is de enige manier om de inhoud van IFF2 te lezen.
LDD
(HL) wordt gekopieerd naar (DE). DE, HL en BC worden met 1 verminderd. Is BC na de bewerking nul, dan wordt P/V (dus niet Z) op 0 gezet.
LDDR
Als LDD. Is bit P/V daarna 1, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
LDI
(HL) wordt gekopieerd naar (DE). DE en HL worden met 1 verhoogd en BC wordt met 1 verminderd. Is BC na de bewerking nul, dan wordt P/V (dus niet Z) op 0 gezet.
LDIR
Als LDI. Is bit P/V daarna 1, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
NEG
Het tegengestelde van de operand wordt bepaald en het resultaat komt in hetzelfde register. De conditiecode wordt gezet.
NOP
Er wordt geen bewerking uitgevoerd.
OR
Logische Of van A en de operand. Het resultaat komt in A. De conditiecode wordt gezet.
OUT
Uitvoer van het aangegeven register naar een port. Geen invloed op de conditiecode.
OUTD
Uitvoer van (HL) naar een port (C). HL en B worden met 1 verminderd. Bit Z van de conditiecode wordt bepaald door de nieuwe waarde van B.
OUTDR
Als OUTD. Is bit Z daarna 0, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
OUTI
Uitvoer van (HL) naar een port (C). HL wordt met 1 verhoogd en B wordt met 1 verminderd. Bit Z van de conditiecode wordt bepaald door de nieuwe waarde van B.
OUTIR
Als OUTI. Is bit Z daarna 0, dan wordt PC met 2 verminderd, zodat de instructie herhaald wordt.
POP
(SP) wordt naar het aangegeven register gekopieerd. SP wordt met 2 verhoogd. Geen invloed op conditiecode, behalve bij POP AF.
PUSH
SP wordt met 2 verminderd en het aangegeven register wordt naar (SP) gekopieerd. Geen invloed op conditiecode.
RES
Een bit van de rechter operand wordt 0 gemaakt. Geen invloed op conditiecode.
RET
Hetzelfde als POP PC. Kan ook voorwaardelijk zijn.
RETI
Hetzelfde als RET. Bovendien wordt IFF2 gekopieerd naar IFF1. Sommige externe chips kunnen deze instructie afluisteren en weten dan dat een interruptroutine voltooid is.
RETN
Hetzelfde als RET. Bedoeld voor gebruik na NMI.
RL
De bits van de operand worden een plaats naar links geschoven. De hoogste bit wordt naar C gekopieerd en de oorspronkelijke waarde van C komt in de laagste bit van het register. De conditiecode wordt gezet.
RLA
Als RL, maar werkt alleen met register A en van de conditiecode wordt alleen bit C beïnvloed.
RLC
De bits van de operand worden een plaats naar links geschoven. De hoogste bit wordt naar C gekopieerd en naar de laagste bit van het register. De conditiecode wordt gezet.
RLCA
Als RLC, maar werkt alleen met register A en van de conditiecode wordt alleen bit C beïnvloed.
RLD
De laagste 4 bits van A worden gekopieerd naar de laagste 4 bits van (HL), de oorspronkelijke laagste 4 bits van HL worden gekopieerd naar de hoogste 4 bits en de oorspronkelijke hoogste 4 bits van (HL) worden gekopieerd naar de laagste 4 bits van A. De conditiecode wordt gezet.
RR
Als RL, maar er wordt naar rechts geschoven.
RRA
Als RR, maar werkt alleen met register A en van de conditiecode wordt alleen bit C beïnvloed.
RRC
Als RLC, maar er wordt naar rechts geschoven.
RRCA
Als RRC, maar werkt alleen met register A en van de conditiecode wordt alleen bit C beïnvloed.
RRD
Als RLD, maar in omgekeerde richting.
RST
Hetzelfde als CALL, maar er kan slechts naar 8 verschillende adressen worden gesprongen. Deze instructie is bedoeld voor gebruik bij interrupts omdat er maar een instructiebyte nodig is.
SBC
De rechter operand en bit C van register F worden afgetrokken van de linker operand. Het resultaat komt in de linker operand. De conditiecode wordt gezet.
SCF
Bit C van de conditiecode wordt gezet.
SET
Een bit van de rechter operand wordt 1 gemaakt. Geen invloed op conditiecode.
SLA
De bits van de operand worden een plaats naar links geschoven. De hoogste bit wordt naar C gekopieerd. De laagste bit van het register wordt 0. De conditiecode wordt gezet.
SL1
(ongedocumenteerd) De bits van de operand worden een plaats naar links geschoven. De hoogste bit wordt naar C gekopieerd. De laagste bit van het register wordt 1. De conditiecode wordt gezet.
SRA
De bits van de operand worden een plaats naar rechts geschoven. De laagste bit wordt naar C gekopieerd. De hoogste bit van het register blijft onveranderd. De conditiecode wordt gezet.
SRL
De bits van de operand worden een plaats naar rechts geschoven. De laagste bit wordt naar C gekopieerd. De hoogste bit van het register wordt 0. De conditiecode wordt gezet.
SUB
De operand wordt afgetrokken van A. Het resultaat komt in A. De conditiecode wordt gezet.
XOR
Logische exclusieve Of van A en de operand. Het resultaat komt in A. De conditiecode wordt gezet.