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

Assembly 如何检查寄存器是否有偶数值?,assembly,arm,Assembly,Arm,例如,检查R8是否为偶数 这就是答案 MOVS R2,R8,LSR#1 将LSB移位到进位标志if=0>偶数if=1>奇数 我不明白这个部分 例如,ARM中的十进制值7是0..0 0111,右移1,我们得到0..0 0011。这里的进位是指最右边的位吗 另一种方法是使用掩码检查最右边的位是1还是0?如果低位为0,则基2的数字是偶数(可被2整除)。出于完全相同的原因,如果低位为0,则基数为10的数字可以被10整除 移位将最后一位移位到C标志中,因此您可以通过查看C标志来判断R8是否为偶数。作为

例如,检查R8是否为偶数

这就是答案

MOVS R2,R8,LSR#1
将LSB移位到进位标志if=0>偶数if=1>奇数

我不明白这个部分

例如,ARM中的十进制值7是0..0 0111,右移1,我们得到0..0 0011。这里的进位是指最右边的位吗

另一种方法是使用掩码检查最右边的位是1还是0?

如果低位为0,则基2的数字是偶数(可被2整除)。出于完全相同的原因,如果低位为0,则基数为10的数字可以被10整除


移位将最后一位移位到C标志中,因此您可以通过查看C标志来判断
R8
是否为偶数。作为:

如果指定了S,这些指令将更新N和Z标志 根据结果

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

但是可以,测试奇数/偶数的正常方法是根据低位设置Z标志。因此,
beq r8_是偶数的
bne r8_是奇数的
,或者你想用Z标志做的任何事情

如果使用右移整数结果(或其在
Z
中的零/非零状态),
movs
带移位(也称为
lsrs
)是一种同时获得
x/2
x&1
结果的有效方法。如果低位为0,则基2数为偶数(可被2整除)。出于完全相同的原因,如果低位为0,则基数为10的数字可以被10整除


移位将最后一位移位到C标志中,因此您可以通过查看C标志来判断
R8
是否为偶数。作为:

如果指定了S,这些指令将更新N和Z标志 根据结果

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

但是可以,测试奇数/偶数的正常方法是根据低位设置Z标志。因此,
beq r8_是偶数的
bne r8_是奇数的
,或者你想用Z标志做的任何事情


如果您使用右移整数结果(或其在
Z
中的零/非零状态),
movs
带移位(又称
lsrs
)是一种同时获得
x/2
x&1
结果的有效方法。

谢谢。我们是否使用“tst”设置零标志?如果设置了零旗,那就更奇怪了?@XiangRuiLiu:我更新了我的答案,但忘了给你打电话。
eq
ne
条件读取Z标志。谢谢。我们是否使用“tst”设置零标志?如果设置了零旗,那就更奇怪了?@XiangRuiLiu:我更新了我的答案,但忘了给你打电话。
eq
ne
条件读取Z标志。