TEST (x86 instruction)
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 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 compare 8-bit, 16-bit, 32-bit or 64-bit values. It can also compare registers, immediate values and register indirect values.[1]
TEST opcode variations
[edit]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.
Examples
[edit]; Conditional Jump test cl,cl ; set ZF to 1 if cl == 0 jz 0x8004f430 ; jump if ZF == 1 ; Conditional Jump with NOT test cl, cl ; set ZF to 1 if cl == 0 jnz 0x8004f430 ; jump if ZF == 0 ; or test eax, eax ; set SF to 1 if eax < 0 (negative) js error ; jump if SF == 1 ; regular application test al, $0F ; set ZF if "al AND $0f = 0" (here: address-align test for 16b) jnz @destination ; jump if eax IS NOT "MODULO 16=0"
References
[edit]- ^ "Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z" (PDF). Retrieved 2019-12-21.