例如:
int x = 35;
if( x%2==1) { //do something }
我只想检查模值而不将结果分配给x
.
假设 value 是 in eax
,所以我可以使用DIV
指令,然后将原始值放回eax
etc.. 但这似乎效率低下。你能推荐一个更好的方法吗?
如果低位打开,则不能被 2 整除:
test x, 1
jne somewhere_when_odd
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.