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

回到顶部