This article needs additional citations for verification .(March 2023) |
![]() | The topic of this article may not meet Wikipedia's general notability guideline .(March 2024) |
In the x86 assembly language, the TEST
instruction performs a bitwise AND on two operands. The flags SF
, ZF
, PF
are modified while the numerical result of the AND is discarded. The OF
and CF
flags are set to 0
, while AF
flag is undefined. There are 9 different opcodes for the TEST instruction depending on the type and size of the operands. It can test 8-bit, 16-bit, 32-bit, or 64-bit values. It can also test registers and memory against registers and immediate values. [1]
The TEST operation clears the flags CF
and OF
to zero. The SF
is set to the most significant bit of the result of the AND. If the result is 0
, the ZF
is set to 1
, otherwise set to 0
. The parity flag is set to the bitwise XNOR of the least significant byte of the result, 1
if the number of ones in that byte is even, 0
otherwise. The value of AF
is undefined.
; Conditional Jumptestcl,cl; set ZF to 1 if cl == 0jz0x8004f430; jump if ZF == 1; Conditional Jump with NOTtestcl,cl; set ZF to 1 if cl == 0jnz0x8004f430; jump if ZF == 0; ortesteax,eax; set SF to 1 if eax < 0 (negative)jserror; jump if SF == 1; regular applicationtestal,$0F; set ZF if "al AND $0f = 0" (here: address-align test for 16b)jnz@destination; jump if eax IS NOT "MODULO 16=0"