68000 - 如何使用ANDI检查数据寄存器中的值是否为奇数?
这是我的代码我有:我想看看D1中的值是否是奇数。如果是这样我想执行一些操作。有人可以帮我弄这个吗?68000 - 如何使用ANDI检查数据寄存器中的值是否为奇数?
如果somone能告诉我一个如何使用它的例子,那将会很好。
回答:
如果您对输入进行按位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未设置。
不确定这是否提供任何计算性能优势,但可能有助于代码的可读性。
以上是 68000 - 如何使用ANDI检查数据寄存器中的值是否为奇数? 的全部内容, 来源链接: utcz.com/qa/266831.html