Z80 Code Refference


命令やステート数をよく忘れるので個人的備忘録として。
レイアウトは『お受験に出るゲームボーイ』さんとGameBoy Dev'rsの命令表を参考にさせていただきました。
未定義命令については Sean Young 氏の "Z80 Undocumented Features" ver0.91 を元にしています。
memo1:PC-6001やMSXはM1サイクルに1ウェイト必要なのでステート数が表の数値+1らしいです。M1が2つある場合は+2、I/Oアクセスにはさらに+1。

ニーモニックと機械語の対応表も作ってみました。

▼ フラグの意味

Sサインフラグ。演算結果の最上位ビットのコピー。
Zゼロフラグ。演算結果が 0 なら 1。
Y演算結果の bit5 のコピー。
Hハーフキャリーフラグ。bit 3 から bit 4 への桁上がり(桁借り)のとき 1 になる。
X演算結果の bit3 のコピー。
P/Vパリティフラグまたはオーバーフローフラグまたは IFF2 の状態(兼用)。
セットされたビット数が偶数(pe)のとき 1。奇数(po)のとき 0。
演算によって結果が +127 〜 -128 の範囲を超えたとき 1(pe)。範囲内に収まるときは 0(po)。
特別な命令で IFF2 の状態がコピーされる。
Nサブトラクトフラグ。演算が加算系の時 0、減算系のとき 1。
Cキャリーフラグ。演算で桁溢れ・桁借りが生じたとき 1。
bit76543210
FLAG S Z Y H X P N C

▼ 記号の意味

-変化なし
0リセット
1セット
*結果によって変わる
?不定
PP/V フラグはパリティ判定を示す(1=偶数パリティ,0=奇数パリティ)
VP/V フラグはオーバーフロー判定を示す(1=オーバーフローあり,0=オーバーフローなし)
IFF割り込み状態

▼ 8ビット・ロード命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
LD r,r' r r' - 4 1 - - - - - -
LD r,n r n 7 2
LD r,(HL) r (HL) 7 1
LD r,(IX+d)
LD r,(IY+d)
r (IX+d)
r (IY+d)
-128≦d≦127 19 3
LD (HL),r (HL) r - 7 1
LD (IX+d),r
LD (IY+d),r
(IX+d) r
(IY+d) r
-128≦d≦127 19 3
LD (HL),n (HL) n - 10 2
LD (IX+d),n
LD (IY+d),n
(IX+d) n
(IY+d) n
-128≦d≦127 19 4
LD A,(BC)
LD A,(DE)
A (BC)
A (DE)
- 7 1
LD A,(nn) A (nn) 13 3
LD (BC),A
LD (DE),A
(BC) A
(DE) A
7 1
LD (nn),A (nn) A 13 3
LD A,I A I 9 2 * * 0 IFF2 0 -
LD A,R A R 9 2 * * 0 IFF2 0 -
LD I,A I A 9 2 - - - - - -
LD R,A R A 9 2
LD xr,n xr n 未定義命令
xr=IXH,IYH,IXL,IYL
11 3 - - - - - -
LD xr,r xr r 未定義命令
xr=IXH,IYH,IXL,IYL
r=A,B,C,D,E
8 2 - - - - - -
LD r,xr r xr 未定義命令
r=A,B,C,D,E
xr=IXH,IYH,IXL,IYL
8 2 - - - - - -
LD IXH,xr
LD IXL,xr
IXH xr
IXL xr
未定義命令
xr=IXH,IXL
8 2 - - - - - -
LD IYH,xr
LD IYL,xr
IYH xr
IYL xr
未定義命令
xr=IYH,IYL
8 2 - - - - - -

▼ 16ビット・ロード命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
LD dd,nn dd nn dd=BC,DE,HL,SP 10 3 - - - - - -
LD IX,nn
LD IY,nn
IX nn
IY nn
- 14 4
LD HL,(nn) H (nn+1)
L (nn)
16 3
LD dd,(nn) dd(H) (nn+1)
dd(L) (nn)
dd=BC,DE,HL,SP 20 4
LD IX,(nn)

LD IY,(nn)
IX(H) (nn+1)
IX(L) (nn)

IY(H) (nn+1)
IY(L) (nn)
- 20 4
LD (nn),HL (nn+1) H
(nn) L
16 3
LD (nn),dd (nn+1) dd(H)
(nn) dd(L)
dd=BC,DE,HL,SP 20 4
LD (nn),IX

LD (nn),IY
(nn+1) IX(H)
(nn) IX(L)

(nn+1) IY(H)
(nn) IY(L)
- 20 4
LD SP,HL SP HL 6 1
LD SP,IX
LD SP,IY
SP IX
SP IY
10 2
PUSH ss (SP-2) ss(L)
(SP-1) ss(H)
SP SP-2
ss=BC,DE,HL,AF 11 1
PUSH IX

PUSH IY
(SP-2) IX(L)
(SP-1) IX(H)
SP SP-2

(SP-2) IY(L)
(SP-1) IY(H)
SP SP-2
- 15 2
POP ss ss(H) (SP+1)
ss(L) (SP)
SP SP+2
ss=BC,DE,HL,AF 10 1
POP IX

POP IY
IX(H) (SP+1)
IX(L) (SP)
SP SP+2

IY(H) (SP+1)
IY(L) (SP)
SP SP+2
- 14 2

▼ エクスチェンジ命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
EX DE,HL DE HL - 4 1 - - - - - -
EX AF,AF' AF AF' 4 1
EXX BC BC'
DE DE'
HL HL'
4 1
EX (SP),HL H (SP+1)
L (SP)
19 1
EX (SP),IX

EX (SP),IY
IX(H) (SP+1)
IX(L) (SP)

IY(H) (SP+1)
IY(L) (SP)
23 2

▼ ブロック転送命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
LDI (DE) (HL)
DEDE+1
HLHL+1
BCBC-1
BC-1=0 なら P/V=0
その他 P/V=1
16 2 - - 0 * 0 -
LDIR (DE) (HL)
DEDE+1
HLHL+1
BCBC-1
until BC=0
BC≠0なら21
BC=0なら16
完了後P/V=0
21/16 2 - - 0 * 0 -
LDD (DE) (HL)
DEDE-1
HLHL-1
BCBC-1
BC-1=0 なら P/V=0
その他 P/V=1
16 2 - - 0 * 0 -
LDDR (DE) (HL)
DEDE-1
HLHL-1
BCBC-1
until BC=0
BC≠0なら21
BC=0なら16
完了後P/V=0
21/16 2 - - 0 * 0 -

▼ ブロックサーチ命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
CPI A-(HL)
HLHL+1
BCBC-1
BC-1=0 なら P/V=0
その他 P/V=1
A-(HL)の結果が
SF,ZF,HFに反映
16 2 * * * * 1 -
CPIR A-(HL)
HLHL+1
BCBC-1
until BC=0 or A=(HL)
BC-1=0 なら P/V=0
その他 P/V=1
A-(HL)の結果が
SF,ZF,HFに反映
BC≠0 かつ
A≠(HL) なら 21
BC=0 または
A=(HL) なら 16
2 * * * * 1 -
CPD A-(HL)
HLHL-1
BCBC-1
BC-1=0 なら P/V=0
その他 P/V=1
A-(HL)の結果が
SF,ZF,HFに反映
16 2 * * * * 1 -
CPDR A-(HL)
HLHL-1
BCBC-1
until BC=0 or A=(HL)
BC-1=0 なら P/V=0
その他 P/V=1
A-(HL)の結果が
SF,ZF,HFに反映
BC≠0 かつ
A≠(HL) なら 21
BC=0 または
A=(HL) なら 16
2 * * * * 1 -
 CPIR/CPDR は一致した次のアドレスで停止する。
 具体的な動作としては A-(HL) の後、HL++(HL--)、BC-- してからフラグを反映させる。
 最後まで一致しなかった場合、ZF=0、P/V=0
 途中で一致した場合、ZF=1、P/V=1
 最後で一致した場合、ZF=1、P/V=0

▼ 8ビット算術論理演算命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
ADD A,r AA+r - 4 1 * * * v 0 *
ADD A,n AA+n 7 2
ADD A,(HL) AA+(HL) 7 1
ADD A,(IX+d)
ADD A,(IY+d)
AA+(IX+d)
AA+(IY+d)
-128≦d≦127 19 3
ADC A,r AA+r+CY - 4 1
ADC A,n AA+n+CY 7 2
ADC A,(HL) AA+(HL)+CY 7 1
ADC A,(IX+d)
ADC A,(IY+d)
AA+(IX+d)+CY
AA+(IY+d)+CY
-128≦d≦127 19 3
ADD A,xr AA+xr 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
ADC A,xr AA+xr+CY 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
SUB r AA-r - 4 1 * * * v 1 *
SUB n AA-n 7 2
SUB (HL) AA-(HL) 7 1
SUB (IX+d)
SUB (IY+d)
AA-(IX+d)
AA-(IY+d)
-128≦d≦127 19 3
SBC A,r AA-r-CY - 4 1
SBC A,n AA-n-CY 7 2
SBC A,(HL) AA-(HL)-CY 7 1
SBC A,(IX+d)
SBC A,(IY+d)
AA-(IX+d)-CY
AA-(IY+d)-CY
-128≦d≦127 19 3
SUB A,xr AA-xr 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
SBC A,xr AA-xr-CY 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
AND r AA∧r - 4 1 * * 1 p 0 0
AND n AA∧n 7 2
AND (HL) AA∧(HL) 7 1
AND (IX+d)
AND (IY+d)
AA∧(IX+d)
AA∧(IY+d)
-128≦d≦127 19 3
AND xr AA∧xr 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
OR r AA∨r - 4 1 * * 0 p 0 0
OR n AA∨n 7 2
OR (HL) AA∨(HL) 7 1
OR (IX+d)
OR (IY+d)
AA∨(IX+d)
AA∨(IY+d)
-128≦d≦127 19 3
or xr AA∨xr 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
XOR r AAr - 4 1 * * 0 p 0 0
XOR n AAn 7 2
XOR (HL) AA(HL) 7 1
XOR (IX+d)
XOR (IY+d)
AA(IX+d)
AA(IY+d)
-128≦d≦127 19 3
xor xr AAxr 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
CP r A-r - 4 1 * * * v 1 *
CP n A-n 7 2
CP (HL) A-(HL) 7 1
CP (IX+d)
CP (IY+d)
A-(IX+d)
A-(IY+d)
-128≦d≦127 19 3
cp xr A-xr 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
INC r rr+1 - 4 1 * * * v 0 -
INC (HL) (HL)(HL)+1 11 1
INC (IX+d)
INC (IY+d)
(IX+d)(IX+d)+1
(IY+d)(IY+d)+1
-128≦d≦127 23 3
INC xr xrxr+1 未定義命令
xr=IXH,IYH,IXL,IYL
8 2
DEC r rr-1 - 4 1 * * * v 1 -
DEC (HL) (HL)(HL)-1 11 1
DEC (IX+d)
DEC (IY+d)
(IX+d)(IX+d)-1
(IY+d)(IY+d)-1
-128≦d≦127 23 3
DEC xr xrxr-1 未定義命令
xr=IXH,IYH,IXL,IYL
8 2

▼ 16ビット算術演算命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
ADD HL,ss HLHL+ss ss=BC,DE,HL,SP 11 1 - - 注1 - 0 *
ADC HL,ss HLHL+ss+CY ss=BC,DE,HL,SP 15 2 * * 注1 v 0 *
SBC HL,ss HLHL-ss-CY ss=BC,DE,HL,SP 15 2 * * 注1 v 1 *
ADD IX,pp IXIX+pp pp=BC,DE,SP,IX 15 2 - - 注1 - 0 *
ADD IY,rr IYIY+rr rr=BC,DE,SP,IY 15 2 - - 注1 - 0 *
INC ss ssss+1 - 6 1 - - - - - -
INC IX
INC IY
IXIX+1
IYIY+1
- 10 2 - - - - - -
DEC ss ssss-1 - 6 1 - - - - - -
DEC IX
DEC IY
IXIX+1
IYIY-1
- 10 2 - - - - - -
 注1: 上位バイトの加算について HF を反映する。

▼ アキュムレータ操作命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
DAA 10進補正 - 4 1 * * * p - *
CPL A/A A=FFh-A
1の補数
4 1 - - 1 - 1 -
NEG A/A+1 A=00h-A
2の補数
8 2 * * * v 1 *
CCF CY/CY CFを反転する。 4 1 - - 注1 - 0 *
SCF CY1 - 4 1 - - 0 - 0 1
 注1: 命令実行前の CF が入る

▼ CPUコントロール命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
NOP No Operation - 4 1 - - - - - -
HALT CPU halted 4 1
DI IFF1,IFF20 4 1
EI IFF1,IFF21 4 1
IM 0 Interrupt mode 0 - 8 2
IM 1 Interrupt mode 1
割り込み発生時
$38番地にジャンプ
8 2
IM 2 Interrupt mode 2 Iレジスタを上位
割り込みベクタを
下位アドレスとする
番地から2byteを
読み出しジャンプ
8 2

▼ ローテート・シフト命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
RLCA A - 4 1 - - 0 - 0 *
RLA A 4 1
RRCA A 4 1
RRA A 4 1
RLC r - 8 2 * * 0 p 0 *
RLC (HL) 15 2
RLC (IX+d)
RLC (IY+d)
23 4
RLC r,(IX+d)
RLC r,(IY+d)

r(IX/Y+d)
RLC r
(IX/Y+d)r
未定義命令 23 4
RL r - 8 2 * * 0 p 0 *
RL (HL) 15 2
RL (IX+d)
RL (IY+d)
23 4
RL r,(IX+d)
RL r,(IY+d)

r(IX/Y+d)
RL r
(IX/Y+d)r
未定義命令 23 4
RRC r - 8 2 * * 0 p 0 *
RRC (HL) 15 2
RRC (IX+d)
RRC (IY+d)
23 4
RRC r,(IX+d)
RRC r,(IY+d)

r(IX/Y+d)
RRC r
(IX/Y)r
未定義命令 23 4
RR r - 8 2 * * 0 p 0 *
RR (HL) 15 2
RR (IX+d)
RR (IY+d)
23 4
RR r,(IX+d)
RR r,(IY+d)

r(IX/Y+d)
RR r
(IX/Y+d)r
未定義命令 23 4
SLA r - 8 2 * * 0 p 0 *
SLA (HL) 15 2
SLA (IX+d)
SLA (IY+d)
23 4
SLA r,(IX+d)
SLA r,(IY+d)

r(IX/Y+d)
SLA r
(IX/Y+d)r
未定義命令 23 4
SLL r
別名 SLIA
未定義命令 8 2 * * 0 p 0 *
SLL (HL)
別名 SLIA
15 2
SLL r,(IX+d)
SLL r,(IY+d)
別名 SLIA

r(IX/Y+d)
SLL r
(IX/Y+d)r
未定義命令 23 4
SRA r - 8 2 * * 0 p 0 *
SRA (HL) 15 2
SRA (IX+d)
SRA (IY+d)
23 4
SRA r,(IX+d)
SRA r,(IY+d)

r(IX/Y+d)
SRA r
(IX/Y+d)r
未定義命令 23 4
SRL r - 8 2 * * 0 p 0 *
SRL (HL) 15 2
SRL (IX+d)
SRL (IY+d)
23 4
SRL r,(IX+d)
SRL r,(IY+d)

r(IX/Y+d)
SRL r
(IX/Y+d)r
未定義命令 23 4
RLD A(HL) - 18 2 * * 0 p 0 -
RRD A(HL) 18 2

▼ ジャンプ・コール・リターン命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
JP nn PCnn - 10 3 - - - - - -
JP cc,nn If cc is true PCnn
else continue
cc(nz,z,nc,c,po,pe,p,m) 10 3
JR e PCPC+e -128≦e≦127 12 2
JR C,e If C=0 continue
If C=1 PCPC+e
7 if C=0
12 if C=1

-128≦e≦127
7/12 2
JR NC,e If C=1 continue
If C=0 PCPC+e
7 if C=1
12 if C=0

-128≦e≦127
7/12 2
JR Z,e If Z=0 continue
If Z=1 PCPC+e
7 if Z=0
12 if Z=1

-128≦e≦127
7/12 2
JR NZ,e If Z=1 continue
If Z=0 PCPC+e
7 if Z=1
12 if Z=0

-128≦e≦127
7/12 2
JP (HL) PCHL - 4 1
JP (IX)
JP (IY)
PCIX
PCIY
- 8 2
DJNZ e BB-1
if B=0 continue
if B≠0 PCPC+e
8 if B=0
13 if B≠0

-128≦e≦127
8/13 2
CALL nn (SP-1)PC(H)
(SP-2)PC(L)
SPSP-2
PCnn
- 17 3
CALL cc,nn if cc is true
(SP-1)PC(H)
(SP-2)PC(L)
SPSP-2
PCnn
cc(nz,z,nc,c,po,pe,p,m)
10 if cc is false
17 if cc is true
10/17 3
RET PC(L)(SP)
PC(H)(SP+1)
SPSP+2
- 10 1
RET cc if cc is true
PC(L)(SP)
PC(H)(SP+1)
SPSP+2
cc(nz,z,nc,c,po,pe,p,m)
5 if cc is false
11 if cc is true
5/11 1
RETI Return from
interrupt
PC(L)(SP)
PC(H)(SP+1)
SPSP+2
IFF1IFF2 14 2
RETN Return from
non maskable
interrupt
PC(L)(SP)
PC(H)(SP+1)
SPSP+2
IFF1IFF2 14 2
RST p (SP-1)PC(H)
(SP-2)PC(L)
SPSP-2
PC(H)0
PC(L)p
p=00h,08h,10h,18h
20h,28h,30h,38h
11 1

▼ 入出力命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
IN A,(n) A(n) A0-7n
A8-15A
11 2 - - - - - -
IN r,(C) r(C) A0-7C
A8-15B
12 2 * * 0 p 0 -
IN F,(C)
別名 IN (C)
F(C) I/O ポートから読んだ
内容はどこにも格納
されず、結果のフラグ
のみ変化する
12 2
INI (HL)(C)
BB-1
HLHL+1
A0-7C
A8-15B

B-1=0ならZ=1
その他Z=0
16 2 * * 注1 注2 注5 注1
INIR (HL)(C)
BB-1
HLHL+1
until B=0
A0-7C
A8-15B

21 if B≠0
16 if B=0
21/16 2 0 1 注1 注2 注5 注1
IND (HL)(C)
BB-1
HLHL-1
A0-7C
A8-15B

B-1=0ならZ=1
その他Z=0
16 2 * * 注3 注4 注5 注1
INDR (HL)(C)
BB-1
HLHL-1
until B=0
A0-7C
A8-15B

21 if B≠0
16 if B=0
21/16 2 0 1 注3 注4 注5 注1
OUT (n),A (n)A A0-7n
A8-15B
11 2 - - - - - -
OUT (C),0 (C)0
CMOS版では
(C)$FF
A0-7C
A8-15B
12 2 - - - - - -
OUT (C),r (C)r A0-7C
A8-15B
12 2 - - - - - -
OUTI BB-1
(C)(HL)
HLHL+1
A0-7C
A8-15B

B-1=0ならZ=1
その他Z=0
16 2 * * 注6 注7 注5 注6
OTIR BB-1
(C)(HL)
HLHL+1
until B=0
A0-7C
A8-15B

21 if B≠0
16 if B=0
21/16 2 0 1 注6 注7 注5 注6
OUTD BB-1
(C)(HL)
HLHL-1
A0-7C
A8-15B

B-1=0ならZ=1
その他Z=0
16 2 * * 注6 注7 注5 注6
OTDR BB-1
(C)(HL)
HLHL-1
until B=0
A0-7C
A8-15B

21 if B≠0
16 if B=0
21/16 2 0 1 注6 注7 注5 注6
以下 I/O ポートに書き込む値または読み込む値を n とする。

 注1: (n + (C + 1)) > 255 の時フラグはセットされる。ただし C + 1 は 0-255 の範囲内。
 注2: ((n + (C + 1)) & 7) xor B の結果のパリティが反映される。偶数=1 奇数=0。

 注3: (n + (C - 1)) > 255 の時フラグはセットされる。ただし C - 1 は 0-255 の範囲内。
 注4: ((n + (C - 1)) & 7) xor B の結果のパリティが反映される。偶数=1 奇数=0。

 注5: n の bit7 が反映される。

 注6: (n + L) > 255 の時フラグはセットされる。この L はインクリメント/デクリメント後の L(以下同)。
 注7: ((n + L) & 7) xor B の結果のパリティが反映される。偶数=1 奇数=0。

▼ ビット操作命令

LD8 LD16 EXX LDIR CPIR ADD8 ADD16 CPL NOP RLCA JP IO BIT
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
BIT b,r Z/rb - 8 2 注1 * 1 注2 0 -
BIT b,(HL) Z/(HL)b 12 2
BIT b,(IX+d)
BIT b,(IY+d)
Z/(IX+d)b
Z/(IY+d)b
20 4
SET b,r rb1 - 8 2 - - - - - -
SET b,(HL) (HL)b1 15 2
SET b,(IX+d)
SET b,(IY+d)
(IX+d)b1
(IY+d)b1
23 4
SET r,b,(IX+d)
SET r,b,(IY+d)
r(IX/Y+d)
rb1
(IX/Y+d)r
未定義命令 23 4
RES b,r rb0 - 8 2 - - - - - -
RES b,(HL) (HL)b0 15 2
RES b,(IX+d)
RES b,(IY+d)
(IX+d)b0
(IY+d)b0
23 4
RES r,b,(IX+d)
RES r,b,(IY+d)
r(IX/Y+d)
rb0
(IX/Y+d)r
未定義命令 23 4
 注1: 命令が bit 7,xxx かつ対象の bit7 が 1 ならフラグが立つ。
 注2: ZF と同じ動作をする。


▲ TOP