#################################################################################
# #
# ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ #
# ▓▓***-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*::::::::....................▓▓ #
# ▓▓*** Расшифровка машинных кодов процессора *::::::::::.$$$$$$$$$$$$$$$$$▓▓ #
# ▓▓***-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*::::::::::::................▓▓ #
# ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ #
# #
# [ by Scorpio ] #
# #
# Когда-то давно работая еще на компьютере "ZX-Spectrum 48K" (Z80 = 8080) #
# и разбирая различные проги в Asm'е, мне часто помогал справочник, в #
# котором все машинные коды были расписаны по командам Asm'a. На компах #
# 8086, 80286, 80386, 80586, мне часто не хватало такого справочника, а #
# т.к. Z80 от х86 полностью отличается. Вот и решил написать свой, #
# представленный ниже справочник для процессоров от Intel 8086 до #
# Intel Pentium 4, Intel Xeon, включительно. #
# #
#################################################################################
Instruction Prefixes
Up to four prefixes of 1-byte each (optional)
+Lock and repeat prefixes.
- F0H-LOCK prefix.
- F2H-REPNE/REPNZ prefix (used only with string instructions).
- F3H-REP prefix (used only with string instructions).
- F3H-REPE/REPZ prefix (used only with string instructions).
+Segment override.
- 2EH-CS segment override prefix.
- 36H-SS segment override prefix.
- 3EH-DS segment override prefix.
- 26H-ES segment override prefix.
- 64H-FS segment override prefix.
- 65H-GS segment override prefix.
+Operand-size override, 66H
+Address-size override, 67H
Opcode
1 or 2 byte opcode
ModR/M
1 byte (if required)
bits xxx. .... R/M
bits ...x xx.. Reg/Opcode
bits .... ..xx MOD
SIB
1 byte (if required)
bits xxx. .... Base
bits ...x xx.. Index
bits .... ..xx Scale
Displacement
Address displacement of 1, 2, or 4 bytes or none
Immediate
Immediate data of 1, 2, or 4 bytes or none
OPCODE COLUMN
The "Opcode" column gives the complete object code produced for each form of the
instruction.
When possible, the codes are given as hexadecimal bytes, in the same order in which
they appear in memory. Definitions of entries other than hexadecimal bytes are as follows:
/digit A digit between 0 and 7 indicates that the ModR/M byte of the
instruction uses only the r/m (register or memory) operand. The reg
field contains the digit that provides an extension to the instruction's
opcode.
/r Indicates that the ModR/M byte of the instruction contains both a
register operand and an r/m operand.
cb, cw, cd, cp A 1-byte (cb), 2-byte (cw), 4-byte (cd), or 6-byte (cp) value
following the opcode that is used to specify a code offset and possibly
a new value for the code segment register.
ib, iw, id A 1-byte (ib), 2-byte (iw), or 4-byte (id) immediate operand to the
instruction that follows the opcode, ModR/M bytes or scale-indexing
bytes. The opcode determines if the operand is a signed value. All words
and doublewords are given with the low-order byte first.
+rb, +rw, +rd A register code, from 0 through 7, added to the hexadecimal byte given
at the left of the plus sign to form a single opcode byte.
+i A number used in floating-point instructions when one of the operands is
ST(i) from the FPU register stack. The number i (which can range from 0
to 7) is added to the hexadecimal byte given at the left of the plus
sign to form a single opcode byte.
INSTRUCTION COLUMN
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 and 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 and ptr16:32 A far pointer, typically in 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, or BH.
r16 One of the word general-purpose registers AX, CX, DX, BX, SP,
BP, SI, or DI.
r32 One of the doubleword general-purpose registers EAX, ECX, EDX,
EBX, ESP, EBP, ESI, or EDI.
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.
r/m8 A byte operand that is either the contents of a byte
general-purpose register (AL, BL, CL, DL, AH, BH, CH, and DH),
or a byte from memory.
r/m16 A word general-purpose register or memory operand used for
instructions whose operand-size attribute is 16 bits. The word
general-purpose registers are: AX, BX, CX, DX, SP, BP, SI, and
DI. The contents of memory are found at the address provided by
the effective address computation.
r/m32 A doubleword general-purpose register or memory operand used
for instructions whose operand-size attribute is 32 bits. The
doubleword general-purpose registers are: EAX, EBX, ECX, EDX,
ESP, EBP, ESI, and EDI. The contents of memory are found at the
address provided by the effective address computation.
m A 16- or 32-bit operand in memory.
m8 A byte operand in memory, usually expressed as a variable or
array name, but pointed to by the DS:(E)SI or ES:(E)DI
registers. This nomenclature is used only with the string
instructions and the XLAT instruction.
m16 A word operand in memory, usually expressed as a variable or
array name, but pointed to by the DS:(E)SI or ES:(E)DI
registers. This nomenclature is used only with the string
instructions.
m32 A doubleword operand in memory, usually expressed as a variable
or array name, but pointed to by the DS:(E)SI or ES:(E)DI
registers. This nomenclature is used only with the string
instructions.
m64 A memory quadword operand in memory. This nomenclature is used
only with the CMPXCHG8B instruction.
m128 A memory double quadword operand in memory. This nomenclature
is used only with the SSE and SSE2 instructions.
m16:16, m16:32 A memory operand containing a far pointer composed of two numbers.
The number to the left of the colon corresponds to the pointer's
segment selector. The number to the right corresponds to its
offset.
m16&32, m16&16, m32&32 A memory operand consisting of data item pairs whose sizes are
indicated on the left and the right side of the ampersand. All
memory addressing modes are allowed. The m16&16 and m32&32
operands are used by the BOUND instruction to provide an operand
containing an upper and lower bounds for array indices. The
m16&32 operand is used by LIDT and LGDT to provide a word with
which to load the limit field, and a doubleword with which to
load the base field of the corresponding GDTR and IDTR
registers.
moffs8, moffs16, moffs32 A simple memory variable (memory offset) of type byte, word, or
doubleword used by some variants of the MOV instruction. The
actual address is given by a simple offset relative to the
segment base. No ModR/M byte is used in the instruction. The
number shown with moffs indicates its size, which is determined
by the address-size attribute of the instruction.
Sreg A segment register. The segment register bit assignments are
ES=0, CS=1, SS=2, DS=3, FS=4, and GS=5.
m32fp, m64fp, m80fp A single-precision, double-precision, and double
extended-precision (respectively) floating-point operand in
memory. These symbols designate floating-point values that are
used as operands for x87 FPU floating-point instructions.
m16int, m32int, m64int A word, doubleword, and quadword integer (respectively) operand
in memory. These symbols designate integers that are used as
operands for x87 FPU integer instructions.
ST or ST(0) The top element of the FPU register stack.
ST(i) The i-th element from the top of the FPU register stack. (i <0
through 7)
mm An MMX technology register. The 64-bit MMX technology registers
are: MM0 through MM7.
mm/m32 The low order 32 bits of an MMX technology register or a 32-bit
memory operand. The 64-bit MMX technology registers are: MM0
through MM7. The contents of memory are found at the address
provided by the effective address computation.
mm/m64 An MMX technology register or a 64-bit memory operand. The
64-bit MMX technology registers are: MM0 through MM7. The
contents of memory are found at the address provided by the
effective address computation.
xmm An XMM register. The 128-bit XMM registers are: XMM0 through
XMM7.
xmm/m32 An XMM register or a 32-bit memory operand. The 128-bit XMM
registers are XMM0 through XMM7. The contents of memory are
found at the address provided by the effective address
computation.
xmm/m64 An XMM register or a 64-bit memory operand. The 128-bit SIMD
floating-point registers are XMM0 through XMM7. The contents of
memory are found at the address provided by the effective
address computation.
xmm/m128 An XMM register or a 128-bit memory operand. The 128-bit XMM
registers are XMM0 through XMM7. The contents of memory are
found at the address provided by the effective address
computation.
Table 1. 16-Bit Addressing Forms with the ModR/M Byte
╔════════════════════════════════╦══════╤══════╤══════╤══════╤══════╤══════╤══════╤══════╗
║ r8(/r) ║ AL │ CL │ DL │ BL │ AH │ CH │ DH │ BH ║
║ r16(/r) ║ AX │ CX │ DX │ BX │ SP │ BP(1)│ SI │ DI ║
║ r32(/r) ║ EAX │ ECX │ EDX │ EBX │ ESP │ EBP │ ESI │ EDI ║
║ mm(/r) ║ MM0 │ MM1 │ MM2 │ MM3 │ MM4 │ MM5 │ MM6 │ MM7 ║
║ xmm(/r) ║ XMM0 │ XMM1 │ XMM2 │ XMM3 │ XMM4 │ XMM5 │ XMM6 │ XMM7 ║
║ /digit(Opcode) ║ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 ║
║ REG= ║ 000 │ 001 │ 010 │ 011 │ 100 │ 101 │ 110 │ 111 ║
╟────────────────────┬─────┬─────╫──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╢
║ Effective │ │ ║ ║
║ address │ Mod │ R/M ║ Value of ModR/M Byte (in Hexadecimal) ║
╠════════════════════╪═════╪═════╬══════╤══════╤══════╤══════╤══════╤══════╤══════╤══════╣
║ [BX+SI] │ 00 │ 000 ║ 00 │ 08 │ 10 │ 18 │ 20 │ 28 │ 30 │ 38 ║
║ [BX+DI] │ │ 001 ║ 01 │ 09 │ 11 │ 19 │ 21 │ 29 │ 31 │ 39 ║
║ [BP+SI] │ │ 010 ║ 02 │ 0A │ 12 │ 1A │ 22 │ 2A │ 32 │ 3A ║
║ [BP+DI] │ │ 011 ║ 03 │ 0B │ 13 │ 1B │ 23 │ 2B │ 33 │ 3B ║
║ [SI] │ │ 100 ║ 04 │ 0C │ 14 │ 1C │ 24 │ 2C │ 34 │ 3C ║
║ [DI] │ │ 101 ║ 05 │ 0D │ 15 │ 1D │ 25 │ 2D │ 35 │ 3D ║
║ disp16(2) │ │ 110 ║ 06 │ 0E │ 16 │ 1E │ 26 │ 2E │ 36 │ 3E ║
║ [BX] │ │ 111 ║ 07 │ 0F │ 17 │ 1F │ 27 │ 2F │ 37 │ 3F ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ [BX+SI]+disp8(3) │ 01 │ 000 ║ 40 │ 48 │ 50 │ 58 │ 60 │ 68 │ 70 │ 78 ║
║ [BX+DI]+disp8 │ │ 001 ║ 41 │ 49 │ 51 │ 59 │ 61 │ 69 │ 71 │ 79 ║
║ [BP+SI]+disp8 │ │ 010 ║ 42 │ 4A │ 52 │ 5A │ 62 │ 6A │ 72 │ 7A ║
║ [BP+DI]+disp8 │ │ 011 ║ 43 │ 4B │ 53 │ 5B │ 63 │ 6B │ 73 │ 7B ║
║ [SI]+disp8 │ │ 100 ║ 44 │ 4C │ 54 │ 5C │ 64 │ 6C │ 74 │ 7C ║
║ [DI]+disp8 │ │ 101 ║ 45 │ 4D │ 55 │ 5D │ 65 │ 6D │ 75 │ 7D ║
║ [BP]+disp8 │ │ 110 ║ 46 │ 4E │ 56 │ 5E │ 66 │ 6E │ 76 │ 7E ║
║ [BX]+disp8 │ │ 111 ║ 47 │ 4F │ 57 │ 5F │ 67 │ 6F │ 77 │ 7F ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ [BX+SI]+disp16 │ 10 │ 000 ║ 80 │ 88 │ 90 │ 98 │ A0 │ A8 │ B0 │ B8 ║
║ [BX+DI]+disp16 │ │ 001 ║ 81 │ 89 │ 91 │ 99 │ A1 │ A9 │ B1 │ B9 ║
║ [BP+SI]+disp16 │ │ 010 ║ 82 │ 8A │ 92 │ 9A │ A2 │ AA │ B2 │ BA ║
║ [BP+DI]+disp16 │ │ 011 ║ 83 │ 8B │ 93 │ 9B │ A3 │ AB │ B3 │ BB ║
║ [SI]+disp16 │ │ 100 ║ 84 │ 8C │ 94 │ 9C │ A4 │ AC │ B4 │ BC ║
║ [DI]+disp16 │ │ 101 ║ 85 │ 8D │ 95 │ 9D │ A5 │ AD │ B5 │ BD ║
║ [BP]+disp16 │ │ 110 ║ 86 │ 8E │ 96 │ 9E │ A6 │ AE │ B6 │ BE ║
║ [BX]+disp16 │ │ 111 ║ 87 │ 8F │ 97 │ 9F │ A7 │ AF │ B7 │ BF ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ EAX/AX/AL/MM0/XMM0 │ 11 │ 000 ║ C0 │ C8 │ D0 │ D8 │ E0 │ E8 │ F0 │ F8 ║
║ ECX/CX/CL/MM1/XMM1 │ │ 001 ║ C1 │ C9 │ D1 │ D9 │ E1 │ E9 │ F1 │ F9 ║
║ EDX/DX/DL/MM2/XMM2 │ │ 010 ║ C2 │ CA │ D2 │ DA │ E2 │ EA │ F2 │ FA ║
║ EBX/BX/BL/MM3/XMM3 │ │ 011 ║ C3 │ CB │ D3 │ DB │ E3 │ EB │ F3 │ FB ║
║ ESP/SP/AH/MM4/XMM4 │ │ 100 ║ C4 │ CC │ D4 │ DC │ E4 │ EC │ F4 │ FC ║
║ EBP/BP/CH/MM5/XMM5 │ │ 101 ║ C5 │ CD │ D5 │ DD │ E5 │ ED │ F5 │ FD ║
║ ESI/SI/DH/MM6/XMM6 │ │ 110 ║ C6 │ CE │ D6 │ DE │ E6 │ EE │ F6 │ FE ║
║ EDI/DI/BH/MM7/XMM7 │ │ 111 ║ C7 │ CF │ D7 │ DF │ E7 │ EF │ F7 │ FF ║
╚════════════════════╧═════╧═════╩══════╧══════╧══════╧══════╧══════╧══════╧══════╧══════╝
(1) The default segment register is SS for the effective addresses containing a BP index,
DS for other effec-tive addresses.
(2) The disp16 nomenclature denotes a 16-bit displacement that follows the ModR/M byte and
that is added to the index.
(3) The disp8 nomenclature denotes an 8-bit displacement that follows the ModR/M byte and
that is sign-extended and added to the index.
Table 2. 32-Bit Addressing Forms with the ModR/M Byte
╔════════════════════════════════╦══════╤══════╤══════╤══════╤══════╤══════╤══════╤══════╗
║ r8(/r) ║ AL │ CL │ DL │ BL │ AH │ CH │ DH │ BH ║
║ r16(/r) ║ AX │ CX │ DX │ BX │ SP │ BP │ SI │ DI ║
║ r32(/r) ║ EAX │ ECX │ EDX │ EBX │ ESP │ EBP │ ESI │ EDI ║
║ mm(/r) ║ MM0 │ MM1 │ MM2 │ MM3 │ MM4 │ MM5 │ MM6 │ MM7 ║
║ xmm(/r) ║ XMM0 │ XMM1 │ XMM2 │ XMM3 │ XMM4 │ XMM5 │ XMM6 │ XMM7 ║
║ /digit(Opcode) ║ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 ║
║ REG= ║ 000 │ 001 │ 010 │ 011 │ 100 │ 101 │ 110 │ 111 ║
╟────────────────────┬─────┬─────╫──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╢
║ Effective │ │ ║ ║
║ address │ Mod │ R/M ║ Value of ModR/M Byte (in Hexadecimal) ║
╠════════════════════╪═════╪═════╬══════╤══════╤══════╤══════╤══════╤══════╤══════╤══════╣
║ [EAX] │ 00 │ 000 ║ 00 │ 08 │ 10 │ 18 │ 20 │ 28 │ 30 │ 38 ║
║ [ECX] │ │ 001 ║ 01 │ 09 │ 11 │ 19 │ 21 │ 29 │ 31 │ 39 ║
║ [EDX] │ │ 010 ║ 02 │ 0A │ 12 │ 1A │ 22 │ 2A │ 32 │ 3A ║
║ [EBX] │ │ 011 ║ 03 │ 0B │ 13 │ 1B │ 23 │ 2B │ 33 │ 3B ║
║ [--][--](1) │ │ 100 ║ 04 │ 0C │ 14 │ 1C │ 24 │ 2C │ 34 │ 3C ║
║ disp32(2) │ │ 101 ║ 05 │ 0D │ 15 │ 1D │ 25 │ 2D │ 35 │ 3D ║
║ [ESI] │ │ 110 ║ 06 │ 0E │ 16 │ 1E │ 26 │ 2E │ 36 │ 3E ║
║ [EDI] │ │ 111 ║ 07 │ 0F │ 17 │ 1F │ 27 │ 2F │ 37 │ 3F ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ [EAX]+disp8(3) │ 01 │ 000 ║ 40 │ 48 │ 50 │ 58 │ 60 │ 68 │ 70 │ 78 ║
║ [ECX]+disp8 │ │ 001 ║ 41 │ 49 │ 51 │ 59 │ 61 │ 69 │ 71 │ 79 ║
║ [EDX]+disp8 │ │ 010 ║ 42 │ 4A │ 52 │ 5A │ 62 │ 6A │ 72 │ 7A ║
║ [EBX]+disp8 │ │ 011 ║ 43 │ 4B │ 53 │ 5B │ 63 │ 6B │ 73 │ 7B ║
║ [--][--]+disp8 │ │ 100 ║ 44 │ 4C │ 54 │ 5C │ 64 │ 6C │ 74 │ 7C ║
║ [EBP]+disp8 │ │ 101 ║ 45 │ 4D │ 55 │ 5D │ 65 │ 6D │ 75 │ 7D ║
║ [ESI]+disp8 │ │ 110 ║ 46 │ 4E │ 56 │ 5E │ 66 │ 6E │ 76 │ 7E ║
║ [EDI]+disp8 │ │ 111 ║ 47 │ 4F │ 57 │ 5F │ 67 │ 6F │ 77 │ 7F ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ [EAX]+disp32 │ 10 │ 000 ║ 80 │ 88 │ 90 │ 98 │ A0 │ A8 │ B0 │ B8 ║
║ [ECX]+disp32 │ │ 001 ║ 81 │ 89 │ 91 │ 99 │ A1 │ A9 │ B1 │ B9 ║
║ [EDX]+disp32 │ │ 010 ║ 82 │ 8A │ 92 │ 9A │ A2 │ AA │ B2 │ BA ║
║ [EBX]+disp32 │ │ 011 ║ 83 │ 8B │ 93 │ 9B │ A3 │ AB │ B3 │ BB ║
║ [--][--]+disp32 │ │ 100 ║ 84 │ 8C │ 94 │ 9C │ A4 │ AC │ B4 │ BC ║
║ [EBP]+disp32 │ │ 101 ║ 85 │ 8D │ 95 │ 9D │ A5 │ AD │ B5 │ BD ║
║ [ESI]+disp32 │ │ 110 ║ 86 │ 8E │ 96 │ 9E │ A6 │ AE │ B6 │ BE ║
║ [EDI]+disp32 │ │ 111 ║ 87 │ 8F │ 97 │ 9F │ A7 │ AF │ B7 │ BF ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ EAX/AX/AL/MM0/XMM0 │ 11 │ 000 ║ C0 │ C8 │ D0 │ D8 │ E0 │ E8 │ F0 │ F8 ║
║ ECX/CX/CL/MM1/XMM1 │ │ 001 ║ C1 │ C9 │ D1 │ D9 │ E1 │ E9 │ F1 │ F9 ║
║ EDX/DX/DL/MM2/XMM2 │ │ 010 ║ C2 │ CA │ D2 │ DA │ E2 │ EA │ F2 │ FA ║
║ EBX/BX/BL/MM3/XMM3 │ │ 011 ║ C3 │ CB │ D3 │ DB │ E3 │ EB │ F3 │ FB ║
║ ESP/SP/AH/MM4/XMM4 │ │ 100 ║ C4 │ CC │ D4 │ DC │ E4 │ EC │ F4 │ FC ║
║ EBP/BP/CH/MM5/XMM5 │ │ 101 ║ C5 │ CD │ D5 │ DD │ E5 │ ED │ F5 │ FD ║
║ ESI/SI/DH/MM6/XMM6 │ │ 110 ║ C6 │ CE │ D6 │ DE │ E6 │ EE │ F6 │ FE ║
║ EDI/DI/BH/MM7/XMM7 │ │ 111 ║ C7 │ CF │ D7 │ DF │ E7 │ EF │ F7 │ FF ║
╚════════════════════╧═════╧═════╩══════╧══════╧══════╧══════╧══════╧══════╧══════╧══════╝
(1) The [--][--] nomenclature means a SIB follows the ModR/M byte.
(2) The disp32 nomenclature denotes a 32-bit displacement that follows ModR/M byte (or the
SIB byte if one is present) and that is added to the index.
(3) The disp8 nomenclature denotes an 8-bit displacement that follows ModR/M byte (or the
SIB byte if one is present) and that is sign-extended and added to the index.
Table 3. 32-Bit Addressing Forms with the SIB Byte
╔════════════════════════════════╦══════╤══════╤══════╤══════╤══════╤══════╤══════╤══════╗
║ r32(/r) ║ EAX │ ECX │ EDX │ EBX │ ESP │ [*] │ ESI │ EDI ║
║ Base = ║ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 ║
║ Base = ║ 000 │ 001 │ 010 │ 011 │ 100 │ 101 │ 110 │ 111 ║
╟────────────────────┬─────┬─────╫──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╢
║ Scaled Index │ SS │Index║ Value of SIB Byte (in Hexadecimal) ║
╠════════════════════╪═════╪═════╬══════╤══════╤══════╤══════╤══════╤══════╤══════╤══════╣
║ [EAX] │ 00 │ 000 ║ 00 │ 08 │ 10 │ 18 │ 20 │ 28 │ 30 │ 38 ║
║ [ECX] │ │ 001 ║ 01 │ 09 │ 11 │ 19 │ 21 │ 29 │ 31 │ 39 ║
║ [EDX] │ │ 010 ║ 02 │ 0A │ 12 │ 1A │ 22 │ 2A │ 32 │ 3A ║
║ [EBX] │ │ 011 ║ 03 │ 0B │ 13 │ 1B │ 23 │ 2B │ 33 │ 3B ║
║ none │ │ 100 ║ 04 │ 0C │ 14 │ 1C │ 24 │ 2C │ 34 │ 3C ║
║ [EBP] │ │ 101 ║ 05 │ 0D │ 15 │ 1D │ 25 │ 2D │ 35 │ 3D ║
║ [ESI] │ │ 110 ║ 06 │ 0E │ 16 │ 1E │ 26 │ 2E │ 36 │ 3E ║
║ [EDI] │ │ 111 ║ 07 │ 0F │ 17 │ 1F │ 27 │ 2F │ 37 │ 3F ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ [EAX*2] │ 01 │ 000 ║ 40 │ 48 │ 50 │ 58 │ 60 │ 68 │ 70 │ 78 ║
║ [ECX*2] │ │ 001 ║ 41 │ 49 │ 51 │ 59 │ 61 │ 69 │ 71 │ 79 ║
║ [EDX*2] │ │ 010 ║ 42 │ 4A │ 52 │ 5A │ 62 │ 6A │ 72 │ 7A ║
║ [EBX*2] │ │ 011 ║ 43 │ 4B │ 53 │ 5B │ 63 │ 6B │ 73 │ 7B ║
║ none │ │ 100 ║ 44 │ 4C │ 54 │ 5C │ 64 │ 6C │ 74 │ 7C ║
║ [EBP*2] │ │ 101 ║ 45 │ 4D │ 55 │ 5D │ 65 │ 6D │ 75 │ 7D ║
║ [ESI*2] │ │ 110 ║ 46 │ 4E │ 56 │ 5E │ 66 │ 6E │ 76 │ 7E ║
║ [EDI*2] │ │ 111 ║ 47 │ 4F │ 57 │ 5F │ 67 │ 6F │ 77 │ 7F ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ [EAX*4] │ 10 │ 000 ║ 80 │ 88 │ 90 │ 98 │ A0 │ A8 │ B0 │ B8 ║
║ [ECX*4] │ │ 001 ║ 81 │ 89 │ 91 │ 99 │ A1 │ A9 │ B1 │ B9 ║
║ [EDX*4] │ │ 010 ║ 82 │ 8A │ 92 │ 9A │ A2 │ AA │ B2 │ BA ║
║ [EBX*4] │ │ 011 ║ 83 │ 8B │ 93 │ 9B │ A3 │ AB │ B3 │ BB ║
║ none │ │ 100 ║ 84 │ 8C │ 94 │ 9C │ A4 │ AC │ B4 │ BC ║
║ [EBP*4] │ │ 101 ║ 85 │ 8D │ 95 │ 9D │ A5 │ AD │ B5 │ BD ║
║ [ESI*4] │ │ 110 ║ 86 │ 8E │ 96 │ 9E │ A6 │ AE │ B6 │ BE ║
║ [EDI*4] │ │ 111 ║ 87 │ 8F │ 97 │ 9F │ A7 │ AF │ B7 │ BF ║
╟────────────────────┼─────┼─────╫──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────║
║ [EAX*8] │ 11 │ 000 ║ C0 │ C8 │ D0 │ D8 │ E0 │ E8 │ F0 │ F8 ║
║ [ECX*8] │ │ 001 ║ C1 │ C9 │ D1 │ D9 │ E1 │ E9 │ F1 │ F9 ║
║ [EDX*8] │ │ 010 ║ C2 │ CA │ D2 │ DA │ E2 │ EA │ F2 │ FA ║
║ [EBX*8] │ │ 011 ║ C3 │ CB │ D3 │ DB │ E3 │ EB │ F3 │ FB ║
║ none │ │ 100 ║ C4 │ CC │ D4 │ DC │ E4 │ EC │ F4 │ FC ║
║ [EBP*8] │ │ 101 ║ C5 │ CD │ D5 │ DD │ E5 │ ED │ F5 │ FD ║
║ [ESI*8] │ │ 110 ║ C6 │ CE │ D6 │ DE │ E6 │ EE │ F6 │ FE ║
║ [EDI*8] │ │ 111 ║ C7 │ CF │ D7 │ DF │ E7 │ EF │ F7 │ FF ║
╚════════════════════╧═════╧═════╩══════╧══════╧══════╧══════╧══════╧══════╧══════╧══════╝
The [*] nomenclature means a disp32 with no base if the MOD is 00b. Otherwise, [*] means
disp8 or disp32 + [EBP]. This provides the following address modes:
MOD bits Effective Address
00 [scaled index] + disp32
01 [scaled index] + disp8 + [EBP]
10 [scaled index] + disp32 + [EBP]
Table 4. Register Encodings Associated with
the +rb, +rw, and +rd Nomenclature
┌────────┬────────┬─────────┐
│ rb │ rw │ rd │
│ AL = 0 │ AX = 0 │ EAX = 0 │
│ CL = 1 │ CX = 1 │ ECX = 1 │
│ DL = 2 │ DX = 2 │ EDX = 2 │
│ BL = 3 │ BX = 3 │ EBX = 3 │
├────────┼────────┼─────────┤
│ rb │ rw │ rd │
│ AH = 4 │ SP = 4 │ ESP = 4 │
│ CH = 5 │ BP = 5 │ EBP = 5 │
│ DH = 6 │ SI = 6 │ ESI = 6 │
│ BH = 7 │ DI = 7 │ EDI = 7 │
└────────┴────────┴─────────┘
Opcode Instruction Description
00 /r ADD r/m8,r8 Add r8 to r/m8
01 /r ADD r/m16,r16 Add r16 to r/m16
01 /r ADD r/m32,r32 Add r32 to r/m32
02 /r ADD r8,r/m8 Add r/m8 to r8
03 /r ADD r16,r/m16 Add r/m16 to r16
03 /r ADD r32,r/m32 Add r/m32 to r32
04 ib ADD AL, imm8 Add imm8 to AL
05 iw ADD AX, imm16 Add imm16 to AX
05 id ADD EAX, imm32 Add imm32 to EAX
06 PUSH ES Push ES
07 POP ES Pop top of stack into ES; increment stack pointer
08 /r OR r/m8,r8 r/m8 OR r8
09 /r OR r/m16,r16 r/m16 OR r16
09 /r OR r/m32,r32 r/m32 OR r32
0A /r OR r8,r/m8 r8 OR r/m8
0B /r OR r16,r/m16 r16 OR r/m16
0B /r OR r32,r/m32 r32 OR r/m32
0C ib OR AL, imm8 AL OR imm8
0D iw OR AX, imm16 AX OR imm16
0D id OR EAX, imm32 EAX OR imm32
0E PUSH CS Push CS
0F 00 /0 SLDT r/m16 Stores segment selector from LDTR in r/m16
0F 00 /0 SLDT r/m32 Store segment selector from LDTR in low-order 16 bits of r/m32
0F 00 /1 STR r/m16 Stores segment selector from TR in r/m16
0F 00 /2 LLDT r/m16 Load segment selector r/m16 into LDTR
0F 00 /3 LTR r/m16 Load r/m16 into task register
0F 00 /4 VERR r/m16 Set ZF=1 if segment specified with r/m16 can be read
0F 00 /5 VERW r/m16 Set ZF=1 if segment specified with r/m16 can be written
0F 01 /0 SGDT m Store GDTR to m
0F 01 /1 SIDT m Store IDTR to m
0F 01 /2 LGDT m16&32 Load m into GDTR
0F 01 /3 LIDT m16&32 Load m into IDTR
0F 01 /4 SMSW r/m16 Store machine status word to r/m16
0F 01 /4 SMSW r32/m16 Store machine status word in low-order 16 bits of r32/m16; high-order 16 bits of r32 are undefined
0F 01 /6 LMSW r/m16 Loads r/m16 in machine status word of CR0
0F 01 /7 INVLPG m Invalidate TLB Entry for page that contains m
0F 02 /r LAR r16,r/m16 r16 <- r/m16 masked by FF00H
0F 02 /r LAR r32,r/m32 r32 <- r/m32 masked by 00FxFF00H
0F 03 /r LSL r16,r/m16 Load: r16 <- segment limit, selector r/m16
0F 03 /r LSL r32,r/m32 Load: r32 <- segment limit, selector r/m32)
0F 06 CLTS Clears TS flag in CR0
0F 08 INVD Flush internal caches; initiate flushing of external caches.
0F 09 WBINVD Write back and flush Internal caches; initiate writing-back and flushing of external caches.
0F 0B UD2 Raise invalid opcode exception
0F 10 /r MOVUPS xmm1, xmm2/m128 Move packed single-precision floating-point values from xmm2/m128 to xmm1.
0F 11 /r MOVUPS xmm2/m128, xmm1 Move packed single-precision floating-point values from xmm1 to xmm2/m128.
0F 12 /r MOVHLPS xmm1, xmm2 Move two packed single-precision floating-point values from high quadword of xmm2 to low quadword of xmm1.
0F 12 /r MOVLPS xmm, m64 Move two packed single-precision floating-point values from m64 to low quadword of xmm.
0F 13 /r MOVLPS m64, xmm Move two packed single-precision floating-point values from low quadword of xmm to m64.
0F 14 /r UNPCKLPS xmm1, xmm2/m128 Unpacks and Interleaves single-precision floating-point values from low quadwords of xmm1 and xmm2/mem into xmm1.
0F 15 /r UNPCKHPS xmm1, xmm2/m128 Unpacks and Interleaves single-precision floating-point values from high quadwords of xmm1 and xmm2/mem into xmm1.
0F 16 /r MOVHPS xmm, m64 Move two packed single-precision floating-point values from m64 to high quadword of xmm.
0F 16 /r MOVLHPS xmm1, xmm2 Move two packed single-precision floating-point values from low quadword of xmm2 to high quadword of xmm1.
0F 17 /r MOVHPS m64, xmm Move two packed single-precision floating-point values from high quadword of xmm to m64.
0F 18 /0 PREFETCHNTA m8 Move data from m8 closer to the processor using NTA hint.
0F 18 /1 PREFETCHT0 m8 Move data from m8 closer to the processor using T0 hint.
0F 18 /2 PREFETCHT1 m8 Move data from m8 closer to the processor using T1 hint.
0F 18 /3 PREFETCHT2 m8 Move data from m8 closer to the processor using T2 hint.
0F 20 /r MOV r32,CR0 Move CR0 to r32
0F 20 /r MOV r32,CR2 Move CR2 to r32
0F 20 /r MOV r32,CR3 Move CR3 to r32
0F 20 /r MOV r32,CR4 Move CR4 to r32
0F 21 /r MOV r32, DR0-DR7 Move debug register to r32
0F 22 /r MOV CR0, r32 Move r32 to CR0
0F 22 /r MOV CR2, r32 Move r32 to CR2
0F 22 /r MOV CR3, r32 Move r32 to CR3
0F 22 /r MOV CR4, r32 Move r32 to CR4
0F 23 /r MOV DR0-DR7, r32 Move r32 to debug register
0F 28 /r MOVAPS xmm1, xmm2/m128 Move packed single-precision floating-point values from xmm2/m128 to xmm1.
0F 29 /r MOVAPS xmm2/m128, xmm1 Move packed single-precision floating-point values from xmm1 to xmm2/m128.
0F 2A /r CVTPI2PS xmm, mm/m64 Convert two signed doubleword integers from mm/m64 to two single-precision floating-point values in xmm.
0F 2B /r MOVNTPS m128, xmm Move packed single-precision floating-point values from xmm to m128 using non-temporal hint.
0F 2C /r CVTTPS2PI mm, xmm/m64 Convert two single-precision floating-point values from xmm/m64 to two signed doubleword signed integers in mm using truncation.
0F 2D /r CVTPS2PI mm, xmm/m64 Convert two packed single-precision floating-point values from xmm/m64 to two packed signed doubleword integers in mm.
0F 2E /r UCOMISS xmm1, xmm2/m32 Compare lower single-precision floating-point value in xmm1 register with lower single-precision floating-point value in xmm2/mem and set the status flags accordingly.
0F 2F /r COMISS xmm1, xmm2/m32 Compare low single-precision floating-point values in xmm1 and xmm2/mem32 and set the EFLAGS flags accordingly.
0F 30 WRMSR Write the value in EDX:EAX to MSR specified by ECX
0F 31 RDTSC Read time-stamp counter into EDX:EAX
0F 32 RDMSR Load MSR specified by ECX into EDX:EAX
0F 33 RDPMC Read performance-monitoring counter specified by ECX into EDX:EAX
0F 34 SYSENTER Fast call to privilege level 0 system procedures
0F 35 SYSEXIT Fast return to privilege level 3 user code.
0F 40 /r CMOVO r16, r/m16 Move if overflow (OF=0)
0F 40 /r CMOVO r32, r/m32 Move if overflow (OF=0)
0F 41 /r CMOVNO r16, r/m16 Move if not overflow (OF=0)
0F 41 /r CMOVNO r32, r/m32 Move if not overflow (OF=0)
0F 42 /r CMOVB r16, r/m16 Move if below (CF=1)
0F 42 /r CMOVB r32, r/m32 Move if below (CF=1)
0F 42 /r CMOVC r16, r/m16 Move if carry (CF=1)
0F 42 /r CMOVC r32, r/m32 Move if carry (CF=1)
0F 42 /r CMOVNAE r16, r/m16 Move if not above or equal (CF=1)
0F 42 /r CMOVNAE r32, r/m32 Move if not above or equal (CF=1)
0F 43 /r CMOVAE r16, r/m16 Move if above or equal (CF=0)
0F 43 /r CMOVAE r32, r/m32 Move if above or equal (CF=0)
0F 43 /r CMOVNB r16, r/m16 Move if not below (CF=0)
0F 43 /r CMOVNB r32, r/m32 Move if not below (CF=0)
0F 43 /r CMOVNC r16, r/m16 Move if not carry (CF=0)
0F 43 /r CMOVNC r32, r/m32 Move if not carry (CF=0)
0F 44 /r CMOVE r16, r/m16 Move if equal (ZF=1)
0F 44 /r CMOVE r32, r/m32 Move if equal (ZF=1)
0F 44 /r CMOVZ r16, r/m16 Move if zero (ZF=1)
0F 44 /r CMOVZ r32, r/m32 Move if zero (ZF=1)
0F 45 /r CMOVNE r16, r/m16 Move if not equal (ZF=0)
0F 45 /r CMOVNE r32, r/m32 Move if not equal (ZF=0)
0F 45 /r CMOVNZ r16, r/m16 Move if not zero (ZF=0)
0F 45 /r CMOVNZ r32, r/m32 Move if not zero (ZF=0)
0F 46 /r CMOVBE r16, r/m16 Move if below or equal (CF=1 or ZF=1)
0F 46 /r CMOVBE r32, r/m32 Move if below or equal (CF=1 or ZF=1)
0F 46 /r CMOVNA r16, r/m16 Move if not above (CF=1 or ZF=1)
0F 46 /r CMOVNA r32, r/m32 Move if not above (CF=1 or ZF=1)
0F 47 /r CMOVA r16, r/m16 Move if above (CF=0 and ZF=0)
0F 47 /r CMOVA r32, r/m32 Move if above (CF=0 and ZF=0)
0F 47 /r CMOVNBE r16, r/m16 Move if not below or equal (CF=0 and ZF=0)
0F 47 /r CMOVNBE r32, r/m32 Move if not below or equal (CF=0 and ZF=0)
0F 48 /r CMOVS r16, r/m16 Move if sign (SF=1)
0F 48 /r CMOVS r32, r/m32 Move if sign (SF=1)
0F 49 /r CMOVNS r16, r/m16 Move if not sign (SF=0)
0F 49 /r CMOVNS r32, r/m32 Move if not sign (SF=0)
0F 4A /r CMOVP r16, r/m16 Move if parity (PF=1)
0F 4A /r CMOVP r32, r/m32 Move if parity (PF=1)
0F 4A /r CMOVPE r16, r/m16 Move if parity even (PF=1)
0F 4A /r CMOVPE r32, r/m32 Move if parity even (PF=1)
0F 4B /r CMOVNP r16, r/m16 Move if not parity (PF=0)
0F 4B /r CMOVNP r32, r/m32 Move if not parity (PF=0)
0F 4B /r CMOVPO r16, r/m16 Move if parity odd (PF=0)
0F 4B /r CMOVPO r32, r/m32 Move if parity odd (PF=0)
0F 4C /r CMOVL r16, r/m16 Move if less (SF<>OF)
0F 4C /r CMOVL r32, r/m32 Move if less (SF<>OF)
0F 4C /r CMOVNGE r16, r/m16 Move if not greater or equal (SF<>OF)
0F 4C /r CMOVNGE r32, r/m32 Move if not greater or equal (SF<>OF)
0F 4D /r CMOVGE r16, r/m16 Move if greater or equal (SF=OF)
0F 4D /r CMOVGE r32, r/m32 Move if greater or equal (SF=OF)
0F 4D /r CMOVNL r16, r/m16 Move if not less (SF=OF)
0F 4D /r CMOVNL r32, r/m32 Move if not less (SF=OF)
0F 4E /r CMOVLE r16, r/m16 Move if less or equal (ZF=1 or SF<>OF)
0F 4E /r CMOVLE r32, r/m32 Move if less or equal (ZF=1 or SF<>OF)
0F 4E /r CMOVNG r16, r/m16 Move if not greater (ZF=1 or SF<>OF)
0F 4E /r CMOVNG r32, r/m32 Move if not greater (ZF=1 or SF<>OF)
0F 4F /r CMOVG r16, r/m16 Move if greater (ZF=0 and SF=OF)
0F 4F /r CMOVG r32, r/m32 Move if greater (ZF=0 and SF=OF)
0F 4F /r CMOVNLE r16, r/m16 Move if not less or equal (ZF=0 and SF=OF)
0F 4F /r CMOVNLE r32, r/m32 Move if not less or equal (ZF=0 and SF=OF)
0F 50 /r MOVMSKPS r32, xmm Extract 4-bit sign mask of from xmm and store in r32.
0F 51 /r SQRTPS xmm1, xmm2/m128 Computes square roots of the packed single-precision floating-point values in xmm2/m128 and stores the results in xmm1.
0F 52 /r RSQRTPS xmm1, xmm2/m128 Computes the approximate reciprocals of the square roots of the packed single-precision floating-point values in xmm2/m128 and stores the results in xmm1.
0F 53 /r RCPPS xmm1, xmm2/m128 Computes the approximate reciprocals of the packed single-precision floating-point values in xmm2/m128 and stores the results in xmm1.
0F 54 /r ANDPS xmm1, xmm2/m128 Bitwise logical AND of xmm2/m128 and xmm1.
0F 55 /r ANDNPS xmm1, xmm2/m128 Bitwise logical AND NOT of xmm2/m128 and xmm1.
0F 56 /r ORPS xmm1, xmm2/m128 Bitwise OR of xmm2/m128 and xmm1
0F 57 /r XORPS xmm1, xmm2/m128 Bitwise exclusive-OR of xmm2/m128 and xmm1.
0F 58 /r ADDPS xmm1, xmm2/m128 Add packed single-precision floating-point values from xmm2/m128 to xmm1.
0F 59 /r MULPS xmm1, xmm2/m128 Multiply packed single-precision floating-point values in xmm2/mem by xmm1.
0F 5A /r CVTPS2PD xmm1, xmm2/m64 Convert two packed single-precision floating-point values in xmm2/m64 to two packed double-precision floating-point values in xmm1.
0F 5B /r CVTDQ2PS xmm1, xmm2/m128 Convert four packed signed doubleword integers from xmm2/m128 to four packed single-precision floating-point values in xmm1.
0F 5C /r SUBPS xmm1 xmm2/m128 Subtract packed single-precision floating-point values in xmm2/mem from xmm1.
0F 5D /r MINPS xmm1, xmm2/m128 Return the minimum single-precision floating-point values between xmm2/m128 and xmm1.
0F 5E /r DIVPS xmm1, xmm2/m128 Divide packed single-precision floating-point values in xmm1 by packed single-precision floating-point values xmm2/m128.
0F 5F /r MAXPS xmm1, xmm2/m128 Return the maximum single-precision floating-point values between xmm2/m128 and xmm1.
0F 60 /r PUNPCKLBW mm, mm/m32 Interleave low-order bytes from mm and mm/m64 into mm.
0F 61 /r PUNPCKLWD mm, mm/m32 Interleave low-order words from mm and mm/m64 into mm.
0F 62 /r PUNPCKLDQ mm, mm/m32 Interleave low-order doublewords from mm and mm/m64 into mm.
0F 63 /r PACKSSWB mm, mm/m64 Packs and saturate pack 4 signed words from mm and 4 signed words from mm/m64 into 8 signed bytes in mm.
0F 63 /r PACKSSWB mm1, mm2/m64 Converts 4 packed signed word integers from mm1 and from mm2/m64 into 8 packed signed byte integers in mm1 using signed saturation.
0F 64 /r PCMPGTB mm, mm/m64 Compare packed bytes in mm with packed bytes in mm/m64 for greater value.
0F 65 /r PCMPGTW mm, mm/m64 Compare packed words in mm with packed words in mm/m64 for greater value.
0F 66 /r PCMPGTD mm, mm/m64 Compare packed doublewords in mm with packed doublewords in mm/m64 for greater value.
0F 67 /r PACKUSWB mm, mm/m64 Converts 4 signed word integers from mm and 4 signed word integers from mm/m64 into 8 unsigned byte integers in mm using unsigned saturation.
0F 68 /r PUNPCKHBW mm, mm/m64 Interleave high-order bytes from mm and mm/m64 into mm.
0F 69 /r PUNPCKHWD mm, mm/m64 Interleave high-order words from mm and mm/m64 into mm.
0F 6A /r PUNPCKHDQ mm, mm/m64 Interleave high-order doublewords from mm and mm/m64 into mm.
0F 6B /r PACKSSDW mm, mm/m64 Pack and saturate 2 signed doublewords from mm and 2 signed doublewords from mm/m64 into 4 signed words in mm.
0F 6B /r PACKSSDW mm1, mm2/m64 Converts 2 packed signed doubleword integers from mm1 and from mm2/m64 into 4 packed signed word integers in mm1 using signed saturation.
0F 6E /r MOVD mm, r/m32 Move doubleword from r/m32 to mm.
0F 6F /r MOVQ mm, mm/m64 Move quadword from mm/m64 to mm.
0F 70 /r ib PSHUFW mm1, mm2/m64, imm8 Shuffle the words in mm2/m64 based on the encoding in imm8 and store the result in mm1.
0F 71 /2 ib PSRLW mm, imm8 Shift words in mm right by imm8.
0F 71 /4 ib PSRAW mm, imm8 Shift words in mm right by imm8 while shifting in sign bits
0F 71 /6 ib PSLLW mm, imm8 Shift words in mm left by imm8, while shifting in zeros.
0F 72 /2 ib PSRLD mm, imm8 Shift doublewords in mm right by imm8.
0F 72 /4 ib PSRAD mm, imm8 Shift doublewords in mm right by imm8 while shifting in sign bits.
0F 72 /6 ib PSLLD mm, imm8 Shift doublewords in mm by imm8, while shifting in zeros.
0F 73 /2 ib PSRLQ mm, imm8 Shift mm right by imm8 while shifting in zeros.
0F 73 /6 ib PSLLQ mm, imm8 Shift mm left by Imm8, while shifting in zeros.
0F 74 /r PCMPEQB mm, mm/m64 Compare packed bytes in mm/m64 with packed bytes in mm for equality.
0F 75 /r PCMPEQW mm, mm/m64 Compare packed words in mm/m64 with packed words in mm for equality.
0F 76 /r PCMPEQD mm, mm/m64 Compare packed doublewords in mm/m64 with packed doublewords in mm for equality.
0F 77 EMMS Set the FP tag word to empty.
0F 7E /r MOVD r/m32, mm Move doubleword from mm to r/m32.
0F 7F /r MOVQ mm/m64, mm Move quadword from mm to mm/m64.
0F 80 cw/cd JO rel16/32 Jump near if overflow (OF=1)
0F 81 cw/cd JNO rel16/32 Jump near if not overflow (OF=0)
0F 82 cw/cd JB rel16/32 Jump near if below (CF=1)
0F 82 cw/cd JC rel16/32 Jump near if carry (CF=1)
0F 82 cw/cd JNAE rel16/32 Jump near if not above or equal (CF=1)
0F 83 cw/cd JAE rel16/32 Jump near if above or equal (CF=0)
0F 83 cw/cd JNB rel16/32 Jump near if not below (CF=0)
0F 83 cw/cd JNC rel16/32 Jump near if not carry (CF=0)
0F 84 cw/cd JE rel16/32 Jump near if equal (ZF=1)
0F 84 cw/cd JZ rel16/32 Jump near if 0 (ZF=1)
0F 84 cw/cd JZ rel16/32 Jump near if 0 (ZF=1)
0F 85 cw/cd JNE rel16/32 Jump near if not equal (ZF=0)
0F 85 cw/cd JNZ rel16/32 Jump near if not zero (ZF=0)
0F 86 cw/cd JBE rel16/32 Jump near if below or equal (CF=1 or ZF=1)
0F 86 cw/cd JNA rel16/32 Jump near if not above (CF=1 or ZF=1)
0F 87 cw/cd JA rel16/32 Jump near if above (CF=0 and ZF=0)
0F 87 cw/cd JNBE rel16/32 Jump near if not below or equal (CF=0 and ZF=0)
0F 88 cw/cd JS rel16/32 Jump near if sign (SF=1)
0F 89 cw/cd JNS rel16/32 Jump near if not sign (SF=0)
0F 8A cw/cd JP rel16/32 Jump near if parity (PF=1)
0F 8A cw/cd JPE rel16/32 Jump near if parity even (PF=1)
0F 8B cw/cd JNP rel16/32 Jump near if not parity (PF=0)
0F 8B cw/cd JPO rel16/32 Jump near if parity odd (PF=0)
0F 8C cw/cd JL rel16/32 Jump near if less (SF<>OF)
0F 8C cw/cd JNGE rel16/32 Jump near if not greater or equal (SF<>OF)
0F 8D cw/cd JGE rel16/32 Jump near if greater or equal (SF=OF)
0F 8D cw/cd JNL rel16/32 Jump near if not less (SF=OF)
0F 8E cw/cd JLE rel16/32 Jump near if less or equal (ZF=1 or SF<>OF)
0F 8E cw/cd JNG rel16/32 Jump near if not greater (ZF=1 or SF<>OF)
0F 8F cw/cd JG rel16/32 Jump near if greater (ZF=0 and SF=OF)
0F 8F cw/cd JNLE rel16/32 Jump near if not less or equal (ZF=0 and SF=OF)
0F 90 SETO r/m8 Set byte if overflow (OF=1)
0F 91 SETNO r/m8 Set byte if not overflow (OF=0)
0F 92 SETB r/m8 Set byte if below (CF=1)
0F 92 SETC r/m8 Set if carry (CF=1)
0F 92 SETNAE r/m8 Set byte if not above or equal (CF=1)
0F 93 SETAE r/m8 Set byte if above or equal (CF=0)
0F 93 SETNB r/m8 Set byte if not below (CF=0)
0F 93 SETNC r/m8 Set byte if not carry (CF=0)
0F 94 SETE r/m8 Set byte if equal (ZF=1)
0F 94 SETZ r/m8 Set byte if zero (ZF=1)
0F 95 SETNE r/m8 Set byte if not equal (ZF=0)
0F 95 SETNZ r/m8 Set byte if not zero (ZF=0)
0F 96 SETBE r/m8 Set byte if below or equal (CF=1 or ZF=1)
0F 96 SETNA r/m8 Set byte if not above (CF=1 or ZF=1)
0F 97 SETA r/m8 Set byte if above (CF=0 and ZF=0)
0F 97 SETNBE r/m8 Set byte if not below or equal (CF=0 and ZF=0)
0F 98 SETS r/m8 Set byte if sign (SF=1)
0F 99 SETNS r/m8 Set byte if not sign (SF=0)
0F 9A SETP r/m8 Set byte if parity (PF=1)
0F 9A SETPE r/m8 Set byte if parity even (PF=1)
0F 9B SETNP r/m8 Set byte if not parity (PF=0)
0F 9B SETPO r/m8 Set byte if parity odd (PF=0)
0F 9C SETL r/m8 Set byte if less (SF<>OF)
0F 9C SETNGE r/m8 Set if not greater or equal (SF<>OF)
0F 9D SETGE r/m8 Set byte if greater or equal (SF=OF)
0F 9D SETNL r/m8 Set byte if not less (SF=OF)
0F 9E SETLE r/m8 Set byte if less or equal (ZF=1 or SF<>OF)
0F 9E SETNG r/m8 Set byte if not greater (ZF=1 or SF<>OF)
0F 9F SETG r/m8 Set byte if greater (ZF=0 and SF=OF)
0F 9F SETNLE r/m8 Set byte if not less or equal (ZF=0 and SF=OF)
0F A0 PUSH FS Push FS
0F A1 POP FS Pop top of stack into FS; increment stack pointer
0F A2 CPUID Returns processor identification and feature information to the EAX, EBX, ECX, and EDX registers, according to the input value entered initially in the EAX register
0F A3 BT r/m16,r16 Store selected bit in CF flag
0F A3 BT r/m32,r32 Store selected bit in CF flag
0F A4 SHLD r/m16, r16, imm8 Shift r/m16 to left imm8 places while shifting bits from r16 in from the right
0F A4 SHLD r/m32, r32, imm8 Shift r/m32 to left imm8 places while shifting bits from r32 in from the right
0F A5 SHLD r/m16, r16, CL Shift r/m16 to left CL places while shifting bits from r16 in from the right
0F A5 SHLD r/m32, r32, CL Shift r/m32 to left CL places while shifting bits from r32 in from the right
0F A8 PUSH GS Push GS
0F A9 POP GS Pop top of stack into GS; increment stack pointer
0F AA RSM Resume operation of interrupted program
0F AB BTS r/m16,r16 Store selected bit in CF flag and set
0F AB BTS r/m32,r32 Store selected bit in CF flag and set
0F AC SHRD r/m16, r16, imm8 Shift r/m16 to right imm8 places while shifting bits from r16 in from the left
0F AC SHRD r/m32, r32, mm8 Shift r/m32 to right imm8 places while shifting bits from r32 in from the left
0F AD SHRD r/m16, r16, CL Shift r/m16 to right CL places while shifting bits from r16 in from the left
0F AD SHRD r/m32, r32, CL Shift r/m32 to right CL places while shifting bits from r32 in from the left
0F AE /0 FXSAVE m512byte Save the x87 FPU, MMX technology, XMM, and MXCSR register state to m512byte.
0F AE /1 FXRSTOR m512byte Restore the x87 FPU, MMX technology, XMM, and MXCSR register state from m512byte.
0F AE /2 LDMXCSR m32 Load MXCSR register from m32.
0F AE /3 STMXCSR m32 Store contents of MXCSR register to m32.
0F AE /5 LFENCE Serializes load operations.
0F AE /6 MFENCE Serializes load and store operations.
0F AE /7 CLFLUSH m8 Flushes cache line containing m8.
0F AE /7 SFENCE Serializes store operations.
0F AF /r IMUL r16,r/m16 word register <- word register * r/m word
0F AF /r IMUL r32,r/m32 doubleword register <- doubleword register * r/m doubleword
0F B0 /r CMPXCHG r/m8,r8 Compare AL with r/m8. If equal, ZF is set and r8 is loaded into r/m8. Else, clear ZF and load r/m8 into AL.
0F B1 /r CMPXCHG r/m16,r16 Compare AX with r/m16. If equal, ZF is set and r16 is loaded into r/m16. Else, clear ZF and load r/m16 into AL
0F B1 /r CMPXCHG r/m32,r32 Compare EAX with r/m32. If equal, ZF is set and r32 is loaded into r/m32. Else, clear ZF and load r/m32 into AL
0F B2 /r LSS r16,m16:16 Load SS: r16 with far pointer from memory
0F B2 /r LSS r32,m16:32 Load SS: r32 with far pointer from memory
0F B3 BTR r/m16,r16 Store selected bit in CF flag and clear
0F B3 BTR r/m32,r32 Store selected bit in CF flag and clear
0F B4 /r LFS r16,m16:16 Load FS: r16 with far pointer from memory
0F B4 /r LFS r32,m16:32 Load FS: r32 with far pointer from memory
0F B5 /r LGS r16,m16:16 Load GS: r16 with far pointer from memory
0F B5 /r LGS r32,m16:32 Load GS: r32 with far pointer from memory
0F B6 /r MOVZX r16,r/m8 Move byte to word with zero-extension
0F B6 /r MOVZX r32,r/m8 Move byte to doubleword, zero-extension
0F B7 /r MOVZX r32,r/m16 Move word to doubleword, zero-extension
0F BA /4 ib BT r/m16,imm8 Store selected bit in CF flag
0F BA /4 ib BT r/m32,imm8 Store selected bit in CF flag
0F BA /5 ib BTS r/m16,imm8 Store selected bit in CF flag and set
0F BA /5 ib BTS r/m32,imm8 Store selected bit in CF flag and set
0F BA /6 ib BTR r/m16,imm8 Store selected bit in CF flag and clear
0F BA /6 ib BTR r/m32,imm8 Store selected bit in CF flag and clear
0F BA /7 ib BTC r/m16,imm8 Store selected bit in CF flag and complement
0F BA /7 ib BTC r/m32,imm8 Store selected bit in CF flag and complement
0F BB BTC r/m16,r16 Store selected bit in CF flag and complement
0F BB BTC r/m32,r32 Store selected bit in CF flag and complement
0F BC BSF r16,r/m16 Bit scan forward on r/m16
0F BC BSF r32,r/m32 Bit scan forward on r/m32
0F BD BSR r16,r/m16 Bit scan reverse on r/m16
0F BD BSR r32,r/m32 Bit scan reverse on r/m32
0F BE /r MOVSX r16,r/m8 Move byte to word with sign-extension
0F BE /r MOVSX r32,r/m8 Move byte to doubleword, sign-extension
0F BF /r MOVSX r32,r/m16 Move word to doubleword, sign-extension
0F C0 /r XADD r/m8, r8 Exchange r8 and r/m8; load sum into r/m8.
0F C1 /r XADD r/m16, r16 Exchange r16 and r/m16; load sum into r/m16.
0F C1 /r XADD r/m32, r32 Exchange r32 and r/m32; load sum into r/m32.
0F C2 /r ib CMPPS xmm1, xmm2/m128, imm8 Compare packed single-precision floating-point values in xmm2/mem and xmm1 using imm8 as comparison predicate.
0F C3 /r MOVNTI m32, r32 Move doubleword from r32 to m32 using non-temporal hint.
0F C4 /r ib PINSRW mm, r32/m16, imm8 Insert the low word from r32 or from m16 into mm at the word position specified by imm8
0F C5 /r ib PEXTRW r32, mm, imm8 Extract the word specified by imm8 from mm and move it to r32.
0F C6 /r ib SHUFPS xmm1, xmm2/m128, imm8 Shuffle packed single-precision floating-point values selected by imm8 from xmm1 and xmm1/m128 to xmm1.
0F C7 /1 m64 CMPXCHG8B m64 Compare EDX:EAX with m64. If equal, set ZF and load ECX:EBX into m64. Else, clear ZF and load m64 into EDX:EAX.
0F C8+rd BSWAP r32 Reverses the byte order of a 32-bit register.
0F D1 /r PSRLW mm, mm/m64 Shift words in mm right by amount specified in mm/m64 while shifting in zeros.
0F D2 /r PSRLD mm, mm/m64 Shift doublewords in mm right by amount specified in mm/m64 while shifting in zeros.
0F D3 /r PSRLQ mm, mm/m64 Shift mm right by amount specified in mm/m64 while shifting in zeros.
0F D4 /r PADDQ mm1,mm2/m64 Add quadword integer mm2/m64 to mm1
0F D5 /r PMULLW mm, mm/m64 Multiply the packed words in mm with the packed words in mm/m64, then store the low-order word of each doubleword result in mm.
0F D7 /r PMOVMSKB r32, mm Move a byte mask of mm to r32.
0F D8 /r PSUBUSB mm, mm/m64 Subtract unsigned packed bytes in mm/m64 from unsigned packed bytes in mm and saturate.
0F D9 /r PSUBUSW mm, mm/m64 Subtract unsigned packed words in mm/m64 from unsigned packed words in mm and saturate.
0F DA /r PMINUB mm1, mm2/m64 Compare unsigned byte integers in mm2/m64 and mm1 and returns minimum values.
0F DB /r PAND mm, mm/m64 AND quadword from mm/m64 to quadword in mm.
0F DC /r PADDUSB mm, mm/m64 Add unsigned packed bytes from mm/m64 to unsigned packed bytes in mm and saturate.
0F DD /r PADDUSW mm, mm/m64 Add unsigned packed words from mm/m64 to unsigned packed words in mm and saturate.
0F DE /r PMAXUB mm1, mm2/m64 Compare unsigned byte integers in mm2/m64 and mm1 and returns maximum values.
0F DF /r PANDN mm, mm/m64 AND quadword from mm/m64 to NOT quadword in mm.
0F E0 /r PAVGB mm1, mm2/m64 Average packed unsigned byte integers from mm2/m64 and mm1 with rounding.
0F E1 /r PSRAW mm, mm/m64 Shift words in mm right by amount specified in mm/m64 while shifting in sign bits.
0F E2 /r PSRAD mm, mm/m64 Shift doublewords in mm right by amount specified in mm/m64 while shifting in sign bits.
0F E3 /r PAVGW mm1, mm2/m64 Average packed unsigned word integers from mm2/m64 and mm1 with rounding.
0F E4 /r PMULHUW mm1, mm2/m64 Multiply the packed unsigned word integers in mm1 register and mm2/m64, and store the high 16 bits of the results in mm1.
0F E5 /r PMULHW mm, mm/m64 Multiply the signed packed words in mm by the signed packed words in mm/m64, then store the high-order word of each doubleword result in mm.
0F E7 /r MOVNTQ m64, mm Move quadword from mm to m64 using non-temporal hint.
0F E8 /r PSUBSB mm, mm/m64 Subtract signed packed bytes in mm/m64 from signed packed bytes in mm and saturate.
0F E9 /r PSUBSW mm, mm/m64 Subtract signed packed words in mm/m64 from signed packed words in mm and saturate.
0F EA /r PMINSW mm1, mm2/m64 Compare signed word integers in mm2/m64 and mm1 and return minimum values.
0F EC /r PADDSB mm, mm/m64 Add signed packed bytes from mm/m64 to signed packed bytes in mm and saturate.
0F EB /r POR mm, mm/m64 OR quadword from mm/m64 to quadword in mm.
0F ED /r PADDSW mm, mm/m64 Add signed packed words from mm/m64 to signed packed words in mm and saturate.
0F EE /r PMAXSW mm1, mm2/m64 Compare signed word integers in mm2/m64 and mm1 and return maximum values.
0F EF /r PXOR mm, mm/m64 XOR quadword from mm/m64 to quadword in mm.
0F F1 /r PSLLW mm, mm/m64 Shift words in mm left by amount specified in mm/m64, while shifting in zeros.
0F F2 /r PSLLD mm, mm/m64 Shift doublewords in mm left by amount specified in mm/m64, while shifting in zeros.
0F F3 /r PSLLQ mm, mm/m64 Shift mm left by amount specified in mm/m64, while shifting in zeros.
0F F4 /r PMULUDQ mm1, mm2/m64 Multiply unsigned doubleword integer in mm1 by unsigned doubleword integer in mm2/m64, and store the quadword result in mm1.
0F F5 /r PMADDWD mm, mm/m64 Multiply the packed words in mm by the packed words in mm/m64. Add the 32-bit pairs of results and store in mm as doubleword
0F F6 /r PSADBW mm1, mm2/m64 Computes the absolute differences of the packed unsigned byte integers from mm2 /m64 and mm1; differences are then summed to produce an unsigned word integer result.
0F F7 /r MASKMOVQ mm1, mm2 Selectively write bytes from mm1 to memory location using the byte mask in mm2
0F F8 /r PSUBB mm, mm/m64 Subtract packed bytes in mm/m64 from packed bytes in mm.
0F F9 /r PSUBW mm, mm/m64 Subtract packed words in mm/m64 from packed words in mm.
0F FA /r PSUBD mm, mm/m64 Subtract packed doublewords in mm/m64 from packed doublewords in mm.
0F FB /r PSUBQ mm1, mm2/m64 Subtract quadword integer in mm1 from mm2/m64.
0F FC /r PADDB mm, mm/m64 Add packed bytes from mm/m64 to packed bytes in mm.
0F FD /r PADDW mm, mm/m64 Add packed words from mm/m64 to packed words in mm.
0F FE /r PADDD mm, mm/m64 Add packed doublewords from mm/m64 to packed doublewords in mm.
10 /r ADC r/m8,r8 Add with carry byte register to r/m8
11 /r ADC r/m16,r16 Add with carry r16 to r/m16
11 /r ADC r/m32,r32 Add with CF r32 to r/m32
12 /r ADC r8,r/m8 Add with carry r/m8 to byte register
13 /r ADC r16,r/m16 Add with carry r/m16 to r16
13 /r ADC r32,r/m32 Add with CF r/m32 to r32
14 ib ADC AL, imm8 Add with carry imm8 to AL
15 iw ADC AX, imm16 Add with carry imm16 to AX
15 id ADC EAX, imm32 Add with carry imm32 to EAX
16 PUSH SS Push SS
17 POP SS Pop top of stack into SS; increment stack pointer
18 /r SBB r/m8,r8 Subtract with borrow r8 from r/m8
19 /r SBB r/m16,r16 Subtract with borrow r16 from r/m16
19 /r SBB r/m32,r32 Subtract with borrow r32 from r/m32
1A /r SBB r8,r/m8 Subtract with borrow r/m8 from r8
1B /r SBB r16,r/m16 Subtract with borrow r/m16 from r16
1B /r SBB r32,r/m32 Subtract with borrow r/m32 from r32
1C ib SBB AL, imm8 Subtract with borrow imm8 from AL
1D iw SBB AX, imm16 Subtract with borrow imm16 from AX
1D id SBB EAX, imm32 Subtract with borrow imm32 from EAX
1E PUSH DS Push DS
1F POP DS Pop top of stack into DS; increment stack pointer
20 /r AND r/m8,r8 r/m8 AND r8
21 /r AND r/m16,r16 r/m16 AND r16
21 /r AND r/m32,r32 r/m32 AND r32
22 /r AND r8,r/m8 r8 AND r/m8
23 /r AND r16,r/m16 r16 AND r/m16
23 /r AND r32,r/m32 r32 AND r/m32
24 ib AND AL, imm8 AL AND imm8
25 iw AND AX, imm16 AX AND i mm16
25 id AND EAX, imm32 EAX AND imm32
27 DAA Decimal adjust AL after addition
28 /r SUB r/m8,r8 Subtract r8 from r/m8
29 /r SUB r/m16,r16 Subtract r16 from r/m16
29 /r SUB r/m32,r32 Subtract r32 from r/m32
2A /r SUB r8,r/m8 Subtract r/m8 from r8
2B /r SUB r16,r/m16 Subtract r/m16 from r16
2B /r SUB r32,r/m32 Subtract r/m32 from r32
2C ib SUB AL,imm8 Subtract imm8 from AL
2D iw SUB AX,imm16 Subtract imm16 from AX
2D id SUB EAX,imm32 Subtract imm32 from EAX
2F DAS Decimal adjust AL after subtraction
30 /r XOR r/m8,r8 r/m8 XOR r8
31 /r XOR r/m16,r16 r/m16 XOR r16
31 /r XOR r/m32,r32 r/m32 XOR r32
32 /r XOR r8,r/m8 r8 XOR r/m8
33 /r XOR r16,r/m16 r16 XOR r/m16
33 /r XOR r32,r/m32 r32 XOR r/m32
34 ib XOR AL,imm8 AL XOR imm8
35 iw XOR AX,imm16 AX XOR imm16
35 id XOR EAX,imm32 EAX XOR imm32
37 AAA ASCII adjust AL after addition
38 /r CMP r/m8,r8 Compare r8 with r/m8
39 /r CMP r/m16,r16 Compare r16 with r/m16
39 /r CMP r/m32,r32 Compare r32 with r/m32
3A /r CMP r8,r/m8 Compare r/m8 with r8
3B /r CMP r16,r/m16 Compare r/m16 with r16
3B /r CMP r32,r/m32 Compare r/m32 with r32
3C ib CMP AL, imm8 Compare imm8 with AL
3D iw CMP AX, imm16 Compare imm16 with AX
3D id CMP EAX, imm32 Compare imm32 with EAX
3F AAS ASCII adjust AL after subtraction
40+rw INC r16 Increment word register by 1
40+rd INC r32 Increment doubleword register by 1
48+rw DEC r16 Decrement r16 by 1
48+rd DEC r32 Decrement r32 by 1
50+rw PUSH r16 Push r16
50+rd PUSH r32 Push r32
58+rw POP r16 Pop top of stack into r16; increment stack pointer
58+rd POP r32 Pop top of stack into r32; increment stack pointer
60 PUSHA Push AX, CX, DX, BX, original SP, BP, SI, and DI
60 PUSHAD Push EAX, ECX, EDX, EBX, original ESP, EBP, ESI, and EDI
61 POPA Pop DI, SI, BP, BX, DX, CX, and AX
61 POPAD Pop EDI, ESI, EBP, EBX, EDX, ECX, and EAX
62 /r BOUND r16,m16&16 Check if r16 (array index) is within bounds specified by m16&16
62 /r BOUND r32,m32&32 Check if r32 (array index) is within bounds specified by m16&16
63 /r ARPL r/m16,r16 Adjust RPL of r/m16 to not less than RPL of r16
66 0F 10 /r MOVUPD xmm1, xmm2/m128 Move packed double-precision floating-point values from xmm2/m128 to xmm1.
66 0F 11 /r MOVUPD xmm2/m128, xmm Move packed double-precision floating-point values from xmm1 to xmm2/m128.
66 0F 12 /r MOVLPD xmm, m64 Move double-precision floating-point value from m64 to low quadword of xmm register.
66 0F 13 /r MOVLPD m64, xmm Move double-precision floating-point nvalue from low quadword of xmm register to m64.
66 0F 14 /r UNPCKLPD xmm1, xmm2/m128 Unpacks and Interleaves double-precision floating-point values from low quadwords of xmm1 and xmm2/m128.
66 0F 15 /r UNPCKHPD xmm1, xmm2/m128 Unpacks and Interleaves double-precision floating-point values from high quadwords of xmm1 and xmm2/m128.
66 0F 16 /r MOVHPD xmm, m64 Move double-precision floating-point value from m64 to high quadword of xmm.
66 0F 17 /r MOVHPD m64, xmm Move double-precision floating-point value from high quadword of xmm to m64.
66 0F 28 /r MOVAPD xmm1, xmm2/m128 Move packed double-precision floating-point values from xmm2/m128 to xmm1.
66 0F 29 /r MOVAPD xmm2/m128, xmm1 Move packed double-precision floating-point values from xmm1 to xmm2/m128.
66 0F 2A /r CVTPI2PD xmm, mm/m64 Convert two packed signed doubleword integers from mm/mem64 to two packed double-precision floating-point values in xmm.
66 0F 2B /r MOVNTPD m128, xmm Move packed double-precision floating-point values from xmm to m128 using non-temporal hint.
66 0F 2C /r CVTTPD2PI mm, xmm/m128 Convert two packer double-precision floating-point values from xmm/m128 to two packed signed doubleword integers in mm using truncation.
66 0F 2D /r CVTPD2PI mm, xmm/m128 Convert two packed double-precision floating-point values from xmm/m128 to two packed signed doubleword integers in mm.
66 0F 2E /r UCOMISD xmm1, xmm2/m64 Compares (unordered) the low double-precision floating-point values in xmm1 and xmm2/m64 and set the EFLAGS accordingly.
66 0F 2F /r COMISD xmm1, xmm2/m64 Compare low double-precision floating-point values in xmm1 and xmm2/mem64 and set the EFLAGS flags accordingly.
66 0F 50 /r MOVMSKPD r32, xmm Extract 2-bit sign mask of from xmm and store in r32.
66 0F 51 /r SQRTPD xmm1, xmm2/m128 Computes square roots of the packed double-precision floating-point values in xmm2/m128 and stores the results in xmm1.
66 0F 54 /r ANDPD xmm1, xmm2/m128 Bitwise logical AND of xmm2/m128 and xmm1.
66 0F 55 /r ANDNPD xmm1, xmm2/m128 Bitwise logical AND NOT of xmm2/m128 and xmm1.
66 0F 56 /r ORPD xmm1, xmm2/m128 Bitwise OR of xmm2/m128 and xmm1.
66 0F 57 /r XORPD xmm1, xmm2/m128 Bitwise exclusive-OR of xmm2/m128 and xmm1
66 0F 58 /r ADDPD xmm1, xmm2/m128 Add packed double-precision floating-point values from xmm2/m128 to xmm1.
66 0F 59 /r MULPD xmm1, xmm2/m128 Multiply packed double-precision floating-point values in xmm2/m128 by xmm1.
66 0F 5A /r CVTPD2PS xmm1, xmm2/m128 Convert two packed double-precision floating-point values in xmm2/m128 to two packed single-precision floating-point values in xmm1.
66 0F 5B /r CVTPS2DQ xmm1, xmm2/m128 Convert four packed single-precision floating-point values from xmm2/m128 to four packed signed doubleword integers in xmm1.
66 0F 5C /r SUBPD xmm1, xmm2/m128 Subtract packed double-precision floating-point values in xmm2/m128 from xmm1.
66 0F 5D /r MINPD xmm1, xmm2/m128 Return the minimum double-precision floating-point values between xmm2/m128 and xmm1.
66 0F 5E /r DIVPD xmm1, xmm2/m128 Divide packed double-precision floating-point values in xmm1 by packed double-precision floating-point values xmm2/m128.
66 0F 5F /r MAXPD xmm1, xmm2/m128 Return the maximum double-precision floating-point values between xmm2/m128 and xmm1.
66 0F 60 /r PUNPCKLBW xmm1, xmm2/m128 Interleave low-order bytes from xmm1 and xmm2/m128 into xmm1.
66 0F 61 /r PUNPCKLWD xmm1, xmm2/m128 Interleave low-order words from xmm1 and xmm2/m128 into xmm1.
66 0F 62 /r PUNPCKLDQ xmm1, xmm2/m128 Interleave low-order doublewords from xmm1 and xmm2/m128 into xmm1.
66 0F 63 /r PACKSSWB xmm1, xmm2/m128 Converts 8 packed signed word integers from xmm1 and from xmm2/m128 into 16 packed signed byte integers in xmm1 using signed saturation.
66 0F 64 /r PCMPGTB xmm1, xmm2/m128 Compare packed signed byte integers in xmm1 and xmm2/m128 for greater than.
66 0F 65 /r PCMPGTW xmm1, xmm2/m128 Compare packed signed word integers in xmm1 and xmm2/m128 for greater than.
66 0F 66 /r PCMPGTD xmm1, xmm2/m128 Compare packed signed doubleword integers in xmm1 and xmm2/m128 for greater than.
66 0F 67 /r PACKUSWB xmm1, xmm2/m128 Converts 8 signed word integers from xmm1 and 8 signed word integers from xmm2/m128 into 16 unsigned byte integers in xmm1 using unsigned saturation.
66 0F 68 /r PUNPCKHBW xmm1, xmm2/m128 Unpack and interleave high-order bytes from xmm1 and xmm2/m128 into xmm1.
66 0F 69 /r PUNPCKHWD xmm1, xmm2/m128 Unpack and interleave high-order words from xmm1 and xmm2/m128 into xmm1.
66 0F 6A /r PUNPCKHDQ xmm1, xmm2/m128 Unpack and interleave high-order doublewords from xmm1 and xmm2/m128 into xmm1.
66 0F 6B /r PACKSSDW xmm1, xmm2/m128 Converts 4 packed signed doubleword integers from xmm1 and from xmm2/m128 into 8 packed signed word integers in xmm1 using signed saturation.
66 0F 6C /r PUNPCKLQDQ xmm1, xmm2/m128 Interleave low-order quadwords from xmm1 and xmm2/m128 into xmm1 register
66 0F 6D /r PUNPCKHQDQ xmm1, xmm2/m128 Unpack and interleave high-order quadwords from xmm1 and xmm2/m128 into xmm1
66 0F 6E /r MOVD xmm, r/m32 Move doubleword from r/m32 to xmm.
66 0F 6F /r MOVDQA xmm1, xmm2/m128 Move aligned double quadword from xmm2/m128 to xmm1.
66 0F 70 /r ib PSHUFD xmm1, xmm2/m128, imm8 Shuffle the doublewords in xmm2/m128 based on the encoding in imm8 and store the result in xmm1.
66 0F 71 /2 ib PSRLW xmm1, imm8 Shift words in xmm1 right by imm8 while shifting in 0s.
66 0F 71 /4 ib PSRAW xmm1, imm8 Shift words in xmm1 right by imm8 while shifting in sign bits
66 0F 71 /6 ib PSLLW xmm1, imm8 Shift words in xmm1 left by imm8 while shifting in 0s.
66 0F 72 /2 ib PSRLD xmm1, imm8 Shift doublewords in xmm1 right by imm8 while shifting in 0s.
66 0F 72 /4 ib PSRAD xmm1, imm8 Shift doublewords in xmm1 right by imm8 while shifting in sign bits.
66 0F 72 /6 ib PSLLD xmm1, imm8 Shift doublewords in xmm1 left by imm8 while shifting in 0s.
66 0F 73 /2 ib PSRLQ xmm1, imm8 Shift quadwords in xmm1 right by imm8 while shifting in 0s.
66 0F 73 /3 ib PSRLDQ xmm1, imm8 Shift xmm1 right by imm8 while shifting in 0s.
66 0F 73 /6 ib PSLLQ xmm1, imm8 Shift quadwords in xmm1 left by imm8 while shifting in 0s.
66 0F 73 /7 ib PSLLDQ xmm1, imm8 Shift xmm1 left by imm8 bytes while shifting in 0s.
66 0F 74 /r PCMPEQB xmm1, xmm2/m128 Compare packed bytes in xmm2/m128 and xmm1 for equality.
66 0F 75 /r PCMPEQW xmm1, xmm2/m128 Compare packed words in xmm2/m128 and xmm1 for equality.
66 0F 76 /r PCMPEQD xmm1, xmm2/m128 Compare packed doublewords in xmm2/m128 and xmm1 for equality.
66 0F 7E /r MOVD r/m32, xmm Move doubleword from xmm register to r/m32.
66 0F 7F /r MOVDQA xmm2/m128, xmm1 Move aligned double quadword from xmm1 to xmm2/m128.
66 0F C2 /r ib CMPPD xmm1, xmm2/m128, imm8 Compare packed double-precision floating-point values in xmm2/m128 and xmm1 using imm8 as comparison predicate.
66 0F C4 /r ib PINSRW xmm, r32/m16, imm8 Move the low word of r32 or from m16 into xmm at the word position specified by imm8.
66 0F C5 /r ib PEXTRW r32, xmm, imm8 Extract the word specified by imm8 from xmm and move it to a r32.
66 0F C6 /r ib SHUFPD xmm1, xmm2/m128, imm8 Shuffle packed double-precision floating-point values selected by imm8 from xmm1 and xmm1/m128 to xmm1.
66 0F D1 /r PSRLW xmm1, xmm2/m128 Shift words in xmm1 right by amount specified in xmm2/m128 while shifting in 0s.
66 0F D2 /r PSRLD xmm1, xmm2/m128 Shift doublewords in xmm1 right by amount specified in xmm2/m128 while shifting in 0s.
66 0F D3 /r PSRLQ xmm1, xmm2/m128 Shift quadwords in xmm1 right by amount specified in xmm2/m128 while shifting in 0s.
66 0F D4 /r PADDQ xmm1,xmm2/m128 Add packed quadword integers xmm2/m128 to xmm1
66 0F D5 /r PMULLW xmm1, xmm2/m128 Multiply the packed signed word integers in xmm1 and xmm2/m128, and store the low 16 bits of the results in xmm1.
66 0F D6 MOVQ xmm2/m64, xmm1 Move quadword from xmm1 to xmm2/mem64.
66 0F D7 /r PMOVMSKB r32, xmm Move a byte mask of xmm to r32.
66 0F D8 /r PSUBUSB xmm1, xmm2/m128 Subtract packed unsigned byte integers in xmm2/m128 from packed unsigned byte integers in xmm1 and saturate result.
66 0F D9 /r PSUBUSW xmm1, xmm2/m128 Subtract packed unsigned word integers in xmm2/m128 from packed unsigned word integers in xmm1 and saturate result.
66 0F DA /r PMINUB xmm1, xmm2/m128 Compare unsigned byte integers in xmm2/m128 and xmm1 and returns minimum values.
66 0F DB /r PAND xmm1, xmm2/m128 Bitwise AND of xmm2/m128 and xmm1.
66 0F DC /r PADDUSB xmm1, xmm2/m128 Add packed unsigned byte integers from xmm2/m128 and xmm1 saturate the results.
66 0F DD /r PADDUSW xmm1, xmm2/m128 Add packed unsigned word integers from xmm2/m128 to xmm1 and saturate the results.
66 0F DE /r PMAXUB xmm1, xmm2/m128 Compare unsigned byte integers in xmm2/m128 and xmm1 and returns maximum values.
66 0F DF /r PANDN xmm1, xmm2/m128 Bitwise AND NOT of xmm2/m128 and xmm1.
66 0F E0 /r PAVGB xmm1, xmm2/m128 Average packed unsigned byte integers from xmm2/m128 and xmm1 with rounding.
66 0F E1 /r PSRAW xmm1, xmm2/m128 Shift words in xmm1 right by xmm2/m128 while shifting in sign bits.
66 0F E2 /r PSRAD xmm1, xmm2/m128 Shift doubleword in xmm1 right by xmm2/m128 while shifting in sign bits.
66 0F E3 /r PAVGW xmm1, xmm2/m128 Average packed unsigned word integers from xmm2/m128 and xmm1 with rounding.
66 0F E4 /r PMULHUW xmm1, xmm2/m128 Multiply the packed unsigned word integers in xmm1 and xmm2/m128, and store the high 16 bits of the results in xmm1.
66 0F E5 /r PMULHW xmm1, xmm2/m128 Multiply the packed signed word integers in xmm1 and xmm2/m128, and store the high 16 bits of the results in xmm1.
66 0F E6 CVTTPD2DQ xmm1, xmm2/m128 Convert two packed double-precision floating-point values from xmm2/m128 to two packed signed doubleword integers in xmm1 using truncation.
66 0F E7 /r MOVNTDQ m128, xmm Move double quadword from xmm to m128 using non-temporal hint.
66 0F E8 /r PSUBSB xmm1, xmm2/m128 Subtract packed signed byte integers in xmm2/m128 from packed signed byte integers in xmm1 and saturate results.
66 0F E9 /r PSUBSW xmm1, xmm2/m128 Subtract packed signed word integers in xmm2/m128 from packed signed word integers in xmm1 and saturate results.
66 0F EA /r PMINSW xmm1, xmm2/m128 Compare signed word integers in xmm2/m128 and xmm1 and return minimum values.
66 0F EB /r POR xmm1, xmm2/m128 Bitwise OR of xmm2/m128 and xmm1.
66 0F EC /r PADDSB xmm1, xmm2/m128 Add packed signed byte integers from xmm2/m128 and xmm1 saturate the results.
66 0F ED /r PADDSW xmm1, xmm2/m128 Add packed signed word integers from xmm2/m128 and xmm1 and saturate the results.
66 0F EE /r PMAXSW xmm1, xmm2/m128 Compare signed word integers in xmm2/m128 and xmm1 and return maximum values.
66 0F EF /r PXOR xmm1, xmm2/m128 Bitwise XOR of xmm2/m128 and xmm1.
66 0F F1 /r PSLLW xmm1, xmm2/m128 Shift words in xmm1 left by xmm2/m128 while shifting in 0s.
66 0F F2 /r PSLLD xmm1, xmm2/m128 Shift doublewords in xmm1 left by xmm2/m128 while shifting in 0s.
66 0F F3 /r PSLLQ xmm1, xmm2/m128 Shift quadwords in xmm1 left by xmm2/m128 while shifting in 0s.
66 0F F4 /r PMULUDQ xmm1, xmm2/m128 Multiply packed unsigned doubleword integers in xmm1 by packed unsigned doubleword integers in xmm2/m128, and store the quadword results in xmm1.
66 0F F5 /r PMADDWD xmm1, xmm2/m128 Multiply the packed word integers in xmm1 by the packed word integers in xmm2/m128, add adjacent doubleword results, and store in xmm1.
66 0F F6 /r PSADBW xmm1, xmm2/m128 Computes the absolute differences of the packed unsigned byte integers from xmm2 /m128 and xmm1; the 8 low differences and 8 high differences are then summed separately to produce two unsigned word integer results.
66 0F F7 /r MASKMOVDQU xmm1, xmm2 Selectively write bytes from xmm1 to memory location using the byte mask in xmm2.
66 0F F8 /r PSUBB xmm1, xmm2/m128 Subtract packed byte integers in xmm2/m128 from packed byte integers in xmm1.
66 0F F9 /r PSUBW xmm1, xmm2/m128 Subtract packed word integers in xmm2/m128 from packed word integers in xmm1.
66 0F FA /r PSUBD xmm1, xmm2/m128 Subtract packed doubleword integers in xmm2/mem128 from packed doubleword integers in xmm1.
66 0F FB /r PSUBQ xmm1, xmm2/m128 Subtract packed quadword integers in xmm1 from xmm2 /m128.
66 0F FC /r PADDB xmm1, xmm2/m128 Add packed byte integers from xmm2/m128 and xmm1.
66 0F FD /r PADDW xmm1, xmm2/m128 Add packed word integers from xmm2/m128 and xmm1.
66 0F FE /r PADDD xmm1, xmm2/m128 Add packed doubleword integers from xmm2/m128 and xmm1.
68 PUSH imm16 Push imm16
68 PUSH imm32 Push imm32
69 /r iw IMUL r16,r/m16,imm16 word register <- r/m16 * immediate word
69 /r iw IMUL r16,imm16 word register <- r/m16 * immediate word
69 /r id IMUL r32,r/m32,imm32 doubleword register <- r/m32 * immediate doubleword
69 /r id IMUL r32,imm32 doubleword register <- r/m32 * immediate doubleword
6A PUSH imm8 Push imm8
6B /r ib IMUL r16,r/m16,imm8 word register <- r/m16 * sign-extended immediate byte
6B /r ib IMUL r32,r/m32,imm8 doubleword register <- r/m32 * sign-extended immediate byte
6B /r ib IMUL r16,imm8 word register <- word register * sign-extended immediate byte
6B /r ib IMUL r32,imm8 doubleword register <- doubleword register * sign-extended immediate byte
6C INS m8, DX Input byte from I/O port specified in DX into memory location specified in ES:(E)DI
6C INSB Input byte from I/O port specified in DX into memory location specified with ES:(E)DI
6D INS m16, DX Input word from I/O port specified in DX into memory location specified in ES:(E)DI
6D INS m32, DX Input doubleword from I/O port specified in DX into memory location specified in ES:(E)DI
6D INSW Input word from I/O port specified in DX into memory location specified in ES:(E)DI
6D INSD Input doubleword from I/O port specified in DX into memory location specified in ES:(E)DI
6E OUTS DX, m8 Output byte from memory location specified in DS:(E)SI to I/O port specified in DX
6E OUTSB Output byte from memory location specified in DS:(E)SI to I/O port specified in DX
6F OUTS DX, m16 Output word8 from memory location specified in DS:(E)SI to I/O port specified in DX
6F OUTS DX, m32 Output doubleword from memory location specified in DS:(E)SI to I/O port specified in DX
6F OUTSW Output word from memory location specified in DS:(E)SI to I/O port specified in DX
6F OUTSD Output doubleword from memory location specified in DS:(E)SI to I/O port specified in DX
70 cb JO rel8 Jump short if overflow (OF=1)
71 cb JNO rel8 Jump short if not overflow (OF=0)
72 cb JB rel8 Jump short if below (CF=1)
72 cb JC rel8 Jump short if carry (CF=1) (CF=0)
73 cb JNB rel8 Jump short if not below (CF=0)
73 cb JNC rel8 Jump short if not carry (CF=0)
74 cb JE rel8 Jump short if equal (ZF=1)
74 cb JZ rel8 Jump short if zero (ZF = 1)
75 cb JNE rel8 Jump short if not equal (ZF=0)
75 cb JNZ rel8 Jump short if not zero (ZF=0)
76 cb JBE rel8 Jump short if below or equal (CF=1 or ZF=1)
76 cb JNA rel8 Jump short if not above (CF=1 or ZF=1)
77 cb JA rel8 Jump short if above (CF=0 and ZF=0)
77 cb JNBE rel8 Jump short if not below or equal (CF=0 and ZF=0)
78 cb JS rel8 Jump short if sign (SF=1)
79 cb JNS rel8 Jump short if not sign (SF=0)
7A cb JP rel8 Jump short if parity (PF=1)
7A cb JPE rel8 Jump short if parity even (PF=1)
7B cb JNP rel8 Jump short if not parity (PF=0)
7B cb JPO rel8 Jump short if parity odd (PF=0)
78 cb JS rel8 Jump short if sign (SF=1)
7C cb JL rel8 Jump short if less (SF<>OF)
7C cb JNGE rel8 Jump short if not greater or equal (SF<>OF)
7D cb JGE rel8 Jump short if greater or equal (SF=OF)
7D cb JNL rel8 Jump short if not less (SF=OF)
7E cb JLE rel8 Jump short if less or equal (ZF=1 or SF<>OF)
7E cb JNG rel8 Jump short if not greater (ZF=1 or SF<>OF)
7F cb JG rel8 Jump short if greater (ZF=0 and SF=OF)
7F cb JNLE rel8 Jump short if not less or equal (ZF=0 and SF=OF)
80 /0 ib ADD r/m8,imm8 Add imm8 to r/m8
80 /1 ib OR r/m8,imm8 r/m8 OR imm8
80 /2 ib ADC r/m8,imm8 Add with carry imm8 to r/m8
80 /3 ib SBB r/m8,imm8 Subtract with borrow imm8 from r/m8
80 /4 ib AND r/m8,imm8 r/m8 AND imm8
80 /5 ib SUB r/m8,imm8 Subtract imm8 from r/m8
80 /6 ib XOR r/m8,imm8 r/m8 XOR imm8
80 /7 ib CMP r/m8, imm8 Compare imm8 with r/m8
81 /0 iw ADD r/m16,imm16 Add imm16 to r/m16
81 /0 id ADD r/m32,imm32 Add imm32 to r/m32
81 /1 iw OR r/m16,imm16 r/m16 OR imm16
81 /1 id OR r/m32,imm32 r/m32 OR imm32
81 /2 iw ADC r/m16,imm16 Add with carry imm16 to r/m16
81 /2 id ADC r/m32,imm32 Add with CF imm32 to r/m32
81 /3 iw SBB r/m16,imm16 Subtract with borrow imm16 from r/m16
81 /3 id SBB r/m32,imm32 Subtract with borrow imm32 from r/m32
81 /4 iw AND r/m16,imm16 r/m16 AND imm16
81 /4 id AND r/m32,imm32 r/m32 AND imm32
81 /5 iw SUB r/m16,imm16 Subtract imm16 from r/m16
81 /5 id SUB r/m32,imm32 Subtract imm32 from r/m32
81 /6 iw XOR r/m16,imm16 r/m16 XOR imm16
81 /6 id XOR r/m32,imm32 r/m32 XOR imm32
81 /7 iw CMP r/m16, imm16 Compare imm16 with r/m16
81 /7 id CMP r/m32,imm32 Compare imm32 with r/m32
83 /0 ib ADD r/m16,imm8 Add sign-extended imm8 to r/m16
83 /0 ib ADD r/m32,imm8 Add sign-extended imm8 to r/m32
83 /1 ib OR r/m16,imm8 r/m16 OR imm8 (sign-extended)
83 /1 ib OR r/m32,imm8 r/m32 OR imm8 (sign-extended)
83 /2 ib ADC r/m16,imm8 Add with CF sign-extended imm8 to r/m16
83 /2 ib ADC r/m32,imm8 Add with CF sign-extended imm8 into r/m32
83 /3 ib SBB r/m16,imm8 Subtract with borrow sign-extended imm8 from r/m16
83 /3 ib SBB r/m32,imm8 Subtract with borrow sign-extended imm8 from r/m32
83 /4 ib AND r/m16,imm8 r/m16 AND imm8 (sign-extended)
83 /4 ib AND r/m32,imm8 r/m32 AND imm8 (sign-extended)
83 /5 ib SUB r/m16,imm8 Subtract sign-extended imm8 from r/m16
83 /5 ib SUB r/m32,imm8 Subtract sign-extended imm8 from r/m32
83 /6 ib XOR r/m16,imm8 r/m16 XOR imm8 (sign-extended)
83 /6 ib XOR r/m32,imm8 r/m32 XOR imm8 (sign-extended)
83 /7 ib CMP r/m16,imm8 Compare imm8 with r/m16
83 /7 ib CMP r/m32,imm8 Compare imm8 with r/m32
84 /r TEST r/m8,r8 AND r8 with r/m8; set SF, ZF, PF according to result
85 /r TEST r/m16,r16 AND r16 with r/m16; set SF, ZF, PF according to result
85 /r TEST r/m32,r32 AND r32 with r/m32; set SF, ZF, PF according to result
86 /r XCHG r/m8, r8 Exchange r8 (byte register) with byte from r/m8
86 /r XCHG r8, r/m8 Exchange byte from r/m8 with r8 (byte register)
87 /r XCHG r/m16, r16 Exchange r16 with word from r/m16
87 /r XCHG r16, r/m16 Exchange word from r/m16 with r16
87 /r XCHG r/m32, r32 Exchange r32 with doubleword from r/m32
87 /r XCHG r32, r/m32 Exchange doubleword from r/m32 with r32
88 /r MOV r/m8,r8 Move r8 to r/m8
89 /r MOV r/m16,r16 Move r16 to r/m16
89 /r MOV r/m32,r32 Move r32 to r/m32
8A /r MOV r8,r/m8 Move r/m8 to r8
8B /r MOV r16,r/m16 Move r/m16 to r16
8B /r MOV r32,r/m32 Move r/m32 to r32
8C /r MOV r/m16,Sreg Move segment register to r/m16
8E /r MOV Sreg,r/m16 Move r/m16 to segment register
8D /r LEA r16,m Store effective address for m in register r16
8D /r LEA r32,m Store effective address for m in register r32
8F /0 POP m16 Pop top of stack into m16; increment stack pointer
8F /0 POP m32 Pop top of stack into m32; increment stack pointer
90 NOP No operation
90+rw XCHG AX, r16 Exchange r16 with AX
90+rw XCHG r16, AX Exchange AX with r16
90+rd XCHG EAX, r32 Exchange r32 with EAX
90+rd XCHG r32, EAX Exchange EAX with r32
98 CBW AX <- sign-extend of AL
98 CWDE EAX <- sign-extend of AX
99 CWD DX:AX <- sign-extend of AX
99 CDQ EDX:EAX -< sign-extend of EAX
9A cd CALL ptr16:16 Call far, absolute, address given in operand
9A cp CALL ptr16:32 Call far, absolute, address given in operand
9B WAIT Check pending unmasked floating-point exceptions.
9B FWAIT Check pending unmasked floating-point exceptions.
9B D9 /6 FSTENV m14/28byte Store FPU environment to m14byte or m28byte after checking for pending unmasked floating-point exceptions. Then mask all floating-point exceptions.
9B D9 /7 FSTCW m2byte Store FPU control word to m2byte after checking for pending unmasked floating-point exceptions.
9B DB E2 FCLEX Clear floating-point exception flags after checking for pending unmasked floating-point exceptions.
9B DB E3 FINIT Initialize FPU after checking for pending unmasked floating-point exceptions.
9B DD /6 FSAVE m94/108byte Store FPU state to m94byte or m108byte after checking for pending unmasked floating-point exceptions. Then re-initialize the FPU.
9B DD /7 FSTSW m2byte Store FPU status word at m2byte after checking for pending unmasked floating-point exceptions.
9B DF E0 FSTSW AX Store FPU status word in AX register after checking for pending unmasked floating-point exceptions.
9C PUSHF Push lower 16 bits of EFLAGS
9C PUSHFD Push EFLAGS
9D POPF Pop top of stack into lower 16 bits of EFLAGS
9D POPFD Pop top of stack into EFLAGS
9E SAHF Loads SF, ZF, AF, PF, and CF from AH into EFLAGS register. clocks=2
9F LAHF Load: AH = EFLAGS(SF:ZF:0:AF:0:PF:1:CF)
A0 MOV AL, moffs8 Move byte at ( seg:offset) to AL
A1 MOV AX, moffs16 Move word at ( seg:offset) to AX
A1 MOV EAX, moffs32 Move doubleword at ( seg:offset) to EAX
A2 MOV moffs8,AL Move AL to ( seg:offset)
A3 MOV moffs16,AX Move AX to ( seg:offset)
A3 MOV moffs32,EAX Move EAX to ( seg:offset)
A4 MOVS m8, m8 Move byte at address DS:(E)SI to address ES:(E)DI
A4 MOVSB Move byte at address DS:(E)SI to address ES:(E)DI
A5 MOVS m16, m16 Move word at address DS:(E)SI to address ES:(E)DI
A5 MOVS m32, m32 Move doubleword at address DS:(E)SI to address ES:(E)DI
A5 MOVSW Move word at address DS:(E)SI to address ES:(E)DI
A5 MOVSD Move doubleword at address DS:(E)SI to address ES:(E)DI
A6 CMPS m8, m8 Compares byte at address DS:(E)SI with byte at address ES:(E)DI and sets the status flags accordingly
A6 CMPSB Compares byte at address DS:(E)SI with byte at address ES:(E)DI and sets the status flags accordingly
A7 CMPS m16, m16 Compares word at address DS:(E)SI with word at address ES:(E)DI and sets the status flags accordingly
A7 CMPS m32, m32 Compares doubleword at address DS:(E)SI with doubleword at address ES:(E)DI and sets the status flags accordingly
A7 CMPSW Compares word at address DS:(E)SI with word at address ES:(E)DI and sets the status flags accordingly
A7 CMPSD Compares doubleword at address DS:(E)SI with doubleword at address ES:(E)DI and sets the status flags accordingly
A8 ib TEST AL,imm8 AND imm8 with AL; set SF, ZF, PF according to result
A9 iw TEST AX,imm16 AND imm16 with AX; set SF, ZF, PF according to result
A9 id TEST EAX,imm32 AND imm32 with EAX; set SF, ZF, PF according to result
AA STOS m8 Store AL at address ES:(E)DI
AB STOS m16 Store AX at address ES:(E)DI
AB STOS m32 Store EAX at address ES:(E)DI
AA STOSB Store AL at address ES:(E)DI
AB STOSW Store AX at address ES:(E)DI
AB STOSD Store EAX at address ES:(E)DI
AC LODS m8 Load byte at address DS:(E)SI into AL
AC LODSB Load byte at address DS:(E)SI into AL
AD LODS m16 Load word at address DS:(E)SI into AX
AD LODS m32 Load doubleword at address DS:(E)SI into EAX
AD LODSW Load word at address DS:(E)SI into AX
AD LODSD Load doubleword at address DS:(E)SI into EAX
AE SCAS m8 Compare AL with byte at ES:(E)DI and set status flags
AE SCASB Compare AL with byte at ES:(E)DI and set status flags
AF SCAS m16 Compare AX with word at ES:(E)DI and set status flags
AF SCAS m32 Compare EAX with doubleword at ES(E)DI and set status flags
AF SCASW Compare AX with word at ES:(E)DI and set status flags
AF SCASD Compare EAX with doubleword at ES:(E)DI and set status flags
B0+rb MOV r8,imm8 Move imm8 to r8
B8+rw MOV r16,imm16 Move imm16 to r16
B8+rd MOV r32,imm32 Move imm32 to r32
C0 /0 ib ROL r/m8,imm8 Rotate 8 bits r/m8 left imm8 times
C0 /1 ib ROR r/m8,imm8 Rotate 8 bits r/m16 right imm8 times
C0 /2 ib RCL r/m8,imm8 Rotate 9 bits (CF, r/m8) left imm8 times
C0 /3 ib RCR r/m8,imm8 Rotate 9 bits (CF, r/m8) right imm8 times
C0 /4 ib SAL r/m8,imm8 Multiply r/m8 by 2, imm8 times
C0 /4 ib SHL r/m8,imm8 Multiply r/m8 by 2, imm8 times
C0 /5 ib SHR r/m8,imm8 Unsigned divide r/m8 by 2, imm8 times
C0 /7 ib SAR r/m8,imm8 Signed divide r/m8 by 2, imm8 times
C1 /0 ib ROL r/m16,imm8 Rotate 16 bits r/m16 left imm8 times
C1 /0 ib ROL r/m32,imm8 Rotate 32 bits r/m32 left imm8 times
C1 /1 ib ROR r/m16,imm8 Rotate 16 bits r/m16 right imm8 times
C1 /1 ib ROR r/m32,imm8 Rotate 32 bits r/m32 right imm8 times
C1 /2 ib RCL r/m16,imm8 Rotate 17 bits (CF, r/m16) left imm8 times
C1 /2 ib RCL r/m32,imm8 Rotate 33 bits (CF, r/m32) left imm8 times
C1 /3 ib RCR r/m16,imm8 Rotate 17 bits (CF, r/m16) right imm8 times
C1 /3 ib RCR r/m32,imm8 Rotate 33 bits (CF, r/m32) right imm8 times
C1 /4 ib SAL r/m16,imm8 Multiply r/m16 by 2, imm8 times
C1 /4 ib SAL r/m32,imm8 Multiply r/m32 by 2, imm8 times
C1 /4 ib SHL r/m16,imm8 Multiply r/m16 by 2, imm8 times
C1 /4 ib SHL r/m32,imm8 Multiply r/m32 by 2, imm8 times
C1 /5 ib SHR r/m16,imm8 Unsigned divide r/m16 by 2, imm8 times
C1 /5 ib SHR r/m32,imm8 Unsigned divide r/m32 by 2, imm8 times
C1 /7 ib SAR r/m16,imm8 Signed divide r/m16 by 2, imm8 times
C1 /7 ib SAR r/m32,imm8 Signed divide r/m32 by 2, imm8 times
C2 iw RET imm16 Near return to calling procedure and pop imm16 bytes from stack
C3 RET Near return to calling procedure
C4 /r LES r16,m16:16 Load ES: r16 with far pointer from memory
C4 /r LES r32,m16:32 Load ES: r32 with far pointer from memory
C5 /r LDS r16,m16:16 Load DS: r16 with far pointer from memory
C5 /r LDS r32,m16:32 Load DS: r32 with far pointer from memory
C6 /0 MOV r/m8,imm8 Move imm8 to r/m8
C7 /0 MOV r/m16,imm16 Move imm16 to r/m16
C7 /0 MOV r/m32,imm32 Move imm32 to r/m32
C8 iw 00 ENTER imm16,0 Create a stack frame for a procedure
C8 iw 01 ENTER imm16,1 Create a nested stack frame for a procedure
C8 iw ib ENTER imm16,imm8 Create a nested stack frame for a procedure
C9 LEAVE Set SP to BP, then pop BP
C9 LEAVE Set ESP to EBP, then pop EBP
CA iw RET imm16 Far return to calling procedure and pop imm16 bytes from stack
CB RET Far return to calling procedure
CC INT 3 Interrupt 3Чtrap to debugger
CD ib INT imm8 Interrupt vector number specified by immediate byte
CE INTO Interrupt 4Чif overflow flag is 1
CF IRET Interrupt return (16-bit operand size)
CF IRETD Interrupt return (32-bit operand size)
D0 /0 ROL r/m8,1 Rotate 8 bits r/m8 left once
D0 /1 ROR r/m8,1 Rotate 8 bits r/m8 right once
D0 /2 RCL r/m8,1 Rotate 9 bits (CF, r/m8) left once
D0 /3 RCR r/m8,1 Rotate 9 bits (CF, r/m8) right once
D0 /4 SAL r/m8,1 Multiply r/m8 by 2, once
D0 /4 SHL r/m8,1 Multiply r/m8 by 2, once
D0 /5 SHR r/m8,1 Unsigned divide r/m8 by 2, once
D0 /7 SAR r/m8,1 Signed divide r/m8 by 2, once
D1 /0 ROL r/m16,1 Rotate 16 bits r/m16 left once
D1 /0 ROL r/m32,1 Rotate 32 bits r/m32 left once
D1 /1 ROR r/m16,1 Rotate 16 bits r/m16 right once
D1 /1 ROR r/m32,1 Rotate 32 bits r/m32 right once
D1 /2 RCL r/m16,1 Rotate 17 bits (CF, r/m16) left once
D1 /2 RCL r/m32,1 Rotate 33 bits (CF, r/m32) left once
D1 /3 RCR r/m16,1 Rotate 17 bits (CF, r/m16) right once
D1 /3 RCR r/m32,1 Rotate 33 bits (CF, r/m32) right once
D1 /4 SAL r/m16,1 Multiply r/m16 by 2, once
D1 /4 SAL r/m32,1 Multiply r/m32 by 2, once
D1 /4 SHL r/m16,1 Multiply r/m16 by 2, once
D1 /4 SHL r/m32,1 Multiply r/m32 by 2, once
D1 /5 SHR r/m16,1 Unsigned divide r/m16 by 2, once
D1 /5 SHR r/m32,1 Unsigned divide r/m32 by 2, once
D1 /7 SAR r/m16,1 Signed divide r/m16 by 2, once
D1 /7 SAR r/m32,1 Signed divide r/m32 by 2, once
D2 /0 ROL r/m8,CL Rotate 8 bits r/m8 left CL times
D2 /1 ROR r/m8,CL Rotate 8 bits r/m8 right CL times
D2 /2 RCL r/m8,CL Rotate 9 bits (CF, r/m8) left CL times
D2 /3 RCR r/m8,CL Rotate 9 bits (CF, r/m8) right CL times
D2 /4 SAL r/m8,CL Multiply r/m8 by 2, CL times
D2 /4 SHL r/m8,CL Multiply r/m8 by 2, CL times
D2 /5 SHR r/m8,CL Unsigned divide r/m8 by 2, CL times
D2 /7 SAR r/m8,CL Signed divide r/m8 by 2, CL times
D3 /0 ROL r/m16,CL Rotate 16 bits r/m16 left CL times
D3 /0 ROL r/m32,CL Rotate 32 bits r/m32 left CL times
D3 /1 ROR r/m16,CL Rotate 16 bits r/m16 right CL times
D3 /1 ROR r/m32,CL Rotate 32 bits r/m32 right CL times
D3 /2 RCL r/m16,CL Rotate 17 bits (CF, r/m16) left CL times
D3 /2 RCL r/m32,CL Rotate 33 bits (CF, r/m32) left CL times
D3 /3 RCR r/m16,CL Rotate 17 bits (CF, r/m16) right CL times
D3 /3 RCR r/m32,CL Rotate 33 bits (CF, r/m32) right CL times
D3 /4 SAL r/m16,CL Multiply r/m16 by 2, CL times
D3 /4 SAL r/m32,CL Multiply r/m32 by 2, CL times
D3 /4 SHL r/m16,CL Multiply r/m16 by 2, CL times
D3 /4 SHL r/m32,CL Multiply r/m32 by 2, CL times
D3 /5 SHR r/m16,CL Unsigned divide r/m16 by 2, CL times
D3 /5 SHR r/m32,CL Unsigned divide r/m32 by 2, CL times
D3 /7 SAR r/m16,CL Signed divide r/m16 by 2, CL times
D3 /7 SAR r/m32,CL Signed divide r/m32 by 2, CL times
D4 0A AAM ASCII adjust AX after multiply
D4 ib (No mnemonic) Adjust AX after multiply to number base imm8
D5 0A AAD ASCII adjust AX before division
D5 ib (No mnemonic) Adjust AX before division to number base imm8
D7 XLAT m8 Set AL to memory byte DS:[(E)BX +unsigned AL]
D7 XLATB Set AL to memory byte DS:[(E)BX +unsigned AL]
D8 /0 FADD m32fp Add m32fp to ST(0) and store result in ST(0)
D8 /1 FMUL m32fp Multiply ST(0) by m32fp and store result in ST(0)
D8 /2 FCOM m32fp Compare ST(0) with m32fp.
D8 /3 FCOMP m32fp Compare ST(0) with m32fp and pop register stack.
D8 /4 FSUB m32fp Subtract m32fp from ST(0) and store result in ST(0)
D8 /5 FSUBR m32fp Subtract ST(0) from m32fp and store result in ST(0)
D8 /6 FDIV m32fp Divide ST(0) by m32fp and store result in ST(0)
D8 /7 FDIVR m32fp Divide m32fp by ST(0) and store result in ST(0)
D8 C0+i FADD ST(0), ST(i) Add ST(0) to ST(i) and store result in ST(0)
D8 C8+i FMUL ST(0), ST(i) Multiply ST(0) by ST(i) and store result in ST(0)
D8 D0+i FCOM ST(i) Compare ST(0) with ST(i).
D8 D1 FCOM Compare ST(0) with ST(1).
D8 D8+i FCOMP ST(i) Compare ST(0) with ST(i) and pop register stack.
D8 D9 FCOMP Compare ST(0) with ST(1) and pop register stack.
D8 E0+i FSUB ST(0), ST(i) Subtract ST(i) from ST(0) and store result in ST(0)
D8 E8+i FSUBR ST(0), ST(i) Subtract ST(0) from ST(i) and store result in ST(0)
D8 F0+i FDIV ST(0), ST(i) Divide ST(0) by ST(i) and store result in ST(0)
D8 F8+i FDIVR ST(0), ST(i) Divide ST(i) by ST(0) and store result in ST(0)
D9 /0 FLD m32fp Push m32fp onto the FPU register stack.
D9 /2 FST m32fp Copy ST(0) to m32fp
D9 /3 FSTP m32fp Copy ST(0) to m32fp and pop register stack
D9 /4 FLDENV m14/28byte Load FPU environment from m14byte or m28byte.
D9 /5 FLDCW m2byte Load FPU control word from m2byte.
D9 /6 FNSTENV m14/28byte Store FPU environment to m14byte or m28byte without checking for pending unmasked floating-point exceptions. Then mask all floating-point exceptions.
D9 /7 FNSTCW m2byte Store FPU control word to m2byte without checking for pending unmasked floating-point exceptions.
D9 C0+i FLD ST(i) Push ST(i) onto the FPU register stack.
D9 C8+i FXCH ST(i) Exchange the contents of ST(0) and ST(i)
D9 C9 FXCH Exchange the contents of ST(0) and ST(1)
D9 D0 FNOP No operation is performed.
D9 E0 FCHS Complements sign of ST(0)
D9 E1 FABS Replace ST with its absolute value.
D9 E4 FTST Compare ST(0) with 0.0.
D9 E5 FXAM Classify value or number in ST(0)
D9 E8 FLD1 Push +1.0 onto the FPU register stack.
D9 E9 FLDL2T Push log2(10) onto the FPU register stack.
D9 EA FLDL2E Push log2(e) onto the FPU register stack.
D9 EB FLDPI Push p onto the FPU register stack.
D9 EC FLDLG2 Push log10(2) onto the FPU register stack.
D9 ED FLDLN2 Push loge(2) onto the FPU register stack.
D9 EE FLDZ Push +0.0 onto the FPU register stack.
D9 F0 F2XM1 Replace ST(0) with (2^ST(0) Ц 1)
D9 F1 FYL2X Replace ST(1) with (ST(1) * log2(ST(0))) and pop the register stack
D9 F2 FPTAN Replace ST(0) with its tangent and push 1 onto the FPU stack. clocks=17-173
D9 F3 FPATAN Replace ST(1) with arctan(ST(1)/ST(0)) and pop the register stack
D9 F4 FXTRACT Separate value in ST(0) into exponent and significand, store exponent in ST(0), and push the significand onto the register stack.
D9 F5 FPREM1 Replace ST(0) with the IEEE remainder obtained from dividing ST(0) by ST(1)
D9 F6 FDECSTP Decrement TOP field in FPU status word.
D9 F7 FINCSTP Increment the TOP field in the FPU status register
D9 F8 FPREM Replace ST(0) with the remainder obtained from dividing ST(0) by ST(1)
D9 F9 FYL2XP1 Replace ST(1) with ST(1) * log2 (ST(0) + 1.0) and pop the register stack
D9 FA FSQRT Calculates square root of ST(0) and stores the result in ST(0)
D9 FB FSINCOS Compute the sine and cosine of ST(0); replace ST(0) with the sine, and push the cosine onto the register stack.
D9 FC FRNDINT Round ST(0) to an integer.
D9 FD FSCALE Scale ST(0) by ST(1).
D9 FE FSIN Replace ST(0) with its sine.
D9 FF FCOS Replace ST(0) with its cosine
DA /0 FIADD m32int Add m32int to ST(0) and store result in ST(0)
DA /1 FIMUL m32int Multiply ST(0) by m32int and store result in ST(0)
DA /2 FICOM m32int Compare ST(0) with m32int
DA /3 FICOMP m32int Compare ST(0) with m32int and pop stack register
DA /4 FISUB m32int Subtract m32int from ST(0) and store result in ST(0)
DA /5 FISUBR m32int Subtract ST(0) from m32int and store result in ST(0)
DA /6 FIDIV m32int Divide ST(0) by m32int and store result in ST(0)
DA /7 FIDIVR m32int Divide m32int by ST(0) and store result in ST(0)
DA C0+i FCMOVB ST(0), ST(i) Move if below (CF=1)
DA C8+i FCMOVE ST(0), ST(i) Move if equal (ZF=1)
DA D0+i FCMOVBE ST(0), ST(i) Move if below or equal (CF=1 or ZF=1)
DA D8+i FCMOVU ST(0), ST(i) Move if unordered (PF=1)
DA E9 FUCOMPP Compare ST(0) with ST(1) and pop register stack twice
DB /0 FILD m32int Push m32int onto the FPU register stack.
DB /2 FIST m32int Store ST(0) in m32int
DB /3 FISTP m32int Store ST(0) in m32int and pop register stack
DB /5 FLD m80fp Push m80fp onto the FPU register stack.
DB /7 FSTP m80fp Copy ST(0) to m80fp and pop register stack
DB C0+i FCMOVNB ST(0), ST(i) Move if not below (CF=0)
DB C8+i FCMOVNE ST(0), ST(i) Move if not equal (ZF=0)
DB D0+i FCMOVNBE ST(0), ST(i) Move if not below or equal (CF=0 and ZF=0)
DB D8+i FCMOVNU ST(0), ST(i) Move if not unordered (PF=0)
DB E2 FNCLEX Clear floating-point exception flags without checking for pending unmasked floating-point exceptions.
DB E3 FNINIT Initialize FPU without checking for pending unmasked floating-point exceptions.
DB E8+i FUCOMI ST, ST(i) Compare ST(0) with ST(i), check for ordered values, and set status flags accordingly
DB F0+i FCOMI ST, ST(i) Compare ST(0) with ST(i) and set status flags accordingly
DC /0 FADD m64fp Add m64fp to ST(0) and store result in ST(0)
DC /1 FMUL m64fp Multiply ST(0) by m64fp and store result in ST(0)
DC /2 FCOM m64fp Compare ST(0) with m64fp.
DC /3 FCOMP m64fp Compare ST(0) with m64fp and pop register stack.
DC /4 FSUB m64fp Subtract m64fp from ST(0) and store result in ST(0)
DC /5 FSUBR m64fp Subtract ST(0) from m64fp and store result in ST(0)
DC /6 FDIV m64fp Divide ST(0) by m64fp and store result in ST(0)
DC /7 FDIVR m64fp Divide m64fp by ST(0) and store result in ST(0)
DC C0+i FADD ST(i), ST(0) Add ST(i) to ST(0) and store result in ST(i)
DC C8+i FMUL ST(i), ST(0) Multiply ST(i) by ST(0) and store result in ST(i)
DC E0+i FSUBR ST(i), ST(0) Subtract ST(i) from ST(0) and store result in ST(i)
DC E8+i FSUB ST(i), ST(0) Subtract ST(0) from ST(i) and store result in ST(i)
DC F0+i FDIVR ST(i), ST(0) Divide ST(0) by ST(i) and store result in ST(i)
DC F8+i FDIV ST(i), ST(0) Divide ST(i) by ST(0) and store result in ST(i)
DD /0 FLD m64fp Push m64fp onto the FPU register stack.
DD /2 FST m64fp Copy ST(0) to m64fp
DD /3 FSTP m64fp Copy ST(0) to m64fp and pop register stack
DD /4 FRSTOR m94/108byte Load FPU state from m94byte or m108byte.
DD /6 FNSAVE m94/108byte Store FPU environment to m94byte or m108byte without checking for pending unmasked floating-point exceptions. Then re-initialize the FPU.
DD /7 FNSTSW m2byte Store FPU status word at m2byte without checking for pending unmasked floating-point exceptions.
DD C0+i FFREE ST(i) Sets tag for ST(i) to empty
DD D0+i FST ST(i) Copy ST(0) to ST(i)
DD D8+i FSTP ST(i) Copy ST(0) to ST(i) and pop register stack
DD E0+i FUCOM ST(i) Compare ST(0) with ST(i)
DD E1 FUCOM Compare ST(0) with ST(1)
DD E8+i FUCOMP ST(i) Compare ST(0) with ST(i) and pop register stack
DD E9 FUCOMP Compare ST(0) with ST(1) and pop register stack
DE /0 FIADD m16int Add m16int to ST(0) and store result in ST(0)
DE /1 FIMUL m16int Multiply ST(0) by m16int and store result in ST(0)
DE /2 FICOM m16int Compare ST(0) with m16int
DE /3 FICOMP m16int Compare ST(0) with m16int and pop stack register
DE /4 FISUB m16int Subtract m16int from ST(0) and store result in ST(0)
DE /5 FISUBR m16int Subtract ST(0) from m16int and store result in ST(0)
DE /6 FIDIV m16int Divide ST(0) by m64int and store result in ST(0)
DE /7 FIDIVR m16int Divide m64int by ST(0) and store result in ST(0)
DE C0+i FADDP ST(i), ST(0) Add ST(0) to ST(i), store result in ST(i), and pop the register stack
DE C1 FADDP Add ST(0) to ST(1), store result in ST(1), and pop the register stack
DE C8+i FMULP ST(i), ST(0) Multiply ST(i) by ST(0), store result in ST(i), and pop the register stack
DE C9 FMULP Multiply ST(1) by ST(0), store result in ST(1), and pop the register stack
DE D9 FCOMPP Compare ST(0) with ST(1) and pop register stack twice.
DE E0+i FSUBRP ST(i), ST(0) Subtract ST(i) from ST(0), store result in ST(i), and pop register stack
DE E1 FSUBRP Subtract ST(1) from ST(0), store result in ST(1), and pop register stack
DE E8+i FSUBP ST(i), ST(0) Subtract ST(0) from ST(i), store result in ST(i), and pop register stack
DE E9 FSUBP Subtract ST(0) from ST(1), store result in ST(1), and pop register stack
DE F0+i FDIVRP ST(i), ST(0) Divide ST(0) by ST(i), store result in ST(i), and pop the register stack
DE F1 FDIVRP Divide ST(0) by ST(1), store result in ST(1), and pop the register stack
DE F8+i FDIVP ST(i), ST(0) Divide ST(i) by ST(0), store result in ST(i), and pop the register stack
DE F9 FDIVP Divide ST(1) by ST(0), store result in ST(1), and pop the register stack
DF /0 FILD m16int Push m16int onto the FPU register stack.
DF /2 FIST m16int Store ST(0) in m16int
DF /3 FISTP m16int Store ST(0) in m16int and pop register stack
DF /4 FBLD m80 dec Convert BCD value to real and push onto the FPU stack.
DF /5 FILD m64int Push m64int onto the FPU register stack.
DF /6 FBSTP m80bcd Store ST(0) in m80bcd and pop ST(0).
DF /7 FISTP m64int Store ST(0) in m64int and pop register stack
DF E0 FNSTSW AX Store FPU status word in AX register without checking for pending unmasked floating-point exceptions.
DF E8+i FUCOMIP ST, ST(i) Compare ST(0) with ST(i), check for ordered values, set status flags accordingly, and pop register stack
DF F0+i FCOMIP ST, ST(i) Compare ST(0) with ST(i), set status flags accordingly, and pop register stack
E0 cb LOOPNE rel8 Decrement count; jump short if count │ 0 and ZF=0
E0 cb LOOPNZ rel8 Decrement count; jump short if count │ 0 and ZF=0
E1 cb LOOPE rel8 Decrement count; jump short if count │ 0 and ZF=1
E1 cb LOOPZ rel8 Decrement count; jump short if count │ 0 and ZF=1
E2 cb LOOP rel8 Decrement count; jump short if count │ 0
E3 cb JCXZ rel8 Jump short if CX register is 0
E3 cb JECXZ rel8 Jump short if ECX register is 0
E4 ib IN AL, imm8 Input byte from imm8 I/O port address into AL
E5 ib IN AX, imm8 Input byte from imm8 I/O port address into AX
E5 ib IN EAX, imm8 Input byte from imm8 I/O port address into EAX
E6 ib OUT imm8, AL Output byte in AL to I/O port address imm8
E7 ib OUT imm8, AX Output word in AX to I/O port address imm8
E7 ib OUT imm8, EAX Output doubleword in EAX to I/O port address imm8
E8 cw CALL rel16 Call near, relative, displacement relative to next instruction
E8 cd CALL rel32 Call near, relative, displacement relative to next instruction
E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction
E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction
EA cd JMP ptr16:16 Jump far, absolute, address given in operand
EA cp JMP ptr16:32 Jump far, absolute, address given in operand
EB cb JMP rel8 Jump short, relative, displacement relative to next instruction
EC IN AL,DX Input byte from I/O port in DX into AL
ED IN AX,DX Input word from I/O port in DX into AX
ED IN EAX,DX Input doubleword from I/O port in DX into EAX
EE OUT DX, AL Output byte in AL to I/O port address in DX
EF OUT DX, AX Output word in AX to I/O port address in DX
EF OUT DX, EAX Output doubleword in EAX to I/O port address in DX
F0 LOCK Asserts LOCK# signal for duration of the accompanying instruction
F2 0F 10 /r MOVSD xmm1, xmm2/m64 Move scalar double-precision floating-point value from xmm2/m64 to xmm1 register.
F2 0F 11 /r MOVSD xmm2/m64, xmm Move scalar double-precision floating-point value from xmm1 register to xmm2/m64.
F2 0F 2A /r CVTSI2SD xmm, r/m32 Convert one signed doubleword integer from r/m32 to one double-precision floating-point value in xmm.
F2 0F 2C /r CVTTSD2SI r32, xmm/m64 Convert one double-precision floating-point value from xmm/m64 to one signed doubleword integer in r32 using truncation.
F2 0F 2D /r CVTSD2SI r32, xmm/m64 Convert one double-precision floating-point value from xmm/m64 to one signed doubleword integer r32.
F2 0F 51 /r SQRTSD xmm1, xmm2/m64 Computes square root of the low double-precision floating-point value in xmm2/m64 and stores the results in xmm1.
F2 0F 58 /r ADDSD xmm1, xmm2/m64 Add the low double-precision floating-point value from xmm2/m64 to xmm1.
F2 0F 59 /r MULSD xmm1, xmm2/m64 Multiply the low double-precision floating-point value in xmm2/mem64 by low double-precision floating-point value in xmm1.
F2 0F 5A /r CVTSD2SS xmm1, xmm2/m64 Convert one double-precision floating-point value in xmm2/m64 to one single-precision floating-point value in xmm1.
F2 0F 5C /r SUBSD xmm1, xmm2/m64 Subtracts the low double-precision floating-point values in xmm2/mem64 from xmm1.
F2 0F 5D /r MINSD xmm1, xmm2/m64 Return the minimum scalar double-precision floating-point value between xmm2/mem64 and xmm1.
F2 0F 5E /r DIVSD xmm1, xmm2/m64 Divide low double-precision floating-point value n xmm1 by low double-precision floating-point value in xmm2/mem64.
F2 0F 5F /r MAXSD xmm1, xmm2/m64 Return the maximum scalar double-precision floating-point value between xmm2/mem64 and xmm1.
F2 0F 70 /r ib PSHUFLW xmm1, xmm2/m128, imm8 Shuffle the low words in xmm2/m128 based on the encoding in imm8 and store the result in xmm1.
F2 0F C2 /r ib CMPSD xmm1, xmm2/m64, imm8 Compare low double-precision floating-point value in xmm2/m64 and xmm1 using imm8 as comparison predicate.
F2 0F D6 MOVDQ2Q mm, xmm Move low quadword from xmm to MMX technology register.
F2 0F E6 CVTPD2DQ xmm1, xmm2/m128 Convert two packed double-precision floating-point values from xmm2/m128 to two packed signed doubleword integers in xmm1.
F2 A6 REPNE CMPS m8,m8 Find matching bytes in ES:[(E)DI] and DS:[(E)SI]
F2 A7 REPNE CMPS m16,m16 Find matching words in ES:[(E)DI] and DS:[(E)SI]
F2 A7 REPNE CMPS m32,m32 Find matching doublewords in ES:[(E)DI] and DS:[(E)SI]
F2 AE REPNE SCAS m8 Find AL, starting at ES:[(E)DI]
F2 AF REPNE SCAS m16 Find AX, starting at ES:[(E)DI]
F2 AF REPNE SCAS m32 Find EAX, starting at ES:[(E)DI]
F3 0F 10 /r MOVSS xmm1, xmm2/m32 Move scalar single-precision floating-point value from xmm2/m64 to xmm1 register.
F3 0F 11 /r MOVSS xmm2/m32, xmm Move scalar single-precision floating-point value from xmm1 register to xmm2/m64.
F3 0F 2A /r CVTSI2SS xmm, r/m32 Convert one signed doubleword integer from r/m32 to one single-precision floating-point value in xmm.
F3 0F 2C /r CVTTSS2SI r32, xmm/m32 Convert one single-precision floating-point value from xmm/m32 to one signed doubleword integer in r32 using truncation.
F3 0F 2D /r CVTSS2SI r32, xmm/m32 Convert one single-precision floating-point value from xmm/m32 to one signed doubleword integer in r32.
F3 0F 51 /r SQRTSS xmm1, xmm2/m32 Computes square root of the low single-precision floating-point value in xmm2/m32 and stores the results in xmm1.
F3 0F 52 /r RSQRTSS xmm1, xmm2/m32 Computes the approximate reciprocal of the square root of the low single-precision floating-point value in xmm2/m32 and stores the results in xmm1.
F3 0F 53 /r RCPSS xmm1, xmm2/m32 Computes the approximate reciprocal of the scalar single-precision floating-point value in xmm2/m32 and stores the result in xmm1.
F3 0F 58 /r ADDSS xmm1, xmm2/m32 Add the low single-precision floating-point value from xmm2/m32 to xmm1.
F3 0F 59 /r MULSS xmm1, xmm2/m32 Multiply the low single-precision floating-point value in xmm2/mem by the low single-precision floating-point value in xmm1.
F3 0F 5A /r CVTSS2SD xmm1, xmm2/m32 Convert one single-precision floating-point value in xmm2/m32 to one double-precision floating-point value in xmm1.
F3 0F 5B /r CVTTPS2DQ xmm1, xmm2/m128 Convert four single-precision floating-point values from xmm2/m128 to four signed doubleword integers in xmm1 using truncation.
F3 0F 5C /r SUBSS xmm1, xmm2/m32 Subtract the lower single-precision floating-point values in xmm2/m32 from xmm1.
F3 0F 5D /r MINSS xmm1, xmm2/m32 Return the minimum scalar single-precision floating-point value between xmm2/mem32 and xmm1.
F3 0F 5E /r DIVSS xmm1, xmm2/m32 Divide low single-precision floating-point value in xmm1 by low single-precision floating-point value in xmm2/m32
F3 0F 5F /r MAXSS xmm1, xmm2/m32 Return the maximum scalar single-precision floating-point value between xmm2/mem32 and xmm1.
F3 0F 6F /r MOVDQU xmm1, xmm2/m128 Move unaligned double quadword from xmm2/m128 to xmm1.
F3 0F 70 /r ib PSHUFHW xmm1, xmm2/m128, imm8 Shuffle the high words in xmm2/m128 based on the encoding in imm8 and store the result in xmm1.
F3 0F 7E MOVQ xmm1, xmm2/m64 Move quadword from xmm2/mem64 to xmm1.
F3 0F 7F /r MOVDQU xmm2/m128, xmm1 Move unaligned double quadword from xmm1 to xmm2/m128.
F3 0F C2 /r ib CMPSS xmm1, xmm2/m32, imm8 Compare low single-precision floating-point value in xmm2/m32 and xmm1 using imm8 as comparison predicate.
F3 0F D6 MOVQ2DQ xmm, mm Move quadword from mmx to low quadword of xmm.
F3 0F E6 CVTDQ2PD xmm1, xmm2/m64 Convert two packed signed doubleword integers from xmm2/m128 to two packed double-precision floating-point values in xmm1.
F3 6C REP INS r/m8, DX Input (E)CX bytes from port DX into ES:[(E)DI]
F3 6D REP INS r/m16,DX Input (E)CX words from port DX into ES:[(E)DI]
F3 6D REP INS r/m32,DX Input (E)CX doublewords from port DX into ES:[(E)DI]
F3 6E REP OUTS DX, r/m8 Output (E)CX bytes from DS:[(E)SI] to port DX
F3 6F REP OUTS DX, r/m16 Output (E)CX words from DS:[(E)SI] to port DX
F3 6F REP OUTS DX, r/m32 Output (E)CX doublewords from DS:[(E)SI] to port DX
F3 90 PAUSE Gives hint to processor that improves performance of spin-wait loops.
F3 A4 REP MOVS m8,m8 Move (E)CX bytes from DS:[(E)SI] to ES:[(E)DI]
F3 A5 REP MOVS m16,m16 Move (E)CX words from DS:[(E)SI] to ES:[(E)DI]
F3 A5 REP MOVS m32,m32 Move (E)CX doublewords from DS:[(E)SI] to ES:[(E)DI]
F3 A6 REPE CMPS m8,m8 Find nonmatching bytes in ES:[(E)DI] and DS:[(E)SI]
F3 A7 REPE CMPS m16,m16 Find nonmatching words in ES:[(E)DI] and DS:[(E)SI]
F3 A7 REPE CMPS m32,m32 Find nonmatching doublewords in ES:[(E)DI] and DS:[(E)SI]
F3 AA REP STOS m8 Fill (E)CX bytes at ES:[(E)DI] with AL
F3 AB REP STOS m16 Fill (E)CX words at ES:[(E)DI] with AX
F3 AB REP STOS m32 Fill (E)CX doublewords at ES:[(E)DI] with EAX
F3 AC REP LODS AL Load (E)CX bytes from DS:[(E)SI] to AL
F3 AD REP LODS AX Load (E)CX words from DS:[(E)SI] to AX
F3 AD REP LODS EAX Load (E)CX doublewords from DS:[(E)SI] to EAX
F3 AE REPE SCAS m8 Find non-AL byte starting at ES:[(E)DI]
F3 AF REPE SCAS m16 Find non-AX word starting at ES:[(E)DI]
F3 AF REPE SCAS m32 Find non-EAX doubleword starting at ES:[(E)DI]
F4 HLT Halt
F5 CMC Complement carry flag (CF)
F6 /0 ib TEST r/m8,imm8 AND imm8 with r/m8; set SF, ZF, PF according to result
F6 /2 NOT r/m8 Reverse each bit of r/m8
F6 /3 NEG r/m8 Two's complement negate r/m8
F6 /4 MUL r/m8 Unsigned multiply (AX <- AL * r/m8)
F6 /5 IMUL r/m8 AX <- AL * r/m byte
F6 /6 DIV r/m8 Unsigned divide AX by r/m8; AL <- Quotient, AH <- Remainder
F6 /7 IDIV r/m8 Signed divide AX by r/m8, with result stored in AL <- Quotient, AH <- Remainder
F7 /0 iw TEST r/m16,imm16 AND imm16 with r/m16; set SF, ZF, PF according to result
F7 /0 id TEST r/m32,imm32 AND imm32 with r/m32; set SF, ZF, PF according to result
F7 /2 NOT r/m16 Reverse each bit of r/m16
F7 /2 NOT r/m32 Reverse each bit of r/m32
F7 /3 NEG r/m16 Two's complement negate r/m16
F7 /3 NEG r/m32 Two's complement negate r/m32
F7 /4 MUL r/m16 Unsigned multiply (DX:AX <- AX * r/m16)
F7 /4 MUL r/m32 Unsigned multiply (EDX:EAX <- EAX * r/m32)
F7 /5 IMUL r/m16 DX:AX <- AX * r/m word
F7 /5 IMUL r/m32 EDX:EAX <- EAX * r/m doubleword
F7 /6 DIV r/m16 Unsigned divide DX:AX by r/m16; AX <- Quotient, DX <- Remainder
F7 /6 DIV r/m32 Unsigned divide EDX:EAX by r/m32 doubleword; EAX <- Quotient, EDX <- Remainder
F7 /7 IDIV r/m16 Signed divide DX:AX by r/m16, with result stored in AX <- Quotient, DX <- Remainder
F7 /7 IDIV r/m32 Signed divide EDX:EAX by r/m32, with result stored in EAX <- Quotient, EDX <- Remainder
F8 CLC Clear CF flag
F9 STC Set CF flag
FA CLI Clear interrupt flag; interrupts disabled when interrupt flag cleared
FB STI Set interrupt flag; external, maskable interrupts enabled at the end of the next instruction
FC CLD Clear DF flag
FD STD Set DF flag
FE /0 INC r/m8 Increment r/m byte by 1
FE /1 DEC r/m8 Decrement r/m8 by 1
FF /0 INC r/m16 Increment r/m word by 1
FF /0 INC r/m32 Increment r/m doubleword by 1
FF /1 DEC r/m16 Decrement r/m16 by 1
FF /1 DEC r/m32 Decrement r/m32 by 1
FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16
FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32
FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16
FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32
FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16
FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32
FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16
FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32
FF /6 PUSH r/m16 Push r/m16
FF /6 PUSH r/m32 Push r/m32