In the
x86 assembly language
x86 assembly language is the name for the family of assembly languages which provide some level of backward compatibility with CPUs back to the Intel 8008 microprocessor, which was launched in April 1972. It is used to produce object code for ...
, the
TEST
instruction performs a
bitwise AND on two
operand
In mathematics, an operand is the object of a mathematical operation, i.e., it is the object or quantity that is operated on.
Example
The following arithmetic expression shows an example of operators and operands:
:3 + 6 = 9
In the above exa ...
s. The
flag
A flag is a piece of fabric (most often rectangular or quadrilateral) with a distinctive design and colours. It is used as a symbol, a signalling device, or for decoration. The term ''flag'' is also used to refer to the graphic design emp ...
s
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
opcode
In computing, an opcode (abbreviated from operation code, also known as instruction machine code, instruction code, instruction syllable, instruction parcel or opstring) is the portion of a machine language instruction that specifies the opera ...
s for the TEST instruction depending on the type and size of the
operand
In mathematics, an operand is the object of a mathematical operation, i.e., it is the object or quantity that is operated on.
Example
The following arithmetic expression shows an example of operators and operands:
:3 + 6 = 9
In the above exa ...
s. It can compare 8-bit, 16-bit, 32-bit or 64-bit values. It can also compare
registers,
immediate values and
register indirect values.
TEST opcode variations
The TEST operation clears the flags
CF
and
OF
to zero. The
SF
is set to the
most significant bit
In computing, bit numbering is the convention used to identify the bit positions in a binary number.
Bit significance and indexing
In computing, the least significant bit (LSB) is the bit position in a binary integer representing the binary ...
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
In computer programming, a bitwise operation operates on a bit string, a bit array or a binary numeral (considered as a bit string) at the level of its individual bits. It is a fast and simple action, basic to the higher-level arithmetic oper ...
XNOR of the
least significant byte
In computing, bit numbering is the convention used to identify the bit positions in a binary number.
Bit significance and indexing
In computing, the least significant bit (LSB) is the bit position in a binary integer representing the binary ...
of the result,
1
if the number of ones in that byte is even,
0
otherwise. The value of
AF
is undefined.
Examples
; Conditional Jump
test cl,cl ; set ZF to 1 if cl 0
jz 0x804f430 ; jump if ZF 1
; Conditional Jump with NOT
test cl, cl ; set ZF to 1 if cl 0
jnz 0x804f430 ; 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
{{software-stub
X86 instructions