3 ms·
One example seems a bit odd. if(LocalVariable & 0x00001000) return 1; else return 0; mov eax, [ebp - 10] and eax, 0x00001000 neg eax s
by vardump 12y ago
One example seems a bit odd.
if(LocalVariable & 0x00001000)
return 1;
else
return 0;
mov eax, [ebp - 10]
and eax, 0x00001000
neg eax
sbb eax, eax
neg eax
ret
Hmm... wouldn't this be faster? Two instructions less:
mov eax, [ebp - 10]
and eax, 0x00001000
shr eax, 12
ret
Well, who knows. Didn't bother to analyze this case. Maybe the article's example is faster somehow?
- astrange 12y agoThe neg/sbb/neg operation is 'x = x != 0' or 'x = !!x', I think. You're right that yours should work too, because after the and the value can only have 1 bit set. But it only works for this particular and mask.