I see this a lot and am trying to understand why it's used.
If eax is ORed with itself, it sets any bits that are 1 to 1.
What is the purpose of it ?
Is it the only way to determine success or failure ?
.IF (eax) ; same as OR eax,eax
; Each bit of the result of the OR instruction is 0 if both corresponding bits of the operands
; are 0; otherwise, each bit is 1.
many windows API functions return zero or non-zero
OR EAX,EAX sets the zero flag is eax if zero, clears it if not
as a side effect, it always clears the carry flag, as do most logical operations (AND, OR, XOR)
and - the sign flag will be set to the same value as the high bit of the register
as for ".if eax" - if eax is non-zero or true
Hi
.if eax !=0 = cmp eax, 0
.if eax = or eax, eax
Or eax,eax is a one byte smaller and faster
this bracket in a if else statment .if (eax) is only cosmetics
for better read a code ;)
Gel Jochen
Intel(R) Celeron(R) M CPU 420 @ 1.60GHz (SSE3)
loop overhead is approx. 189/100 cycles
239 cycles for 100 * 3*Test
240 cycles for 100 * 3*And
240 cycles for 100 * 3*Or
234 cycles for 100 * 3*cmp 0
240 cycles for 100 * 3*Test
240 cycles for 100 * 3*And
239 cycles for 100 * 3*Or
240 cycles for 100 * 3*cmp 0
AMD Athlon(tm) II P360 Dual-Core Processor (SSE3)
++++++14 of 20 tests valid, loop overhead is approx. 239/100 cycles
73 cycles for 100 * 3*Test
73 cycles for 100 * 3*And
73 cycles for 100 * 3*Or
73 cycles for 100 * 3*cmp 0
73 cycles for 100 * 3*Test
73 cycles for 100 * 3*And
73 cycles for 100 * 3*Or
544 cycles for 100 * 3*cmp 0
510 cycles for 100 * 3*Test
675 cycles for 100 * 3*And
566 cycles for 100 * 3*Or
542 cycles for 100 * 3*cmp 0
18 bytes for 3*Test
18 bytes for 3*And
18 bytes for 3*Or
21 bytes for 3*cmp 0
--- ok ---
I confess I am highly UNtrusting of abbreviated notation, as a left over from the logic I did many years ago I use the expanded form most of the time.
.if eax == 0
; do something
.else
; do something else
.endif
you could use a similar syntax in old IBM/MS Basic :P
X=X+Y
IF X THEN ... ELSE ...
bitwise operations were one thing i liked about basic