Assembly 如何检查寄存器是否有偶数值?
例如,检查R8是否为偶数 这就是答案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是否为偶数。作为
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标志。