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 t ...
, the
TEST
instruction performs a
bitwise AND
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 ...
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 examp ...
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 empl ...
s
SF
,
ZF
,
PF
are modified while the result of the
AND
or AND may refer to:
Logic, grammar, and computing
* Conjunction (grammar), connecting two words, phrases, or clauses
* Logical conjunction in mathematical logic, notated as "∧", "⋅", "&", or simple juxtaposition
* Bitwise AND, a boolea ...
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 operat ...
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 examp ...
s. It can compare 8-bit, 16-bit, 32-bit or 64-bit values. It can also compare
registers,
immediate values and
register indirect
Addressing modes are an aspect of the instruction set architecture in most central processing unit (CPU) designs. The various addressing modes that are defined in a given instruction set architecture define how the machine language instructions i ...
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 1 ...
of the result of the
AND
or AND may refer to:
Logic, grammar, and computing
* Conjunction (grammar), connecting two words, phrases, or clauses
* Logical conjunction in mathematical logic, notated as "∧", "⋅", "&", or simple juxtaposition
* Bitwise AND, a boolea ...
. If the result is
0
, the
ZF
is set to
1
, otherwise set to
0
. The parity flag is set to the
bitwise XNOR
The XNOR gate (sometimes XORN'T, ENOR, EXNOR or NXOR and pronounced as Exclusive NOR. Alternatively XAND, pronounced Exclusive AND) is a digital logic gate whose function is the logical complement of the Exclusive OR ( XOR) gate. It is equival ...
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 binar ...
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