今回はとても簡単で、便利な命令です。
+1増加するのが、INC (インクリメント)
-1減少するのが、 DEC (デクリメント)
です。
例:ニーモニックは、
① INC B
レジスタBの中身を1増やします。
② DEC (HL)
HLレジスタでアドレスを指定されるメモリの内容を1減らす命令です。
うん?
ちょっとややこしいですね。
例えばHLレジスタに9000Hが入っていて、
メモリの9000H番地の中に入っている内容から1を引くということです。
HL <--- 中に入っている値は、メモリのアドレス。
(HL) <--- 指定したアドレスの中に入っている値。
ということですね。
DECは、そこから-1と。
INCとDECは8ビットレジスタの値を増減するだけでなく、
16ビットレジスタの値も増減します。
INC HL
とか。
この場合、LレジスタがFFHから1増えた場合は、上位のHレジスタが
1増えます。
スポンサーリンク
このINCとDECの便利なところは、
Aレジスタ以外のレジスタやメモリの内容に対しても演算ができるところです。
使い方として、
HLレジスタにメモリのアドレスを入れているとして、
INC HL
してやればアドレスを順番に増やしていくことができるのです。
D800H番地
D801H番地
D802H番地
D803H番地
…
のようにアドレスを変えていけます。
具体例として、
VRAMの画面の画像をいれているアドレスを、ひとつづつ、
メモリにコピーしていったり。
VRAMの一部を、VRAMの別の場所にコピーする時に使えます。
(ループで回してコピーしていく)
このBASIC中のマシン語にもINCを使っています。
<8ビットのINC>
マシン語
INC A 3C
INC B 04
INC C 0C
INC D 14
INC E 1C
INC H 24
INC L 2C
INC (HL) 34
INC (IX+d) DD 34 d
INC (IY+d) FD 34 d
<16ビットのINC>
マシン語
INC BC 03
INC DE 13
INC HL 23
INC SP 33
INC IX DD 23
INC IY FD 23
これの見方は、INC HL(HLレジスタを+1する)をしたいときは、
具体的には、
メモリに、23という値が入ります。
マシン語というのは英数字の羅列です。
例えば、先ほどの、
WebMSXでMSX BASICのゲームを作ろう!第13弾
のページの中で、こんなのがでてきます。
985 DATA 21082211082A01A000CD4A0
0EBCD4D00EB23130B78B120F12108221
1083201A000CD4A00EBCD4D00EB23130
B78B120F1C9
これがマシン語なわけですが、これをメモリに入れて使います。
23というINC HL の命令の箇所がでてきていますね。
<8ビットのDEC>
マシン語
DEC A 3D
DEC B 05
DEC C 0D
DEC D 15
DEC E 1D
DEC H 25
DEC L 2D
DEC (HL) 35
DEC (IX+d) DD 35 d
DEC (IY+d) FD 35 d
<16ビットのDEC>
マシン語
DEC BC 0B
DEC DE 1B
DEC HL 2B
DEC SP 3B
DEC IX DD 2B
DEC IY FD 2B
今日のところはここまでです。
それでは〜。
スポンサーリンク
MSX BASIC + マシン語の情報はこちら〜