HOME

TheInfoList



OR:

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