Le jeu d'instructions du x86 a subi de nombreux changements au cours du temps. La plupart d'entre eux ne sont que des ajouts au jeu d'instruction initial afin d'apporter de nouvelles fonctionnalités.
Ceci est le jeu d'instruction complet pour les processeurs 8086-8088 et la plupart, si ce n'est toutes ces instructions sont accessibles en mode 32-bit. Elles opèrent alors sur les registres et valeurs 32 bits (eax, ebx, etc.) en lieu et place de leur contrepartie en 16 bits (ax, bx, etc.).
Nom | Sens | Traduction | Notes | |
---|---|---|---|---|
AAA | ASCII Adjust AL after Addition | Ajuste le registre AL après addition (mode ASCII) | Utilisé avec le codage BCD non compacté | |
AAD | ASCII Adjust AX after Division | Ajuste le registre AX après division (mode ASCII) | Utilisé avec le codage BCD non compacté, bogué dans le jeu d'instruction original, mais « réparé » dans le NEC V20, causant de nombreuses incompatibilités | |
AAM | ASCII Adjust AX after Multiplication | Ajuste le registre AX après multiplication (mode ASCII) | Utilisé avec le codage BCD non compacté | |
AAS | ASCII Adjust AL after Subtraction | Ajuste le registre AL après soustraction (mode ASCII) | Utilisé avec le codage BCD non compacté | |
ADC | Add with Carry | Ajoute deux entiers, plus le drapeau de retenue | Le résultat remplace le premier opérande | |
ADD | Add | Ajoute deux entiers | Le résultat remplace le premier opérande | |
AND | Logical AND | Effectue un ET logique des opérandes | Le résultat remplace le premier opérande | |
CALL | Call Procedure | Appelle une procédure | ||
CBW | Convert Byte to Word | Convertit un octet en mot | Le registre AL est étendu à AX | |
CLC | Clear Carry Flag | Met le drapeau de retenue à zéro | ||
CLD | Clear Direction Flag | Met le drapeau de direction à zéro | ||
CLI | Clear Interrupt Flag | Met le drapeau d'interruption à zéro | ||
CMC | Complement Carry Flag | Inverse le drapeau de retenue | ||
CMP | Compare | Compare deux entiers (de façon arithmétique) | Positionne les drapeaux en fonction de la différence entre les opérandes | |
CMPSzz | Compare Strings | Compare un octet/mot de deux chaînes | Mnémoniques : CMPS, CMPSB, CMPSW | |
CWD | Convert Word to Doubleword | Convertit un mot en double mot | Le registre AX est étendu à DX:AX | |
DAA | Decimal Adjust AL after Addition | Ajuste le registre AL après addition (mode décimal) | Utilisé avec le codage BCD compacté | |
DAS | Decimal Adjust AL after Subtraction | Ajuste le registre AL après soustraction (mode décimal) | Utilisé avec le codage BCD compacté | |
DEC | Decrement by 1 | Décrémente un entier | Ôte un de l'opérande | |
DIV | Unsigned Divide | Divise par un entier non signé | Le dividende est le registre AX/DX:AX, le quotient est écrit dans AL/AX et le reste dans AH/DX | |
ESC | Escape | Utilisé avec l'unité de calcul en virgule flottante | ||
HLT | Halt | Entre en état d'arrêt | ||
IDIV | Signed Divide | Divise par un entier signé | Le dividende est le registre AX/DX:AX, le quotient est écrit dans AL/AX et le reste dans AH/DX | |
IMUL | Signed Multiply | Multiplie par un entier signé | Le facteur est le registre AL/AX et le produit est écrit dans AX/DX:AX | |
IN | Input from Port | Lit depuis un port | La destination est le registre AL/AX | |
INC | Increment by 1 | Incrémente un entier | Ajoute un à l'opérande | |
INT | Call to Interrupt Procedure | Appelle l'interruption identifiée par l'opérande | ||
INTO | Call to Interrupt Procedure if Overflow | Appelle l'interruption de débordement si le drapeau de débordement est à un | ||
IRET | Interrupt Return | Revient d'une interruption | ||
Jcc | Jump if Condition Is Met | Saute si une condition est vérifiée | Mnémoniques : JA, JAE, JB, JBE, JC, JCXZ, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ | |
JMP | Jump | Saute (inconditionnel) | ||
LAHF | Load Flags into AH | Copie le registre des drapeaux dans le registre AH | ||
LDS | Load DS with Far Pointer | Charge un pointeur de type far (lointain) dans le registre DS (segment) et l'opérande (décalage) | ||
LEA | Load Effective Address | Charge l'adresse du second opérande dans le premier | ||
LES | Load ES with Far Pointer | Charge un pointeur de type far (lointain) dans le registre ES (segment) et l'opérande (décalage) | ||
LOCK | Assert LOCK# Signal Prefix | Préfixe verrouillant les bus pour les prochaines instructions | Utilisé pour les plates-formes multiprocesseurs. | |
LODSzz | Load String | Copie un octet/mot d'une chaîne | La destination est le registre AL/AX. Mnémoniques : LODS, LODSB, LODSW | |
LOOPcc | Loop According to Counter | Décrémente le compteur et saute si une condition est vérifiée | Le compteur est le registre CX. Mnémoniques : LOOP, LOOPE, LOOPNE, LOOPNZ, LOOPZ | |
MOV | Move | Copie le second opérande dans le premier | ||
MOVSzz | Move from String to String | Copie un octet/mot d'une chaîne vers une autre | Mnémoniques : MOVS, MOVSB, MOVSW | |
MUL | Unsigned Multiply | Multiplie par un entier non signé | Le facteur est le registre AL/AX et le produit est écrit dans AX/DX:AX | |
NEG | Two's Complement Negation | Calcule l'opposé de l'opérande (négation par complément à deux) | Le résultat remplace l'opérande | |
NOP | No Operation | Ne fait rien | ||
NOT | One's Complement Negation | Effectue un NON logique (négation par complément à un) | Le résultat remplace l'opérande | |
OR | Logical Inclusive OR | Effectue un OU logique inclusif des opérandes | Le résultat remplace le premier opérande | |
OUT | Output to Port | Écrit vers un port | La source est le registre AX/AL | |
POP | Pop a Value from the Stack | Dépile vers le registre opérande | ||
POPF | Pop Flags Register from the Stack | Dépile vers le registre des drapeaux | ||
PUSH | Push a Value onto the Stack | Empile le registre opérande | ||
PUSHF | Push Flags Register onto the Stack | Empile le registre des drapeaux | ||
RCL | Rotate through Carry Left | Effectue une rotation à gauche via par le drapeau de retenue | ||
RCR | Rotate through Carry Right | Effectue une rotation à droite via par le drapeau de retenue | ||
REPcc | Repeat String Operation Prefix | Préfixe de répétition d'une opération sur une chaîne | Mnémoniques : REP, REPE, REPNE, REPNZ, REPZ | |
RET | Return from Procedure | Revient d'une procédure | ||
ROL | Rotate Left | Effectue une rotation vers la gauche | ||
ROR | Rotate Right | Effectue une rotation vers la droite | ||
SAHF | Store AH into Flags | Copie le registre AH dans le registre des drapeaux | ||
SAL | Shift Arithmectically Left | Décalage arithmétique vers la gauche | Même instruction que SHL | |
SAR | Shift Arithmectically Right | Décalage arithmétique vers la droite | À ne pas confondre avec SHR | |
SBB | Integer Subtraction with Borrow | Soustrait deux entiers, ajoute le drapeau de retenue | Le résultat remplace le premier opérande | |
SCASzz | Scan String | Compare un octet/mot d'une chaîne | La référence est le registre AL/AX. Mnémoniques : SCAS, SCASB, SCASW | |
SHL | Shift Left | Décalage logique à gauche | Même instruction que SAL | |
SHR | Shift Right | Décalage logique à droite | À ne pas confondre avec SAR | |
STC | Set Carry Flag | Met le drapeau de retenue à un | ||
STD | Set Direction Flag | Met le drapeau de direction à un | ||
STI | Set Interrupt Flag | Met le drapeau d'interruption à un | ||
STOSzz | Store in String | Copie dans un octet/mot d'une chaîne | La source est le registre AL/AX. Mnémoniques : STOS, STOSB, STOSW | |
SUB | Subtract | Soustrait deux entiers | Le résultat remplace le premier opérande | |
TEST | Logical Compare | Compare deux opérandes (de façon logique) | Positionne les drapeaux en fonction du résultat du ET logique entre les opérandes | |
WAIT | Wait | Attend tant que la broche BUSY du processeur est inactive | Utilisé avec l'unité de calcul en virgule flottante | |
XCHG | Exchange | Permute le contenu des deux opérandes | ||
XLAT | Table Look-up Translation | Translation de donnée entre des tables | ||
XOR | Logical Exclusive OR | Effectue un OU logique exclusif des opérandes | Le résultat remplace le premier opérande |
BOUND, ENTER, INSB, INSW, LEAVE, OUTSB, OUTSW, POPA, PUSHA, PUSHW
ARPL, CLTS, LAR, LGDT, LIDT, LLDT, LMSW, LOADALL, LSL, LTR, SGDT, SIDT, SLDT, SMSW, STR, VERR, VERW
BSF, BSR, BT, BTC, BTR, BTS, CDQ, CMPSD, CWDE, INSD, IRETD, IRETDF, IRETF, JECXZ, LFS, LGS, LSS, LODSD, LOOPD, LOOPED, LOOPNED, LOOPNZD, LOOPZD, MOVSD, MOVSX, MOVZX, OUTSD, POPAD, POPFD, PUSHAD, PUSHD, PUSHFD, SCASD, SETA, SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, SETNAE, SETNB, SETNBE, SETNC, SETNE, SETNG, SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO, SETP, SETPE, SETPO, SETS, SETZ, SHLD, SHRD, STOSD
BSWAP, CMPXCHG, CPUID, INVD, INVLPG, RSM, WBINVD, XADD
CMPXCHG8B, RDMSR, RDPMC*, RDTSC, WRMSR
CMOVA, CMOVAE, CMOVB, CMOVB, CMOVE, CMOVG, CMOVGE, CMOVL, CMOVLE, CMOVNA, CMOVNAE, CMOVNB, CMOVNBE, CMOVNC, CMOVNE, CMOVNG, CMOVNGE, CMOVNL, CMOVNLE, CMOVNO, CMOVNP, CMOVNS, CMOVNZ, CMOVO, CMOVP, CMOVPE, CMOVPO, CMOVS, CMOVZ, SYSENTER, SYSEXIT, UD2
Fonctionnalités SSE
MASKMOVQ, MOVNTPS, MOVNTQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE (Mise en cache et ordonnancement mémoire (Memory Ordering))
Fonctionnalités SSE2
CLFLUSH, LFENCE, MASKMOVDQU, MFENCE, MOVNTDQ, MOVNTI, MOVNTPD, PAUSE (for Cacheability)
Processeur supportant l'Hyper-Threading
Fonctionnalités SSE3
MONITOR, MWAIT (Pour la synchronisation des threads)
VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON (instructions VMX)
CMPXCHG16B