这是我的代码:我想看看 D1 中的值是否为奇数。如果是这样,我想执行一些操作。有人可以帮我弄这个吗?
如果有人可以向我展示如何使用它的示例,那就太好了。
如果您按位AND
对输入和一个仅设置位 0 的常量(立即)值进行操作,则结果将为 0 或 1,具体取决于输入中位 1 的值。
所以:
check_odd:
andi.b #1,d0
beq.s .even ; If the result was zero, the Z flag is set, and beq jumps.
.odd:
; We end up here if the value was odd.
bra.s .done
.even:
; We end up here if the value was even.
.done:
andi.b #1,d1
会破坏 d1 的先前值;因此更短的命令lsr.w #1,d1
是可能的。你然后bcs label
如果数字是奇数,bcc label
否则。
另一种选择是使用btst.l #0,d1
,它不会破坏 d1 的内容。然后beq label
如果数字是偶数或bne label
奇数。
如果您只检查一个位(如本例所示),那么您也可以使用位测试指令
btst #0, d0
beq even
如果未设置位 0,将跳转到标签“偶数”。
不确定这是否提供任何计算性能优势,但可能有助于代码的可读性。