ニャオニャオ21世紀

アイデア。レトロゲーム(MSX、PCエンジン、ファミコン、メガドライブセガサターン)と、MSXのゲーム開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

第23回 条件ジャンプ。これは大切! JP C / JP NC / JP Z / JP NZ など。MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 

MSXの機体の情報が一杯 これは必見の書籍!! 僕らの好きなMSXハードカタログ

今回はジャンプ命令の続きです。

条件ジャンプというのをやります。

絶対アドレスジャンプと相対アドレスジャンプの両方にあります。

 

まず、絶対アドレスジャンプの方を。

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のとき(プラス)

 

条件ジャンプはフラグをみているんですね。

 

フラグについてはこちらをご覧ください。

www.nyaonyao21.com

 

具体的にはこのように使うようです。

 

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されています。

これは、ニーモニックと違い、実際のマシンコードというのは、

相対アドレスジャンプ命令のあるアドレスの次のアドレスから

何バイト離れているか計算しないと

いけないからだそうです。

 

計算方法はこちらで。

 

www.nyaonyao21.com

 

 

 

相対アドレスジャンプ命令は、条件ジャンプが5種類だそうです。

書き忘れではないですよ^^

 

DJNZはループのところで書きます。

こちらもしばしお待ちを^^

 

 

今回は少しややこしかったですね〜。

まあ、何度も使っていれば、覚えるでしょう。

そんな感じで続けていきます!

プログラム言語は使っているうちに体に染み込んでくるものだと

思っていますので。

時間は掛かりますけど。

 

はやくマシン語の基礎を理解して、ゲームが作りたいなぁ〜。

 

それでは〜。

 

スポンサーリンク

 

 

 

 

www.nyaonyao21.com

 

MSX BASICの情報はこちらへ

www.nyaonyao21.com

 

 

 


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください