例えば:
int x = 35;
if( x%2==1) { //do something }
結果を に代入せずにモジュラス値を確認したいだけですx
。
値が にあると仮定すると、命令eax
を使用DIV
して、元の値をeax
などに戻すことができますが、それは非効率的です。より良い方法を提案できますか?
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.
下位ビットがオンの場合、2 で割り切れません。
test x, 1
jne somewhere_when_odd