TEST (x86 instruction)

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

The TEST operation sets 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

; Conditional Jump
test cl,cl   ; set ZF to 1 if cl == 0
je 0x804f430  ; jump if ZF == 1

; Conditional Jump with NOT
test cl, cl   ; set ZF to 1 if cl == 0
jne 0x804f430  ; jump if ZF != 1

; or
test eax, eax  ; set SF to 1 if eax < 0 (negative)
js error ; jump if SF == 1
gollark: But I want to remove items from lists during iteration.
gollark: I PRed them though, and you merged those.
gollark: Macron idea: all types containing monoids are implicitly monoids. Also, all primitive types are monoids.
gollark: Macron is a purely functional and referentially transparent programming language.
gollark: Good Macron idea: ban mutating.

References

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.