Description

The test instruction is identical to the and instruction except it does not affect operands.

Syntax

test destination, source 

Examples

Example 1

.text:00401437 mov ecx, 1Ch ; ecx = 28 (counter) .text:0040143C .text:0040143C get_byte: .text:0040143C .text:0040143C shr ebx, 1 .text:0040143E mov edx, 0 .text:00401443 mov eax, ebx .text:00401445 mov esi, 1Ah .text:0040144A div esi .text:0040144C test ecx, 1 ; \ will take the jump .text:00401452 jz short add_97 ; / when ecx is even .text:00401454 add edx, 41h ; jump here when ecx is odd .text:00401457 mov [edi], dl .text:00401459 inc edi .text:0040145A loop get_byte ; ecx -= 1 .text:0040145C jmp short go_on .text:0040145E ; --------------------------------------------------------------------------- .text:0040145E .text:0040145E add_97: .text:0040145E add edx, 61h .text:00401461 mov [edi], dl .text:00401463 inc edi .text:00401464 loop get_byte ; ecx -= 1 
ecx & 0x1 Result Zero Flag (ZF)
28 & 0x1 0 1
27 & 0x1 1 0
26 & 0x1 0 1
25 & 0x1 1 0
. .

Example 2

test cl, cl ; set ZF to 1 if cl == 0 je 0x804f430 ; jump if ZF == 1 

Example 3

test eax,eax ; set SF to 1 if eax < 0 (negative)js error ; jump if SF == 1