Mirror of (now defunct) Into the Void: x86 Instruction Set Reference. For a brief tutorial visit here
This is an unofficial online version of the Intel 64 instruction set reference. It provides a list of the available instructions for IA-32 and Intel 64 microprocessors, their assembly mnemonics, encodings, descriptions, pseudo code and the exceptions they can throw. This information is largely compatible with AMD64 processors, except for some minor differences.
Opcode | Description |
---|---|
AAA | ASCII Adjust After Addition |
AAD | ASCII Adjust AX Before Division |
AAS | ASCII Adjust AL After Subtraction |
ADC | Add with Carry |
ADD | Add |
ADDPD | Add Packed Double-Precision Floating-Point Values |
ADDPS | Add Packed Single-Precision Floating-Point Values |
ADDSD | Add Scalar Double-Precision Floating-Point Values |
ADDSS | Add Scalar Single-Precision Floating-Point Values |
ADDSUBPD | Packed Double-FP Add/Subtract |
ADDSUBPS | Packed Single-FP Add/Subtract |
AND | Logical AND |
ANDPD | Bitwise Logical AND of Packed Double-Precision Floating-Point Values |
ANDPS | Bitwise Logical AND of Packed Single-Precision Floating-Point Values |
ANDNPD | Bitwise Logical AND NOT of Packed Double-Precision Floating-Point Values |
ANDNPS | Bitwise Logical AND NOT of Packed Single-Precision Floating-Point Values |
ARPL | Adjust RPL Field of Segment Selector |
BOUND | Check Array Index Against Bounds |
BSF | Bit Scan Forward |
BSR | Bit Scan Reverse |
BSWAP | Byte Swap |
BT | Bit Test |
BTC | Bit Test and Complement |
BTR | Bit Test and Reset |
BTS | Bit Test and Set |
CALL | Call Procedure |
CBW/CWDE | Convert Byte to Word/Convert Word to Doubleword |
CLC | Clear Carry Flag |
CLD | Clear Direction Flag |
CLFLUSH | Flush Cache Line |
CLI | Clear Interrupt Flag |
CLTS | Clear Task-Switched Flag in CR0 |
CMC | Complement Carry Flag |
CMOVcc | Conditional Move |
CMP | Compare Two Operands |
CMPPD | Compare Packed Double-Precision Floating-Point Values |
CMPPS | Compare Packed Single-Precision Floating-Point Values |
CMPS/CMPSB/CMPSW/CMPSD | Compare String Operands |
CMPSD | Compare Scalar Double-Precision Floating-Point Values |
CMPSS | Compare Scalar Single-Precision Floating-Point Values |
CMPXCHG | Compare and Exchange |
CMPXCHG8B | Compare and Exchange 8 Bytes |
COMISD | Compare Scalar Ordered Double-Precision Floating- Point Values and Set EFLAGS |
COMISS | Compare Scalar Ordered Single-Precision Floating- Point Values and Set EFLAGS |
CPUID | CPU Identification |
CVTDQ2PD | Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values |
CVTDQ2PS | Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values |
CVTPD2DQ | Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers |
CVTPD2PI | Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers |
CVTPD2PS | Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision Floating-Point Values |
CVTPI2PD | Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values |
CVTPI2PS | Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values |
CVTPS2DQ | Convert Packed Single-Precision Floating-Point Values to Packed Doubleword Integers |
CVTPS2PD | Convert Packed Single-Precision Floating-Point Values to Packed Double-Precision Floating-Point Values |
CVTPS2PI | Convert Packed Single-Precision Floating-Point Values to Packed Doubleword Integers |
CVTSD2SI | Convert Scalar Double-Precision Floating-Point Value to Doubleword Integer |
CVTSD2SS | Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value |
CVTSI2SD | Convert Doubleword Integer to Scalar Double- Precision Floating-Point Value |
CVTSI2SS | Convert Doubleword Integer to Scalar Single- Precision Floating-Point Value |
CVTSS2SD | Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value |
CVTSS2SI | Convert Scalar Single-Precision Floating-Point Value to Doubleword Integer |
CVTTPD2PI | Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers |
CVTTPD2DQ | Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers |
CVTTPS2DQ | Convert with Truncation Packed Single-Precision Floating-Point Values to Packed Doubleword Integers |
CVTTPS2PI | Convert with Truncation Packed Single-Precision Floating-Point Values to Packed Doubleword Integers |
CVTTSD2SI | Convert with Truncation Scalar Double-Precision Floating-Point Value to Signed Doubleword Integer |
CVTTSS2SI | Convert with Truncation Scalar Single-Precision Floating-Point Value to Doubleword Integer |
CWD/CDQ | Convert Word to Doubleword/Convert Doubleword to Quadword |
DAA | Decimal Adjust AL after Addition |
DAS | Decimal Adjust AL after Subtraction |
DEC | Decrement by 1 |
DIV | Unsigned Divide |
DIVPD | Divide Packed Double-Precision Floating-Point Values |
DIVPS | Divide Packed Single-Precision Floating-Point Values |
DIVSD | Divide Scalar Double-Precision Floating-Point Values |
DIVSS | Divide Scalar Single-Precision Floating-Point Values |
EMMS | Empty MMX Technology State |
ENTER | Make Stack Frame for Procedure Parameters |
F2XM1 | Compute 2x-1 |
FABS | Absolute Value |
FADD/FADDP/FIADD | Add |
FBLD | Load Binary Coded Decimal |
FBSTP | Store BCD Integer and Pop |
FCHS | Change Sign |
FCLEX/FNCLEX | Clear Exceptions |
FCMOVcc | Floating-Point Conditional Move |
FCOM/FCOMP/FCOMPP | Compare Floating Point Values |
FCOMI/FCOMIP/FUCOMI/FUCOMIP | Compare Floating Point Values and Set EFLAGS |
FCOS | Cosine |
FDECSTP | Decrement Stack-Top Pointer |
FDIV/FDIVP/FIDIV | Divide |
FDIVR/FDIVRP/FIDIVR | Reverse Divide |
FFREE | Free Floating-Point Register |
FICOM/FICOMP | Compare Integer |
FILD | Load Integer |
FINCSTP | Increment Stack-Top Pointer |
FINIT/FNINIT | Initialize Floating-Point Unit |
FIST/FISTP | Store Integer |
FISTTP | Store Integer with Truncation |
FLD | Load Floating Point Value |
FLD1/FLDL2T/FLDL2E/FLDPI/FLDLG2/FLDLN2/FLDZ | Load Constant |
FLDCW | Load x87 FPU Control Word |
FLDENV | Load x87 FPU Environment |
FMUL/FMULP/FIMUL | Multiply |
FNOP | No operation |
FPATAN | Partial Arctangent |
FPREM | Partial Remainder |
FPREM1 | Partial Remainder |
FPTAN | Partial Tangent |
FRNDINT | Round to Integer |
FRSTOR | Restore x87 FPU State |
FSAVE/FNSAVE | Store x87 FPU State |
FSCALE | Scale |
FSIN | Sine |
FSINCOS | Sine and Cosine |
FSQRT | Square Root |
FST/FSTP | Store Floating Point Value |
FSTCW/FNSTCW | Store x87 FPU Control Word |
FSTENV/FNSTENV | Store x87 FPU Environment |
FSTSW/FNSTSW | Store x87 FPU Status Word |
FSUB/FSUBP/FISUB | Subtract |
FSUBR/FSUBRP/FISUBR | Reverse Subtract |
FTST | Test Floating Point Value |
FUCOM/FUCOMP/FUCOMPP | Unordered Compare Floating Point Values |
FXAM | Examine Floating Point Value |
FXCH | Exchange Register Contents |
FXRSTOR | Restore x87 FPU, MMX Technology, SSE, and SSE2 State |
FXSAVE | Save x87 FPU, MMX Technology, SSE, and SSE2 State |
FXTRACT | Extract Exponent and Mantissa |
FYL2X | Compute y * log_2(x) |
FYL2XP1 | Compute y * log_2(x + 1) |
HADDPD | Packed Double-FP Horizontal Add |
HADDPS | Packed Single-FP Horizontal Add |
HLT | Halt |
HSUBPD | Packed Double-FP Horizontal Subtract |
HSUBPS | Packed Single-FP Horizontal Subtract |
IDIV | Signed Divide |
IMUL | Signed Multiply |
IN | Input from Port |
INC | Increment by 1 |
INS/INSB/INSW/INSD | Input from Port to String |
INT n/INTO/INT 3 | Call to Interrupt Procedure |
INVD | Invalidate Internal Caches |
INVLPG | Invalidate TLB Entry |
IRET/IRETD | Interrupt Return |
Jcc | Jump if Condition Is Met |
JMP | Jump |
LAHF | Load Status Flags into AH Register |
LAR | Load Access Rights Byte |
LDDQU | Load Unaligned Integer 128 Bits |
LDMXCSR | Load MXCSR Register |
LDS/LES/LFS/LGS/LSS | Load Far Pointer |
LEA | Load Effective Address |
LEAVE | High Level Procedure Exit |
LFENCE | Load Fence |
LGDT/LIDT | Load Global/Interrupt Descriptor Table Register |
LLDT | Load Local Descriptor Table Register |
LMSW | Load Machine Status Word |
LOCK | Assert LOCK# Signal Prefix |
LODS/LODSB/LODSW/LODSD | Load String |
LOOP/LOOPcc | Loop According to ECX Counter |
LSL | Load Segment Limit |
LTR | Load Task Register |
MASKMOVDQU | Store Selected Bytes of Double Quadword |
MASKMOVQ | Store Selected Bytes of Quadword |
MAXPD | Return Maximum Packed Double-Precision Floating- Point Values |
MAXPS | Return Maximum Packed Single-Precision Floating-Point Values |
MAXSD | Return Maximum Scalar Double-Precision Floating-Point Value |
MAXSS | Return Maximum Scalar Single-Precision Floating-Point Value |
MFENCE | Memory Fence |
MINPD | Return Minimum Packed Double-Precision Floating-Point Values |
MINPS | Return Minimum Packed Single-Precision Floating-Point Values |
MINSD | Return Minimum Scalar Double-Precision Floating-Point Value |
MINSS | Return Minimum Scalar Single-Precision Floating-Point Value |
MONITOR | Setup Monitor Address |
MOV | Move |
MOV | Move to/from Control Registers |
MOV | Move to/from Debug Registers |
MOVAPD | Move Aligned Packed Double-Precision Floating-Point Values |
MOVAPS | Move Aligned Packed Single-Precision Floating-Point Values |
MOVD | Move Doubleword |
MOVDDUP | Move One Double-FP and Duplicate |
MOVDQA | Move Aligned Double Quadword |
MOVDQU | Move Unaligned Double Quadword |
MOVDQ2Q | Move Quadword from XMM to MMX Technology Register |
MOVHLPS | Move Packed Single-Precision Floating-Point Values High to Low |
MOVHPD | Move High Packed Double-Precision Floating-Point Value |
MOVHPS | Move High Packed Single-Precision Floating-Point Values |
MOVLHPS | Move Packed Single-Precision Floating-Point Values Low to High |
MOVLPD | Move Low Packed Double-Precision Floating-Point Value |
MOVLPS | Move Low Packed Single-Precision Floating-Point Values |
MOVMSKPD | Extract Packed Double-Precision Floating-Point Sign Mask |
MOVMSKPS | Extract Packed Single-Precision Floating-Point Sign Mask |
MOVNTDQ | Store Double Quadword Using Non-Temporal Hint |
MOVNTI | Store Doubleword Using Non-Temporal Hint |
MOVNTPD | Store Packed Double-Precision Floating-Point Values Using Non-Temporal Hint |
MOVNTPS | Store Packed Single-Precision Floating-Point Values Using Non-Temporal Hint |
MOVNTQ | Store of Quadword Using Non-Temporal Hint |
MOVSHDUP | Move Packed Single-FP High and Duplicate |
MOVSLDUP | Move Packed Single-FP Low and Duplicate |
MOVQ | Move Quadword |
MOVQ2DQ | Move Quadword from MMX Technology to XMM Register |
MOVS/MOVSB/MOVSW/MOVSD | Move Data from String to String |
MOVSD | Move Scalar Double-Precision Floating-Point Value |
MOVSS | Move Scalar Single-Precision Floating-Point Values |
MOVSX | Move with Sign-Extension |
MOVUPD | Move Unaligned Packed Double-Precision Floating- Point Values |
MOVUPS | Move Unaligned Packed Single-Precision Floating- Point Values |
MOVZX | Move with Zero-Extend |
MUL | Unsigned Multiply |
MULPD | Multiply Packed Double-Precision Floating-Point Values |
MULPS | Multiply Packed Single-Precision Floating-Point Values |
MULSD | Multiply Scalar Double-Precision Floating-Point Values |
MULSS | Multiply Scalar Single-Precision Floating-Point Values |
MWAIT | Monitor Wait |
NEG | Two's Complement Negation |
NOP | No Operation |
NOT | One's Complement Negation |
OR | Logical Inclusive OR |
ORPD | Bitwise Logical OR of Double-Precision Floating-Point Values |
ORPS | Bitwise Logical OR of Single-Precision Floating-Point Values |
OUT | Output to Port |
OUTS/OUTSB/OUTSW/OUTSD | Output String to Port |
PACKSSWB/PACKSSDW | Pack with Signed Saturation |
PACKUSWB | Pack with Unsigned Saturation |
PADDB/PADDW/PADDD | Add Packed Integers |
PADDQ | Add Packed Quadword Integers |
PADDSB/PADDSW | Add Packed Signed Integers with Signed Saturation |
PADDUSB/PADDUSW | Add Packed Unsigned Integers with Unsigned Saturation |
PAND | Logical AND |
PANDN | Logical AND NOT |
PAUSE | Spin Loop Hint |
PAVGB/PAVGW | Average Packed Integers |
PCMPEQB/PCMPEQW/PCMPEQD | Compare Packed Data for Equal |
PCMPGTB/PCMPGTW/PCMPGTD | Compare Packed Signed Integers for Greater Than |
PEXTRW | Extract Word |
PINSRW | Insert Word |
PMADDWD | Multiply and Add Packed Integers |
PMAXSW | Maximum of Packed Signed Word Integers |
PMAXUB | Maximum of Packed Unsigned Byte Integers |
PMINSW | Minimum of Packed Signed Word Integers |
PMINUB | Minimum of Packed Unsigned Byte Integers |
PMOVMSKB | Move Byte Mask |
PMULHUW | Multiply Packed Unsigned Integers and Store High Result |
PMULHW | Multiply Packed Signed Integers and Store High Result |
PMULLW | Multiply Packed Signed Integers and Store Low Result |
PMULUDQ | Multiply Packed Unsigned Doubleword Integers |
POP | Pop a Value from the Stack |
POPA/POPAD | Pop All General-Purpose Registers |
POPF/POPFD | Pop Stack into EFLAGS Register |
POR | Bitwise Logical OR |
PREFETCHh | Prefetch Data Into Caches |
PSADBW | Compute Sum of Absolute Differences |
PSHUFD | Shuffle Packed Doublewords |
PSHUFHW | Shuffle Packed High Words |
PSHUFLW | Shuffle Packed Low Words |
PSHUFW | Shuffle Packed Words |
PSLLDQ | Shift Double Quadword Left Logical |
PSLLW/PSLLD/PSLLQ | Shift Packed Data Left Logical |
PSRAW/PSRAD | Shift Packed Data Right Arithmetic |
PSRLDQ | Shift Double Quadword Right Logical |
PSRLW/PSRLD/PSRLQ | Shift Packed Data Right Logical |
PSUBB/PSUBW/PSUBD | Subtract Packed Integers |
PSUBQ | Subtract Packed Quadword Integers |
PSUBSB/PSUBSW | Subtract Packed Signed Integers with Signed Saturation |
PSUBUSB/PSUBUSW | Subtract Packed Unsigned Integers with Unsigned Saturation |
PUNPCKHBW/PUNPCKHWD/PUNPCKHDQ/PUNPCKHQDQ | Unpack High Data |
PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ/PUNPCKLQDQ | Unpack Low Data |
PUSH | Push Word or Doubleword Onto the Stack |
PUSHA/PUSHAD | Push All General-Purpose Registers |
PUSHF/PUSHFD | Push EFLAGS Register onto the Stack |
PXOR | Logical Exclusive OR |
RCL/RCR/ROL/ROR | Rotate |
RCPPS | Compute Reciprocals of Packed Single-Precision Floating-Point Values |
RCPSS | Compute Reciprocal of Scalar Single-Precision Floating- Point Values |
RDMSR | Read from Model Specific Register |
RDPMC | Read Performance-Monitoring Counters |
RDTSC | Read Time-Stamp Counter |
REP/REPE/REPZ/REPNE/REPNZ | Repeat String Operation Prefix |
RET | Return from Procedure |
RSM | Resume from System Management Mode |
RSQRTPS | Compute Reciprocals of Square Roots of Packed Single-Precision Floating-Point Values |
RSQRTSS | Compute Reciprocal of Square Root of Scalar Single- Precision Floating-Point Value |
SAHF | Store AH into Flags |
SAL/SAR/SHL/SHR | Shift |
SBB | Integer Subtraction with Borrow |
SCAS/SCASB/SCASW/SCASD | Scan String |
SETcc | Set Byte on Condition |
SFENCE | Store Fence |
SGDT | Store Global Descriptor Table Register |
SHLD | Double Precision Shift Left |
SHRD | Double Precision Shift Right |
SHUFPD | Shuffle Packed Double-Precision Floating-Point Values |
SHUFPS | Shuffle Packed Single-Precision Floating-Point Values |
SIDT | Store Interrupt Descriptor Table Register |
SLDT | Store Local Descriptor Table Register |
SMSW | Store Machine Status Word |
SQRTPD | Compute Square Roots of Packed Double-Precision Floating-Point Values |
SQRTPS | Compute Square Roots of Packed Single-Precision Floating-Point Values |
SQRTSD | Compute Square Root of Scalar Double-Precision Floating-Point Value |
SQRTSS | Compute Square Root of Scalar Single-Precision Floating-Point Value |
STC | Set Carry Flag |
STD | Set Direction Flag |
STI | Set Interrupt Flag |
STMXCSR | Store MXCSR Register State |
STOS/STOSB/STOSW/STOSD | Store String |
STR | Store Task Register |
SUB | Subtract |
SUBPD | Subtract Packed Double-Precision Floating-Point Values |
SUBPS | Subtract Packed Single-Precision Floating-Point Values |
SUBSD | Subtract Scalar Double-Precision Floating-Point Values |
SUBSS | Subtract Scalar Single-Precision Floating-Point Values |
SYSENTER | Fast System Call |
SYSEXIT | Fast Return from Fast System Call |
TEST | Logical Compare |
UCOMISD | Unordered Compare Scalar Double-Precision Floating- Point Values and Set EFLAGS |
UCOMISS | Unordered Compare Scalar Single-Precision Floating- Point Values and Set EFLAGS |
UD2 | Undefined Instruction |
UNPCKHPD | Unpack and Interleave High Packed Double- Precision Floating-Point Values |
UNPCKHPS | Unpack and Interleave High Packed Single-Precision Floating-Point Values |
UNPCKLPD | Unpack and Interleave Low Packed Double-Precision Floating-Point Values |
UNPCKLPS | Unpack and Interleave Low Packed Single-Precision Floating-Point Values |
VERR/VERW | Verify a Segment for Reading or Writing |
WAIT/FWAIT | Wait |
WBINVD | Write Back and Invalidate Cache |
WRMSR | Write to Model Specific Register |
XADD | Exchange and Add |
XCHG | Exchange Register/Memory with Register |
XLAT/XLATB | Table Look-up Translation |
XOR | Logical Exclusive OR |
XORPD | Bitwise Logical XOR for Double-Precision Floating-Point Values |
XORPS | Bitwise Logical XOR for Single-Precision Floating-Point Values |