在Nasm汇编程序中检查整数余数为模2的最简单方法是什么?

时间:2012-10-06 22:29:57

标签: assembly x86 nasm modulo modulus

例如:

int x = 35;
if( x%2==1) { //do something }

我只是想检查模数值而不将结果赋给x

假设该值在eax中,因此我可以使用DIV指令,然后将原始值放回eax等等。但这似乎效率低下。你能建议一个更好的方法吗?

2 个答案:

答案 0 :(得分:3)

如果低位开启,则不能被2整除:

test   x, 1
jne    somewhere_when_odd

答案 1 :(得分:2)

根据al / ax / eax / rax中的值的模2进行分支:

    test al,1
    jnz is_odd

is_even:
    ; do something for even numbers.

is_odd:
    ; do something for odd numbers.

但是,如果你想要的只是模数值,你就不需要任何分支。

test al,1
setnz bl   ; modulo 2 of al/ax/eax/rax is now in bl.