やっと、ループを作るところにきました^^
長かった〜。
これでやっとMSX BASICで使ったマシン語の説明ができます。
ループはとても大切。
それでは勉強して行きます!
BASICだと、FOR~NEXTという命令があります。
MSX BASIC入門 初心者も中級者も歓迎です。自作ゲームの作り方! - ニャオニャオ21世紀
マシン語には、DJNZという命令があるそうです。
ループを作るときは、繰り返しの回数を設定しますが、
DJNZでは、Bレジスタに繰り返し回数を入れます。
DJNZ LABEL
というように書きます。
FOR~NEXTで言えば、NEXTにあたる命令です。
処理は、
1、Bレジスタから1を引く
2、Bレジスタが0でなければLABELにジャンプし、0になったら
次の命令に進む
です。
ここまでのところ、簡単ですね!
DJNZ命令のジャンプ先のラベルは、相対アドレスだそうです。
む、何バイトか戻るとかいうのか〜。
計算が必要になるなぁ。
スポンサーリンク
マシンコード
DJNZ e ..... 10 e-2
eは戻るバイト数ですね。(マイナスの数字)
マシンコードを書くときに、e-2になっているのは
DJNZ命令の下の番地(次の命令)から数えて何バイトジャンプするか書くため。
相対アドレスということは、
-126 ~ +129バイトの範囲しかジャンプできません;
そこで、一旦下へジャンプ!
そして、絶対アドレスジャンプで上に戻るという方法を使います。
うーん、ややこしい!
例:
LD B , 12H
LABEL1 ~~
~~
~~
DJNZ LABEL2
JR LABEL3
LABEL2 JP LABEL1
LABEL3 ~~
~~
こんな感じで書くそうです。
気になった方は、流れを追ってみてください^^
今日はここまでです。
これで本格的なマシン語を書く第一歩を踏み出せた気がします^^
次回は、以前BASICの中で使ったマシン語の解説をしたいと思います。
VRAMからVRAMへコピーするだけの簡単なプログラムです。
ただアドレスが面倒で。
アドレスが正しくなくて、なかなか実行できなかったのを覚えています;
でも慣れなのかな〜。
マシン語を使うのは、最初はBASICの一部に利用するのがいいと思います。
BASICではものすごく遅い処理が、マシン語だと一瞬なので感動しますよ〜。
それでは次回にまた〜。
amazon:
私が使っている本です。
いい評価が付いていませんが、私には解りやすいです。
応用例が少ないのだけが少し不満です。
まあ入門の本なので。