0

例えば:

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

結果を に代入せずにモジュラス値を確認したいだけですx

値が にあると仮定すると、命令eaxを使用DIVして、元の値をeaxなどに戻すことができますが、それは非効率的です。より良い方法を提案できますか?

4

2 に答える 2

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 に答える
3

下位ビットがオンの場合、2 で割り切れません。

test   x, 1
jne    somewhere_when_odd
于 2012-10-06T22:31:45.707 に答える