这是我的代码:我想看看D1中的值是否为奇数。如果是这样我想执行一些操作。有人可以帮我这个吗?
如果somone可以向我展示如何使用它的例子,那就太好了。
答案 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'。
不确定这是否会带来任何计算性能优势,但可能有助于提高代码的可读性。