This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: "TEST" x86 instruction – news · newspapers · books · scholar · JSTOR (March 2023) (Learn how and when to remove this message)
The topic of this article may not meet Wikipedia's general notability guideline. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merged, redirected, or deleted.Find sources: "TEST" x86 instruction – news · newspapers · books · scholar · JSTOR (March 2024) (Learn how and when to remove this message)

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]
  1. ^ "Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z" (PDF). Retrieved 2019-12-21.