今回はジャンプ命令の続きです。
条件ジャンプというのをやります。
絶対アドレスジャンプと相対アドレスジャンプの両方にあります。
まず、絶対アドレスジャンプの方を。
JP C, LABEL2
JP NZ , LABEL2
などと書きます。
LABEL2はただのラベルということはわかると思います。
では、CとかNZって何?
これはフラグの状態をジャンプの条件としています。
全部で8つあります。
多い〜。
ジャンプするときの条件:
C .... CYフラグが1のとき(マイナスなら1、桁上がり、桁下がりで1です)
NC .... CYフラグが0のとき
Z .... Zフラグが1のとき(A, HLレジスタが0のとき1です)
NZ .... Zフラグが0のとき
PE .... P/Vフラグが1のとき(パリティがイーブン)
PO .... P/Vフラグが0のとき(パリティがオッド)
M .... Sフラグが1のとき(マイナス)
P .... Sフラグが0のとき(プラス)
条件ジャンプはフラグをみているんですね。
フラグについてはこちらをご覧ください。
具体的にはこのように使うようです。
CP 40H
JP C , LABEL
CPは比較命令です。忘れた方はこちらを。
MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第21回 比較命令 - ニャオニャオ21世紀
意味は、BASICぽく書くと、
IF A<40H THEN JP LABEL
Aレジスタが40Hより小さいと、CP命令でCYフラグ(マイナスなら1)が1になります。
JP C はCYフラグが1でジャンプです。
絶対アドレスジャンプ命令の、マシンコードはこちら。
無条件 C NC Z NZ
JP X,nn C3 nn DA nn D2 nn CA nn C2 nn
-----------------------------------------------------------------------
続き
PE PO M P
JP X,nn EA nn E2 nn FA nn F2 nn
-----------------------------------------------------------------------
nnと書かれていますが、それはアドレスです。
16ビットです。
ハンドアセンブルするときは、上位と下位が入れ替わります。
(マシン語の16ビットの数字を扱う時は、そういうものなのですかね)
9000H 番地のときは、
マシン語で書く時は(無条件ジャンプならば)
C3 00 90
などと書きます。
お気をつけください^^
フラグって重要なんですね。
ジャンプ命令の他にも、
CALL命令や、RET命令にも条件命令があるそうです。
CALL Z , LABEL4
RET C
とか。
これも同じで、ZとかCはフラグの状態で判別して飛ぶんですね。
相対アドレスジャンプ命令のマシンコードはこちら。
無条件 C NC Z NZ
JR X,e 18 e-2 38 e-2 30 e-2 28 e-2 20 e-2
-----------------------------------------------------------------------
カウント
DJNZ e 10 e-2
eは相対アドレスです。何バイト先へ飛べとか、何バイト前に飛べとかいうのです。
符号付7ビットですので、80H ~ 7FH ( -128 ~ +127 )ということになります。
符号付7ビットというのは、
普通8ビットはプラスの数字しか扱えないので
不便です。
そこでマイナスを扱う方法があります。
それが符号付7ビット、補数です。
今後、説明することになると思います。
しばしお待ちを^^
ニーモニックには、JR X , eとなっています。
表ではe-2とマイナス2されています。
これは、ニーモニックと違い、実際のマシンコードというのは、
相対アドレスジャンプ命令のあるアドレスの次のアドレスから
何バイト離れているか計算しないと
いけないからだそうです。
計算方法はこちらで。
相対アドレスジャンプ命令は、条件ジャンプが5種類だそうです。
書き忘れではないですよ^^
DJNZはループのところで書きます。
こちらもしばしお待ちを^^
今回は少しややこしかったですね〜。
まあ、何度も使っていれば、覚えるでしょう。
そんな感じで続けていきます!
プログラム言語は使っているうちに体に染み込んでくるものだと
思っていますので。
時間は掛かりますけど。
はやくマシン語の基礎を理解して、ゲームが作りたいなぁ〜。
それでは〜。
スポンサーリンク
MSX BASICの情報はこちらへ