今回はジャンプ命令です。
BASICではGOTOですね。
現代の言語には失われた命令ですw
GOTOとかって評判悪いですからね〜。やっぱりややこしくなって
しまうのが原因ですかね。
しかし大切な命令です。
ジャンプ命令には2種類あるそうです。
・無条件ジャンプ
・条件ジャンプ
まぁこれは文字のとおりですね。
いつでもジャンプと、ある条件が成り立った時にジャンプ。
絶対アドレスジャンプ
ジャンプには絶対アドレスジャンプと、相対アドレスジャンプというのが
あるそうです。
まず絶対アドレスジャンプの説明から。
アドレスを指定して、そこに飛んでいくのが絶対アドレスジャンプ。
GOTOの行指定に似ていますね。
JP 9823H
などと書きます。
この例は、9823H番地に飛べという命令です。
ニーモニックでプログラムを書く時は(ニーモニックとは、
LD とか CALLとか人間のわかりやすいように書くのでしたね )、
何番地というアドレスを知るのは難しいです。
アセンブルしていって、命令を1つ1つアドレスに当てはめていって
初めてわかるものです。
そこでラベルで書きます。
JP KEYTEST2
LD A, 41H
CALL CHPUT
KEYTEST2 : RET
といったふうに。
ラベルはCALL命令(サブルーチン)のときに出てきました。
相対アドレスジャンプ
JR LABEL
などと書きます。
ニーモニックで書く時は上記の ように書くだけですが、
ハンドアセンブルする時は、
JR命令のあるアドレスからラベルのアドレスまで何バイト離れているか
を書きます。
相対アドレスジャンプというのは、今の位置から何バイト離れているかを
書くジャンプ命令ということですね。
D000 18 ..... JR LS4
D002
↓
D034 81 ...... LS4 : ADD A,C
という風にあった場合、
何バイト離れているかを出すのは、
D034H - D002H = 32H
と出します。
(この例だと、D001 に32Hを書きます )
アドレスの上の方に戻る場合もあります。
その場合は、マイナスをつけます。
10進数で-45の場合だと、補数でD3Hとなります。
(私の場合は、計算はややこしいし面倒なので、WEBにある16進数の計算サイトで
ぱぱっと16進数にしてしまいます;
を使います)
マシンコードは次回に書きます。
まだ、条件ジャンプを説明していないので、その時にまとめて。
まとめ
ジャンプには
・絶対アドレスジャンプ
・相対アドレスジャンプ
があるということでした。
GOTOのようにアドレスを指定するのと、
自分からどれくらい離れているかを書くのでした。
今日はここまでです。
いつかマシン語でゲームを作れるといいなぁと思ってやっています。
目標はテープ版ハイドライド1 または、テープ版トリトーンですかねぇ〜。
あー作りたいなぁ。
スポンサーリンク