付録B
命令一覧
この付録では、TATARAが受け付けるすべての命令の書き方を、ザイログのマニュアルと同じ分類でまとめ、TATARAがアセンブルするバイトと、命令の働きを簡単に示します。オペランドの書き方は9章で説明しています。それぞれの命令がくわしく何をするか、どのフラグを変えるか、どれだけ時間がかかるかは、Z80のプログラミングを学ぶ本や講座で確かめてください。
TATARAは、公開されているZ80の命令、9.5節の未公開命令、R800の2つのかけ算の命令を受け付けます。
B.1 表の読み方
表はどれも3つの列からなります。命令の書き方、TATARAがそれに対して書き出すバイト(16進数)、そして命令の働きです。最初の2つの列で斜体になっている語は、使うたびに変わるものを表します。
| 語 | 表すもの |
| r, r’ | レジスターB、C、D、E、H、L、Aのどれか |
| n | 1バイト。どんな式でもよく、その下位バイトが使われる |
| nn | 1ワード。アドレスか16ビットの値 |
| lo hi | nnの2バイト。下位バイトが先 |
| d | インデックス付きオペランドのディスプレースメント。−128から127まで |
| e | 相対ジャンプの飛び先。TATARAが書き出すバイトは、命令の終わりから飛び先までの距離で、−128から127まで |
| b | ビット番号。0から7まで |
| x, x’ | インデックス・ハーフ(B.13節) |
命令の中には、使うレジスターによってバイトが変わるものがあります。あるレジスターを別のレジスターにコピーするld r,r’には、ld b,bからld a,aまで49通りあります。表では、それぞれに 1行ずつ使う代わりに、バイトを求める規則を示します。レジスターにはそれぞれ番号があり、これをレジスター・コードといいます。
| B | C | D | E | H | L | (HL) | A |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
バイトの列で、8rはrのコードの8倍を表し、数は16進数で足します。ld r,r’の行には40+8r+r’とあります。ld d,bでは、Dのコードが2、Bのコードが0なので、バイトは40h + 8×2 + 0 = 40h + 10h = 50hです。同じように、add a,rは80+rなので、add a,eは80h + 3 = 83hです。bit b,rはCB 40+8b+rなので、bit 7,aはCBのあとに40h + 8×7 + 7 = 40h + 38h + 7 = 7Fhが続きます。
pushのレジスター・ペアやjpの条件のように、数通りしかない命令は、それぞれに1行ずつ使い、バイトをそのまま示します。
IXやIYを使う命令は、HLを使う命令の前にプレフィックスのバイトを付けたものです。IXにはDD、IYにはFDを付けます。dのある書き方では、ディスプレースメントのバイトはオペコードのあとに続きます。DD CBやFD CBで始まるものでは、最後のバイトの前に入ります。
B.2 8ビットのロード
| 書き方 | バイト |
働き |
| ld r,r’ | 40+8r+r’ |
r’をrにコピーする |
| ld r,n | 06+8r n |
nをrにロードする |
| ld r,(hl) | 46+8r |
HLの示すアドレスのバイトをrにロードする |
| ld r,(ix+d) | DD 46+8r d |
IX+dのバイトをrにロードする |
| ld r,(iy+d) | FD 46+8r d |
IY+dのバイトをrにロードする |
| ld (hl),r | 70+r |
rをHLの示すアドレスに書き込む |
| ld (ix+d),r | DD 70+r d |
rをIX+dに書き込む |
| ld (iy+d),r | FD 70+r d |
rをIY+dに書き込む |
| ld (hl),n | 36 n |
nをHLの示すアドレスに書き込む |
| ld (ix+d),n | DD 36 d n |
nをIX+dに書き込む |
| ld (iy+d),n | FD 36 d n |
nをIY+dに書き込む |
| ld a,(bc) | 0A |
BCの示すアドレスからAをロードする |
| ld a,(de) | 1A |
DEの示すアドレスからAをロードする |
| ld a,(nn) | 3A lo hi |
アドレスnnからAをロードする |
| ld (bc),a | 02 |
AをBCの示すアドレスに書き込む |
| ld (de),a | 12 |
AをDEの示すアドレスに書き込む |
| ld (nn),a | 32 lo hi |
Aをアドレスnnに書き込む |
| ld a,i | ED 57 |
割り込みベクター・レジスターをAにコピーする |
| ld a,r | ED 5F |
リフレッシュ・レジスターをAにコピーする |
| ld i,a | ED 47 |
Aを割り込みベクター・レジスターにコピーする |
| ld r,a | ED 4F |
Aをリフレッシュ・レジスターにコピーする |
B.3 16ビットのロード、PUSHとPOP
| 書き方 | バイト |
働き |
| ld bc,nn | 01 lo hi |
nnをBCにロードする |
| ld de,nn | 11 lo hi |
nnをDEにロードする |
| ld hl,nn | 21 lo hi |
nnをHLにロードする |
| ld sp,nn | 31 lo hi |
nnをSPにロードする |
| ld ix,nn | DD 21 lo hi |
nnをIXにロードする |
| ld iy,nn | FD 21 lo hi |
nnをIYにロードする |
| ld bc,(nn) | ED 4B lo hi |
アドレスnnからBCをロードする |
| ld de,(nn) | ED 5B lo hi |
アドレスnnからDEをロードする |
| ld hl,(nn) | 2A lo hi |
アドレスnnからHLをロードする |
| ld sp,(nn) | ED 7B lo hi |
アドレスnnからSPをロードする |
| ld ix,(nn) | DD 2A lo hi |
アドレスnnからIXをロードする |
| ld iy,(nn) | FD 2A lo hi |
アドレスnnからIYをロードする |
| ld (nn),bc | ED 43 lo hi |
BCをアドレスnnに書き込む |
| ld (nn),de | ED 53 lo hi |
DEをアドレスnnに書き込む |
| ld (nn),hl | 22 lo hi |
HLをアドレスnnに書き込む |
| ld (nn),sp | ED 73 lo hi |
SPをアドレスnnに書き込む |
| ld (nn),ix | DD 22 lo hi |
IXをアドレスnnに書き込む |
| ld (nn),iy | FD 22 lo hi |
IYをアドレスnnに書き込む |
| ld sp,hl | F9 |
HLをSPにコピーする |
| ld sp,ix | DD F9 |
IXをSPにコピーする |
| ld sp,iy | FD F9 |
IYをSPにコピーする |
| push bc | C5 |
BCをスタックに積む |
| push de | D5 |
DEをスタックに積む |
| push hl | E5 |
HLをスタックに積む |
| push af | F5 |
AFをスタックに積む |
| push ix | DD E5 |
IXをスタックに積む |
| push iy | FD E5 |
IYをスタックに積む |
| pop bc | C1 |
スタックからBCを取り出す |
| pop de | D1 |
スタックからDEを取り出す |
| pop hl | E1 |
スタックからHLを取り出す |
| pop af | F1 |
スタックからAFを取り出す |
| pop ix | DD E1 |
スタックからIXを取り出す |
| pop iy | FD E1 |
スタックからIYを取り出す |
B.4 交換、ブロック転送、サーチ
| 書き方 | バイト |
働き |
| ex de,hl | EB |
DEとHLを交換する |
| ex af,af’ | 08 |
AFと裏のAFを交換する |
| exx | D9 |
BC、DE、HLを裏のレジスターと交換する |
| ex (sp),hl | E3 |
HLとスタックの先頭のワードを交換する |
| ex (sp),ix | DD E3 |
IXとスタックの先頭のワードを交換する |
| ex (sp),iy | FD E3 |
IYとスタックの先頭のワードを交換する |
| ldi | ED A0 |
(HL)から(DE)へ1バイトコピーし、先へ進む |
| ldir | ED B0 |
BCが0になるまでLDIを繰り返す |
| ldd | ED A8 |
(HL)から(DE)へ1バイトコピーし、後ろへ戻る |
| lddr | ED B8 |
BCが0になるまでLDDを繰り返す |
| cpi | ED A1 |
Aと(HL)を比べ、先へ進む |
| cpir | ED B1 |
一致するかBCが0になるまでCPIを繰り返す |
| cpd | ED A9 |
Aと(HL)を比べ、後ろへ戻る |
| cpdr | ED B9 |
一致するかBCが0になるまでCPDを繰り返す |
B.5 8ビットの算術演算と論理演算
| 書き方 | バイト |
働き |
| add a,r | 80+r |
rをAに加える |
| add a,n | C6 n |
nをAに加える |
| add a,(hl) | 86 |
(HL)のバイトをAに加える |
| add a,(ix+d) | DD 86 d |
IX+dのバイトをAに加える |
| add a,(iy+d) | FD 86 d |
IY+dのバイトをAに加える |
| adc a,r | 88+r |
rとキャリーをAに加える |
| adc a,n | CE n |
nとキャリーをAに加える |
| adc a,(hl) | 8E |
(HL)のバイトとキャリーをAに加える |
| adc a,(ix+d) | DD 8E d |
IX+dのバイトとキャリーをAに加える |
| adc a,(iy+d) | FD 8E d |
IY+dのバイトとキャリーをAに加える |
| sub r | 90+r |
Aからrを引く |
| sub n | D6 n |
Aからnを引く |
| sub (hl) | 96 |
Aから(HL)のバイトを引く |
| sub (ix+d) | DD 96 d |
AからIX+dのバイトを引く |
| sub (iy+d) | FD 96 d |
AからIY+dのバイトを引く |
| sbc a,r | 98+r |
Aからrとキャリーを引く |
| sbc a,n | DE n |
Aからnとキャリーを引く |
| sbc a,(hl) | 9E |
Aから(HL)のバイトとキャリーを引く |
| sbc a,(ix+d) | DD 9E d |
AからIX+dのバイトとキャリーを引く |
| sbc a,(iy+d) | FD 9E d |
AからIY+dのバイトとキャリーを引く |
| and r | A0+r |
AとrのAND |
| and n | E6 n |
AとnのAND |
| and (hl) | A6 |
Aと(HL)のバイトのAND |
| and (ix+d) | DD A6 d |
AとIX+dのバイトのAND |
| and (iy+d) | FD A6 d |
AとIY+dのバイトのAND |
| xor r | A8+r |
AとrのXOR |
| xor n | EE n |
AとnのXOR |
| xor (hl) | AE |
Aと(HL)のバイトのXOR |
| xor (ix+d) | DD AE d |
AとIX+dのバイトのXOR |
| xor (iy+d) | FD AE d |
AとIY+dのバイトのXOR |
| or r | B0+r |
AとrのOR |
| or n | F6 n |
AとnのOR |
| or (hl) | B6 |
Aと(HL)のバイトのOR |
| or (ix+d) | DD B6 d |
AとIX+dのバイトのOR |
| or (iy+d) | FD B6 d |
AとIY+dのバイトのOR |
| cp r | B8+r |
Aとrを比べる |
| cp n | FE n |
Aとnを比べる |
| cp (hl) | BE |
Aと(HL)のバイトを比べる |
| cp (ix+d) | DD BE d |
AとIX+dのバイトを比べる |
| cp (iy+d) | FD BE d |
AとIY+dのバイトを比べる |
| inc r | 04+8r |
rに1を加える |
| inc (hl) | 34 |
(HL)のバイトに1を加える |
| inc (ix+d) | DD 34 d |
IX+dのバイトに1を加える |
| inc (iy+d) | FD 34 d |
IY+dのバイトに1を加える |
| dec r | 05+8r |
rから1を引く |
| dec (hl) | 35 |
(HL)のバイトから1を引く |
| dec (ix+d) | DD 35 d |
IX+dのバイトから1を引く |
| dec (iy+d) | FD 35 d |
IY+dのバイトから1を引く |
B.6 汎用とCPU制御
| 書き方 | バイト |
働き |
| daa | 27 |
BCDの加算や減算のあとでAを補正する |
| cpl | 2F |
Aのすべてのビットを反転する |
| neg | ED 44 |
Aの符号を反転する |
| ccf | 3F |
キャリー・フラグを反転する |
| scf | 37 |
キャリー・フラグをセットする |
| nop | 00 |
何もしない |
| halt | 76 |
割り込みを待つ |
| di | F3 |
割り込みを禁止する |
| ei | FB |
割り込みを許可する |
| im 0 | ED 46 |
割り込みモード0にする |
| im 1 | ED 56 |
割り込みモード1にする |
| im 2 | ED 5E |
割り込みモード2にする |
B.7 16ビットの算術演算
| 書き方 | バイト |
働き |
| add hl,bc | 09 |
BCをHLに加える |
| add hl,de | 19 |
DEをHLに加える |
| add hl,hl | 29 |
HLをHLに加える |
| add hl,sp | 39 |
SPをHLに加える |
| adc hl,bc | ED 4A |
BCとキャリーをHLに加える |
| adc hl,de | ED 5A |
DEとキャリーをHLに加える |
| adc hl,hl | ED 6A |
HLとキャリーをHLに加える |
| adc hl,sp | ED 7A |
SPとキャリーをHLに加える |
| sbc hl,bc | ED 42 |
HLからBCとキャリーを引く |
| sbc hl,de | ED 52 |
HLからDEとキャリーを引く |
| sbc hl,hl | ED 62 |
HLからHLとキャリーを引く |
| sbc hl,sp | ED 72 |
HLからSPとキャリーを引く |
| add ix,bc | DD 09 |
BCをIXに加える |
| add ix,de | DD 19 |
DEをIXに加える |
| add ix,ix | DD 29 |
IXをIXに加える |
| add ix,sp | DD 39 |
SPをIXに加える |
| add iy,bc | FD 09 |
BCをIYに加える |
| add iy,de | FD 19 |
DEをIYに加える |
| add iy,iy | FD 29 |
IYをIYに加える |
| add iy,sp | FD 39 |
SPをIYに加える |
| inc bc | 03 |
BCに1を加える |
| inc de | 13 |
DEに1を加える |
| inc hl | 23 |
HLに1を加える |
| inc sp | 33 |
SPに1を加える |
| inc ix | DD 23 |
IXに1を加える |
| inc iy | FD 23 |
IYに1を加える |
| dec bc | 0B |
BCから1を引く |
| dec de | 1B |
DEから1を引く |
| dec hl | 2B |
HLから1を引く |
| dec sp | 3B |
SPから1を引く |
| dec ix | DD 2B |
IXから1を引く |
| dec iy | FD 2B |
IYから1を引く |
B.8 ローテートとシフト
| 書き方 | バイト |
働き |
| rlca | 07 |
Aを左に回転する |
| rla | 17 |
Aをキャリーを通して左に回転する |
| rrca | 0F |
Aを右に回転する |
| rra | 1F |
Aをキャリーを通して右に回転する |
| rlc r | CB 00+r |
rを左に回転する |
| rlc (hl) | CB 06 |
(HL)のバイトを左に回転する |
| rlc (ix+d) | DD CB d 06 |
IX+dのバイトを左に回転する |
| rlc (iy+d) | FD CB d 06 |
IY+dのバイトを左に回転する |
| rl r | CB 10+r |
rをキャリーを通して左に回転する |
| rl (hl) | CB 16 |
(HL)のバイトをキャリーを通して左に回転する |
| rl (ix+d) | DD CB d 16 |
IX+dのバイトをキャリーを通して左に回転する |
| rl (iy+d) | FD CB d 16 |
IY+dのバイトをキャリーを通して左に回転する |
| rrc r | CB 08+r |
rを右に回転する |
| rrc (hl) | CB 0E |
(HL)のバイトを右に回転する |
| rrc (ix+d) | DD CB d 0E |
IX+dのバイトを右に回転する |
| rrc (iy+d) | FD CB d 0E |
IY+dのバイトを右に回転する |
| rr r | CB 18+r |
rをキャリーを通して右に回転する |
| rr (hl) | CB 1E |
(HL)のバイトをキャリーを通して右に回転する |
| rr (ix+d) | DD CB d 1E |
IX+dのバイトをキャリーを通して右に回転する |
| rr (iy+d) | FD CB d 1E |
IY+dのバイトをキャリーを通して右に回転する |
| sla r | CB 20+r |
rを左にシフトする |
| sla (hl) | CB 26 |
(HL)のバイトを左にシフトする |
| sla (ix+d) | DD CB d 26 |
IX+dのバイトを左にシフトする |
| sla (iy+d) | FD CB d 26 |
IY+dのバイトを左にシフトする |
| sra r | CB 28+r |
rをビット7を保って右にシフトする |
| sra (hl) | CB 2E |
(HL)のバイトをビット7を保って右にシフトする |
| sra (ix+d) | DD CB d 2E |
IX+dのバイトをビット7を保って右にシフトする |
| sra (iy+d) | FD CB d 2E |
IY+dのバイトをビット7を保って右にシフトする |
| srl r | CB 38+r |
rをビット7に0を入れて右にシフトする |
| srl (hl) | CB 3E |
(HL)のバイトをビット7に0を入れて右にシフトする |
| srl (ix+d) | DD CB d 3E |
IX+dのバイトをビット7に0を入れて右にシフトする |
| srl (iy+d) | FD CB d 3E |
IY+dのバイトをビット7に0を入れて右にシフトする |
| rld | ED 6F |
Aと(HL)の間で数字を左に回転する |
| rrd | ED 67 |
Aと(HL)の間で数字を右に回転する |
B.9 ビットのセット、リセット、テスト
| 書き方 | バイト |
働き |
| bit b,r | CB 40+8b+r |
rのビットbを調べる |
| bit b,(hl) | CB 46+8b |
(HL)のバイトのビットbを調べる |
| bit b,(ix+d) | DD CB d 46+8b |
IX+dのバイトのビットbを調べる |
| bit b,(iy+d) | FD CB d 46+8b |
IY+dのバイトのビットbを調べる |
| set b,r | CB C0+8b+r |
rのビットbをセットする |
| set b,(hl) | CB C6+8b |
(HL)のバイトのビットbをセットする |
| set b,(ix+d) | DD CB d C6+8b |
IX+dのバイトのビットbをセットする |
| set b,(iy+d) | FD CB d C6+8b |
IY+dのバイトのビットbをセットする |
| res b,r | CB 80+8b+r |
rのビットbをクリアする |
| res b,(hl) | CB 86+8b |
(HL)のバイトのビットbをクリアする |
| res b,(ix+d) | DD CB d 86+8b |
IX+dのバイトのビットbをクリアする |
| res b,(iy+d) | FD CB d 86+8b |
IY+dのバイトのビットbをクリアする |
B.10 ジャンプ
| 書き方 | バイト |
働き |
| jp nn | C3 lo hi |
nnへジャンプする |
| jp nz,nn | C2 lo hi |
ゼロでなければnnへジャンプする |
| jp z,nn | CA lo hi |
ゼロならnnへジャンプする |
| jp nc,nn | D2 lo hi |
キャリーがなければnnへジャンプする |
| jp c,nn | DA lo hi |
キャリーがあればnnへジャンプする |
| jp po,nn | E2 lo hi |
パリティが奇数ならnnへジャンプする |
| jp pe,nn | EA lo hi |
パリティが偶数ならnnへジャンプする |
| jp p,nn | F2 lo hi |
正ならnnへジャンプする |
| jp m,nn | FA lo hi |
負ならnnへジャンプする |
| jr e | 18 e |
eへジャンプする |
| jr nz,e | 20 e |
ゼロでなければeへジャンプする |
| jr z,e | 28 e |
ゼロならeへジャンプする |
| jr nc,e | 30 e |
キャリーがなければeへジャンプする |
| jr c,e | 38 e |
キャリーがあればeへジャンプする |
| jp (hl) | E9 |
HLの示すアドレスへジャンプする |
| jp (ix) | DD E9 |
IXの示すアドレスへジャンプする |
| jp (iy) | FD E9 |
IYの示すアドレスへジャンプする |
| djnz e | 10 e |
Bから1を引き、0でなければeへジャンプする |
B.11 コール、リターン、リスタート
| 書き方 | バイト |
働き |
| call nn | CD lo hi |
nnのルーチンを呼び出す |
| call nz,nn | C4 lo hi |
ゼロでなければnnのルーチンを呼び出す |
| call z,nn | CC lo hi |
ゼロならnnのルーチンを呼び出す |
| call nc,nn | D4 lo hi |
キャリーがなければnnのルーチンを呼び出す |
| call c,nn | DC lo hi |
キャリーがあればnnのルーチンを呼び出す |
| call po,nn | E4 lo hi |
パリティが奇数ならnnのルーチンを呼び出す |
| call pe,nn | EC lo hi |
パリティが偶数ならnnのルーチンを呼び出す |
| call p,nn | F4 lo hi |
正ならnnのルーチンを呼び出す |
| call m,nn | FC lo hi |
負ならnnのルーチンを呼び出す |
| ret | C9 |
ルーチンから戻る |
| ret nz | C0 |
ゼロでなければ戻る |
| ret z | C8 |
ゼロなら戻る |
| ret nc | D0 |
キャリーがなければ戻る |
| ret c | D8 |
キャリーがあれば戻る |
| ret po | E0 |
パリティが奇数なら戻る |
| ret pe | E8 |
パリティが偶数なら戻る |
| ret p | F0 |
正なら戻る |
| ret m | F8 |
負なら戻る |
| reti | ED 4D |
割り込みルーチンから戻る |
| retn | ED 45 |
マスク不可能割り込みのルーチンから戻る |
| rst 00h | C7 |
00hのルーチンを呼び出す |
| rst 08h | CF |
08hのルーチンを呼び出す |
| rst 10h | D7 |
10hのルーチンを呼び出す |
| rst 18h | DF |
18hのルーチンを呼び出す |
| rst 20h | E7 |
20hのルーチンを呼び出す |
| rst 28h | EF |
28hのルーチンを呼び出す |
| rst 30h | F7 |
30hのルーチンを呼び出す |
| rst 38h | FF |
38hのルーチンを呼び出す |
B.12 入出力
| 書き方 | バイト |
働き |
| in a,(n) | DB n |
ポートnからAへ読み込む |
| in r,(c) | ED 40+8r |
Cのポートからrへ読み込む |
| ini | ED A2 |
Cのポートから(HL)へ読み込み、先へ進む |
| inir | ED B2 |
Bが0になるまでINIを繰り返す |
| ind | ED AA |
Cのポートから(HL)へ読み込み、後ろへ戻る |
| indr | ED BA |
Bが0になるまでINDを繰り返す |
| out (n),a | D3 n |
Aをポートnへ書き出す |
| out (c),r | ED 41+8r |
rをCのポートへ書き出す |
| outi | ED A3 |
(HL)をCのポートへ書き出し、先へ進む |
| otir | ED B3 |
Bが0になるまでOUTIを繰り返す |
| outd | ED AB |
(HL)をCのポートへ書き出し、後ろへ戻る |
| otdr | ED BB |
Bが0になるまでOUTDを繰り返す |
B.13 未公開命令
9.5節の未公開命令です。SLLの行では、rは7つのレジスターのどれでもかまいません。ほかの行では、xとx’はIXHかIXLで、そのコードはHとLのコードと同じ4と5です。rはB、C、D、E、Aのどれかで、x’はxと同じレジスターの半分です。表はIXのバイトを示します。IYHとIYLでは、DDの代わりにFDを使います。ld iyl,aはFD 6Fです。
| 書き方 | バイト |
働き |
| sll r | CB 30+r |
rを左へシフトし、ビット0を1にする |
| sll (hl) | CB 36 |
HLのアドレスのバイトに同じことをする |
| sll (ix+d) | DD CB d 36 |
IX+dのバイトに同じことをする |
| sll (iy+d) | FD CB d 36 |
IY+dのバイトに同じことをする |
| ld x,r | DD 40+8x+r |
rをxにコピーする |
| ld r,x | DD 40+8r+x |
xをrにコピーする |
| ld x,x’ | DD 40+8x+x’ |
IXの一方の半分を他方か、同じ半分にコピーする |
| ld x,n | DD 06+8x n |
nをxに入れる |
| inc x | DD 04+8x |
xに1を足す |
| dec x | DD 05+8x |
xから1を引く |
| add a,x | DD 80+x |
Aにxを足す |
| adc a,x | DD 88+x |
Aにxとキャリーを足す |
| sub x | DD 90+x |
Aからxを引く |
| sbc a,x | DD 98+x |
Aからxとキャリーを引く |
| and x | DD A0+x |
AとxのAND |
| xor x | DD A8+x |
AとxのXOR |
| or x | DD B0+x |
AとxのOR |
| cp x | DD B8+x |
Aとxを比べる |
| in f,(c) | ED 70 |
Cのポートを読んでフラグを設定する。Aは変わらない |
| out (c),0 | ED 71 |
Cのポートに0か0FFhを書く(9.5節) |
B.14 R800のかけ算
| 書き方 | バイト |
働き |
| mulub a,r | ED C1+8r |
A×r、結果はHL |
| muluw hl,bc | ED C3 |
HL×BC、結果はDE:HL |
| muluw hl,sp | ED F3 |
HL×SP、結果はDE:HL |
B.15 受け付けない書き方
ほかのアセンブラーでは受け付けられたり、うまくいきそうに見えたりしても、ザイログの一覧にも、TATARAが受け付ける未公開命令にもない書き方があります。TATARAはそれらを受け付けません(表B.14)。
| 書いたもの | メッセージ |
代わりに書くもの |
| sub a,b | not a form this instruction has. |
sub b |
| and a,b | not a form this instruction has. |
and b |
| cp a,b | not a form this instruction has. |
cp b |
| add b | not a form this instruction has. |
add a,b |
| ex af,af | not a form this instruction has. |
ex af,af’ |
| jp hl | undefined symbol in an expression. |
jp (hl) |
| ld h,ixl | not a form this instruction has. |
なし |
| ld ixh,iyl | not a form this instruction has. | なし |
| ld ixh,(hl) | not a form this instruction has. |
なし |
| rlc ixh | not a form this instruction has. |
なし |
| rlc (ix+2),b | not a form this instruction has. |
rlc
(ix+2)と |
| in (c) | not a form this instruction has. |
in f,(c) |
| sl1 b | not a directive, a macro or an instruction. |
sll b |
| ld a,hx | undefined symbol in an expression. |
ld a,ixh |
SUB、AND、OR、XOR、CPはいつもAに対して働くので、ザイログはAを書きません。ADD、ADC、SBCには 16ビットの書き方もあるので、8ビットの書き方ではAを書きます。かっこがないと、jp hlはjp nnと読まれ、hlはアドレスの名前と見なされますが、その名前は定義されていません。
インデックス・ハーフを使う書き方が書けないのは、1つのプレフィックスが命令全体にかかるからです(9.5節)。rlc (ix+2),bは、結果をメモリとレジスターの両方に入れる未公開の書き方の1つで、TATARAは受け付けません。in (c)、sl1、hxは、TATARAでは1通りにしか書かない命令の、ほかのアセンブラーでの綴りです。
ディスプレースメントのない(IX)と(IY)は受け付けられ、(IX+0)と(IY+0)の意味になります。ld a,(ix)はDD 7E 00です。