background image

INSTRUCTION SET REFERENCE, A-L

Vol. 2A 3-5

— 0F,0F3A,0F38: The presence maps to a valid encoding of the EVEX.mmm field. Only three encoded values 

of EVEX.mmm are defined as valid, corresponding to the escape byte sequence of 0FH, 0F3AH and 0F38H. 
The effect of a valid EVEX.mmm encoding on the ensuing opcode byte is the same as if the corresponding 
escape byte sequence on the ensuing opcode byte for non-EVEX encoded instructions. Thus a valid 
encoding of EVEX.mmm may be considered as an implied escape byte sequence of either 0FH, 0F3AH or 
0F38H. 

— W0: EVEX.W=0. 
— W1: EVEX.W=1.
— WIG: EVEX.W bit ignored

opcode — Instruction opcode.

/is4 — A relative address in the range from 128 bytes before the end of the instruction to 127 bytes after the 
end of tAn 8-bit immediate byte is present containing a source register specifier in imm[7:4] and instruction-
specific payload in imm[3:0].

In general, the encoding of EVEX.R and R’, EVEX.X and X’, and EVEX.B and B’ fields are not shown explicitly in 
the opcode column. 

3.1.1.3  

Instruction Column in the Opcode Summary Table

The “Instruction” column gives the syntax of the instruction statement as it would appear in an ASM386 program. 
The following is a list of the symbols used to represent operands in the instruction statements:

rel8 — A relative address in the range from 128 bytes before the end of the instruction to 127 bytes after the 
end of the instruction.

rel16, rel32 — A relative address within the same code segment as the instruction assembled. The rel16 
symbol applies to instructions with an operand-size attribute of 16 bits; the rel32 symbol applies to instructions 
with an operand-size attribute of 32 bits.

ptr16:16, ptr16:32 — A far pointer, typically to a code segment different from that of the instruction. The 
notation 16:16 indicates that the value of the pointer has two parts. The value to the left of the colon is a 16-
bit selector or value destined for the code segment register. The value to the right corresponds to the offset 
within the destination segment. The ptr16:16 symbol is used when the instruction's operand-size attribute is 
16 bits; the ptr16:32 symbol is used when the operand-size attribute is 32 bits.

r8 — One of the byte general-purpose registers: AL, CL, DL, BL, AH, CH, DH, BH, BPL, SPL, DIL and SIL; or one 
of the byte registers (R8L - R15L) available when using REX.R and 64-bit mode. 

r16 — One of the word general-purpose registers: AX, CX, DX, BX, SP, BP, SI, DI; or one of the word registers 
(R8-R15) available when using REX.R and 64-bit mode.

r32 — One of the doubleword general-purpose registers: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI; or one of 
the doubleword registers (R8D - R15D) available when using REX.R in 64-bit mode.

r64 — One of the quadword general-purpose registers: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8–R15. 
These are available when using REX.R and 64-bit mode.

imm8 — An immediate byte value. The imm8 symbol is a signed number between –128 and +127 inclusive. 
For instructions in which imm8 is combined with a word or doubleword operand, the immediate value is sign-
extended to form a word or doubleword. The upper byte of the word is filled with the topmost bit of the 
immediate value.

imm16 — An immediate word value used for instructions whose operand-size attribute is 16 bits. This is a 
number between –32,768 and +32,767 inclusive.

imm32 — An immediate doubleword value used for instructions whose operand-size attribute is 32 
bits. It allows the use of a number between +2,147,483,647 and –2,147,483,648 inclusive.

imm64 — An immediate quadword value used for instructions whose operand-size attribute is 64 bits. 
The value allows the use of a number between +9,223,372,036,854,775,807 and –
9,223,372,036,854,775,808 inclusive.

r/m8 — A byte operand that is either the contents of a byte general-purpose register (AL, CL, DL, BL, AH, CH, 
DH, BH, BPL, SPL, DIL and SIL) or a byte from memory. Byte registers R8L - R15L are available using REX.R in 
64-bit mode.