对二取模的优化代码~

mov edx,[]
and edx,80000001h
jns short xx
dec edx
or edx,0FFFFFFFEh
inc edx
xx:
...


先送数到某个寄存器中,位运算保存寄存器的首位和末位(此时可能的值为-1,0,1),若为负数,jns不跳转。正数或者0跳转。 

dec edx    这里对edx减1操作,结果必然为0x80000000(或者0x7fffffff,当edx为偶数时)

or edx,0FFFFFFFEh  此时的edx值有2种可能0xFFFFFFFE(另一种是edx为偶数时,其值为0xfffffff)

inc edx  ; 对edx加1后,变为0xFFFFFFFF为-1(或者为0,当edx为偶数时)

你可能感兴趣的:(对二取模的优化代码~)