我正在为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
如上所述进行此类构造的最简单方法是什么?
答案 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:
答案 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 ...