例如:
int x = 35;
if( x%2==1) { //do something }
我只是想检查模数值而不将结果赋给x
。
假设该值在eax
中,因此我可以使用DIV
指令,然后将原始值放回eax
等等。但这似乎效率低下。你能建议一个更好的方法吗?
答案 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.