68000 - 如何使用ANDI检查数据寄存器中的值是否为奇数?

时间:2014-10-29 22:37:31

标签: 68000

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

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

3 个答案:

答案 0 :(得分:1)

如果你输入的位AND和恒定(立即)值只设置了位0,结果将为0或1,具体取决于位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:

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

btst #0, d0
beq  even
如果未设置位0,

将跳转到标签'even'。

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