0

这是我的代码:我想看看 D1 中的值是否为奇数。如果是这样,我想执行一些操作。有人可以帮我弄这个吗?

如果有人可以向我展示如何使用它的示例,那就太好了。

4

3 回答 3

1

如果您按位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:
于 2014-10-30T12:16:31.847 回答
0

andi.b #1,d1会破坏 d1 的先前值;因此更短的命令lsr.w #1,d1是可能的。你然后bcs label如果数字是奇数,bcc label否则。
另一种选择是使用btst.l #0,d1,它不会破坏 d1 的内容。然后beq label如果数字是偶数或bne label奇数。

于 2014-11-10T08:01:15.973 回答
0

如果您只检查一个位(如本例所示),那么您也可以使用位测试指令

btst #0, d0
beq  even

如果未设置位 0,将跳转到标签“偶数”。

不确定这是否提供任何计算性能优势,但可能有助于代码的可读性。

于 2015-12-01T14:27:38.650 回答