0

例如:

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

我只想检查模值而不将结果分配给x.

假设 value 是 in eax,所以我可以使用DIV指令,然后将原始值放回eaxetc.. 但这似乎效率低下。你能推荐一个更好的方法吗?

4

2 回答 2

3

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

test   x, 1
jne    somewhere_when_odd
于 2012-10-06T22:31:45.707 回答
3

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

    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.
于 2012-10-07T11:26:59.817 回答