3

ASM で 68k プロセッサ用のプログラムを書いています。

そして、私はそのようなものを作る必要があります

if (D0 > D1) {
   do_some_stuff();
   do_some_stuff();
   do_some_stuff();
   do_some_stuff();
} else {
   do_some_stuff();
   do_some_stuff();
   do_some_stuff();
   do_some_stuff();
}

しかし、問題は、ポインタに分岐するか、実行を継続することしかできないことです。

そのようです:

CMP.L   D0,D1       ; compare
BNE AGAIN       ; move to a pointer

上記のような構造を作成する最も簡単な方法は何ですか?

4

2 に答える 2

2

次のようなことを試すことができます:

if (D0>D1) {
    //do_some_stuff
} else {
    //do_some_other_stuff
}

次のようにする必要があります。

CMP.L   D0,D1       ; compare
BGT AGAIN  
//do_some_other_stuff
BR DONE
AGAIN:
//do_some_stuff
DONE:

条件分岐について詳しく読む

于 2012-12-20T16:26:50.293 に答える
1

このシナリオに最適な制御構造はBGT.

BGT( Branch on greater than ) は、第 2 オペランドが第 1 オペランドより大きい場合に分岐します。これは、舞台裏で何が起こっているかを見ると理にかなっています。

CMP.W D1,D0 ;Performs D0-D1, sets the CCR, discards the result 

(N=1 かつ V=1 かつ Z=0)または(N=0 かつ V=0 かつ Z=0)の場合にのみ分岐が発生するため、CCR (Condition Code Register) を設定します。

次に変換します。

if (D0 > D1) {
    //do_some_stuff
} else {
    //do_some_other_stuff
}

68k アセンブリ言語へ:

     CMP.W   D1,D0       ;compare the contents of D0 and D1
     BGT     IF 
     // do_some_other_stuff
     BRA     EXIT
IF
     // do_some_stuff
EXIT ...
于 2013-11-11T03:45:44.740 に答える