APPENDIX D
IA MMX INSTRUCTION SET OPCODE MAP
The detailed encodings of the Intel Architecture MMX instructions are listed in the shaded boxes of the Opcode Map tables below. All MMX instructions, except the EMMS instruction, use the same format as the two-byte Intel Architecture integer operations.
All blanks in the Opcode Map are reserved and should not be used. Do not depend on the operation of unspecified opcodes. 0F0Bh or 0FB9h should be used when deliberately generating an illegal opcode exception.
Operands are identified by a two-character code of the form Zz. The first character, an uppercase letter, specifies the addressing method; the second character, a lowercase letter, specifies the type of operand. For opcodes with two operands, the left code refers to the destination operand and the right code refers to the source operand. All MMX instructions, except the EMMS instruction, reference and operate on two operands.
C | The reg field of the ModR/M byte selects a control register; e.g., MOV (0F20, 0F22). |
D | The reg field of the ModR/M byte selects a debug register; e.g., MOV (0F21, 0F23). |
E | A ModR/M byte follows the opcode and specifies the operand. The operand is either a general register or a memory address. If it is a memory address, the address is computed from a segment register and any of the following values: a base register, an index register, a scaling factor, a displacement. |
G | The reg field of the ModR/M byte selects a general register; e.g., AX(000). |
I | Immediate data. The value of the operand is encoded in subsequent bytes of the instruction. |
M | The ModR/M byte may refer only to memory; e.g., LSS, LFS, LGS, CMPXCHG8B. |
P | The reg field of the ModR/M byte selects a packed quadword MMX register. |
Q | A ModR/M byte follows the opcode and specifies the operand. The operand is either an MMX register or a memory address. If it is a memory address, the address is computed from a segment register and any of the following values: a base register, an index register, a scaling factor, a displacement. |
R | The mod field of the ModR/M byte may refer only to a general register; e.g., MOV (0F20-0F24, 0F26). |
b | Byte (regardless of operand size attribute). |
d | Doubleword (regardless of operand size attribute). |
p | 32-bit or 48-bit pointer, depending on operand size attribute. |
q | Quadword (regardless of operand size attribute). |
s | Six-byte pseudo-descriptor. |
v | Word or doubleword, depending on operand size attribute. |
w | Word (regardless of operand size attribute). |
When an operand is a specific register encoded in
the opcode, the register is identified by its name, for example:
AX, CL, or ESI. The name of the register indicates whether the
register is 32-bits, 16-bits, or 8-bits wide. A register identifier
of the form eXX is used when the width of the register depends
on the oeprand size attribute; for example, eAX indicates that
the AX register is used when the operand size attribute is 16
and the EAX register is used when the operand size attribute is
32.
0 | Gv, Ew | Gv, Ew | ||||||
1 | ||||||||
2 | Rd, Cd | Rd, Dd | Cd, Rd | Dd, Rd | ||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | Pq, Qd | Pq, Qd | Pq, Qd | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq |
7 | Pq, Qq | Pq, Qq | Pq, Qq | |||||
8 | Long-displacement jump on condition (Jv) | |||||||
JO | JNO | JB | JNB | JZ | JNZ | JBE | JNBE | |
9 | Byte Set on condition (Eb) | |||||||
A | FS | FS | Ev, Gv | Ev, Gv, Ib | Ev, Gv, CL | |||
B | Eb, Gb | Ev, Gv | Mp | Ev, Gv | Mp | Mp | Gv, Eb | Gv, Ew |
C | Eb, Gb | Ev, Gv | ||||||
D | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | ||||
E | Pq, Qq | Pq, Qq | Pq, Qq | |||||
F | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq |
Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Ed | Pq, Qq | |||
Ed, Pd | Qq, Pq | |||||||
Long-displacement jump on condition (Jv) | ||||||||
Byte Set on condition (jv) | ||||||||
Eb | Eb | Eb | Eb | Eb | Eb | Eb | Eb | |
GS | GS | Ev, Gv | Ev, Gv, Ib | Ev, Gv, CL | Gv, Ev | |||
Ev, Ib | Ev, Gv | Gv, Ev | Gv, Ev | Gv, Eb | Gv, Ew | |||
EAX | ECX | EDX | EBX | ESP | EBP | ESI | EDI | |
Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | |||
Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | |||
Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq | Pq, Qq |
Ib/Iv | AL/eAX | AL/eAX | AL/eAX | AL/eAX | ||||
Eb | Eb | |||||||
Ev | Ev | Ev | Ep | Ev | Ep | Pv | ||
Ew | Ew | Ew | Ew | Ew | Ew | |||
Ms | Ms | Ms | Ms | Ew | Ew | |||
8BMq | ||||||||
Pq, Ib | Pq, Ib | Pq, Ib |
Legal Stuff © 1997 Intel Corporation