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当第二个操作数大于第一个操作数时(大于上的分支)将分支当您查看幕后发生的事情时,这是有道理的。

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

它设置 CCR(条件代码寄存器),因为仅当(N=1 and V=1 and Z=0)(N=0 and V=0 and Z=0)时才采用分支。

现在进行改造:

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 回答