如何检查寄存器是否具有偶数值



例如,检查r8是否均匀

这给出了答案

MOVS R2,R8,LSR#1

将lsb移动flag in = 0>即使= 1>奇数

我没有得到这个部分。

例如,小数为0..0 0111中的十进制值7,右转1,我们得到0..00011。随身携带的位置表示最正确的位?

另一种方法是使用mask?

检查最正确的位是1或0

如果低位为0,则基本2数字均匀(可除以2)。完全相同的原因,如果低数字为0,则基本数字10个数字可将10个数字除外。<<<<<</p>


移动将最后一个位移到C标志中,因此您可以通过查看C标志来判断R8是否是。如ARM文档所说:

如果指定了s,这些说明更新n和z标志 根据结果。

如果移位值为0,则C标志不受影响。否则,C 标志已更新为最后一个位移出。

但是,是的,测试ODD/偶数的正常方法是tst r8, #1根据低位设置Z标志。因此,beq r8_was_evenbne r8_was_odd或您想使用Z标志的其他任何事情。

如果您可以使用右移整数结果(或其在Z中的零/非零状态),则具有偏移的movs(aka lsrs)是一次获得x/2x&1结果的有效方法。

最新更新