トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

A R800 インストラクション表

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 この表は、命令の種類ごとに分類して、R800のインストラクションをまとめたものです。表中のニーモニックは各命令の名前を現わし、命令動作でその動作内容を簡単に示しています。
 命令動作の欄で←とあるのは、右側の内容を左側に代入することを、カッコでくくられたものは、くくられたレジスタなどで示されれうメモリの内容を、それぞれ意味しています。例えば、

r←[.hl]

とあるのは、.hlレジスタで示されるアドレスのメモリの内容を、8ビットレジスタに代入するということです。ただし、入出力命令の[n]と[.c]は、対応する入出力ポートの番号のことです。
 フラグの欄は各フラグの動作を、オペコードはそれぞれの命令に対するマシン語コードを、2進数と16進数で記したものです。その右側のBCは、各命令の長さ(バイト数)と、命令を実行するに要するクロック数を、それぞれ表しています。
 このほか、インストラクション表に出てくる略号に関しては、次の凡例を参照して下さい。
 表に記載されたニーモニックはZ80のものと違っていますが、R800で追加された蒸散命令や、Z80で正式に動作が保障されていなかった命令以外はZ80と命令動作はすべて同じです。

凡例

.a{7} レジスター.aの最上位ビット
.a{4-7}レジスター.aのビット4-7
: 動作の区切り
.de:.hl 上位16ビットが.de、下位16ビットが.hlに入る、32ビット整数
[.ix+d] .ixに8ビットの符号つき変位を足した値が示すアドレス
C キャリーフラグ
Z ゼロフラグ
P/V パリティ・オーバーフローフラグ
S サインフラグ
N 減算フラグ
H ハーフキャリーフラグ
フラグは変化しない
フラグは実行結果により変化する
0 フラグは0
1 フラグは1
? 不定になる
V オーバーフローフラグとして使われる
P パリティーフラグとして使われる
IFF 割り込みフリップフロップとして使われる
r,r'8ビットレジスター、.a,.b,.c,.d,.e,.h,.l
u,u'8ビットレジスター、.a,.b,.c,.d,.e,.ixh,.ixl
v,v'8ビットレジスター、.a,.b,.c,.d,.e,.iyh,.iyl
p 8ビットレジスター、.ixh,.ixl
q 8ビットレジスター、.iyh,.iyl
ss 16ビットレジスター、.bc,.de,.hl,.sp
pp 16ビットレジスター、.bc,.de,.ix,.sp
rr 16ビットレジスター、.bc,.de,.iy,.sp
qq 16ビットレジスター、.bc,.de,.hl,.af
e short br 系の命令の飛び先アドレスへの差分、8ビットの符号付き即値
(+127〜-128)
k brk命令の飛び先アドレス、00h,08h,10h,18h,20h,28h,30h,38h
nn 16ビットの即値、もしくは絶対アドレス
n 8ビットの即値
b ビット演算命令の第何ビットかを示す値
NOT ビットを反転する
ビットのORをとる
ビットのXORをとる
ビットのANDをとる
tmp 一時的に値を退避する
B 命令のバイト数
C 命令の実行に必要な最小クロック数

 分岐命令、コール命令でクロック数が2つ書いてあるものは、上が条件が成立しないとき、下が条件が成立した時を意味します。
 また、入出力命令でクロック数が2つ書いてあるものは、上がまだ転送が終わらないとき、下が転送が終わったときをそれぞれ意味します。
 ここに示す命令表のクロック数は、SYSCLK換算でXTALの発振周波数の4分の1です。また、ノーウエイトで実行したときの値で、DRAM上で実行した時はページブレークやリフレッシュにより、自動的にウエイトが挿入されます。

A.1 8ビット移動命令

ニーモニック命令動作 flagsオペコードB C
SZHP/VNC 7 6 5 4 3 2 1 0 Hex
ld r , r'r ← r' 0 1 rr'1 1
ld r , nr ← n 0 0 r1 1 0 2 2
← n →
ld r , [.hl]r ← [.hl] 0 1 r1 1 0 1 2
ld r , [.ix+d]r ← [.ix+d] 1 1 0 1 1 1 0 1 DD 3 5
0 1 r1 1 0
← d →
ld r, [.iy+d]r ← [.iy+d] 1 1 1 1 1 1 0 1 FD 3 5
0 1 r1 1 0
← d →
ld [.hl],r [.hl] ← r 0 1 1 1 0 r3 5
ld [.ix+d],r[.ix+d] ← r 1 1 0 1 1 1 0 1 DD 3 5
0 1 1 1 0 r
← d →
ld [iy+d],r[iy+d] ← r 1 1 0 1 1 1 0 1 FD 3 5
0 1 1 1 0 r
← d →
ld u, u'u ← u' 0 1 0 1 1 1 0 1 DD 2 2
0 1 uu'
ld v, v'v ← v' 0 1 1 1 1 1 0 1 FD 2 2
0 1 vv'
ld u, nu ← n 1 1 0 1 1 1 0 1 DD 3 3
0 0 u1 1 0
← n →
ld v, nv ← n 1 1 1 1 1 1 0 1 FD 3 3
0 0 v1 1 0
← n →
ld [.hl],n [.hl] ← n 0 0 1 1 0 1 1 0 36 2 3
← n →
ld [.ix+d],n[.ix+d] ← n 1 1 0 1 1 1 0 1 DD 4 5
0 0 1 1 0 1 1 0 36
← d →
← n →
ld [iy+d],n[iy+d] ← n 1 1 1 1 1 1 0 1 FD 4 5
0 0 1 1 0 1 1 0 36
← d →
← n →