如何在68k语言中创建if-else控件结构?

时间:2012-12-20 15:47:48

标签: assembly if-statement cpu 16-bit 68000

我正在为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

如上所述进行此类构造的最简单方法是什么?

2 个答案:

答案 0 :(得分: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:

详细了解conditional branching

答案 1 :(得分:1)

最适合此方案的控制结构是BGT

当第二个操作数大于第一个操作数时,

BGT大于的分支)将分支。当你看到幕后发生的事情时,这是有道理的。

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

设置CCR(条件代码寄存器),因为仅当(N = 1且V = 1且Z = 0)(N = 0且V = 0和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 ...