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'instructions initial afin d'apporter de nouvelles fonctionnalités.
Jeu d'instructions sur les entiers Ceci est le jeu d'instructions complet pour les processeurs 8086-8088 et la plupart, si ce n'est toutes ces instructions sont accessibles en mode 32 bits. Elles opèrent alors sur les registres et valeurs (eax, ebx, etc.) en lieu et place de leur contrepartie en (ax, bx, etc.).
Instructions originales des 8086/8088
Nom Sens Traduction Notes AAA Ajuste le registre AL après addition (mode ASCII) Utilisé avec le codage BCD non compacté AAD Ajuste le registre AX après division (mode ASCII) Utilisé avec le codage BCD non compacté, bogué dans le jeu d'instructions original, mais « réparé » dans le NEC V20, causant de nombreuses incompatibilités AAM Ajuste le registre AX après multiplication (mode ASCII) Utilisé avec le codage BCD non compacté AAS Ajuste le registre AL après soustraction (mode ASCII) Utilisé avec le codage BCD non compacté ADC Ajoute deux entiers, plus le drapeau de retenue Le résultat remplace le premier opérande ADD Ajoute deux entiers Le résultat remplace le premier opérande AND Effectue un ET logique des opérandes Le résultat remplace le premier opérande CALL Appelle une procédure CBW Convertit un octet en mot Le registre AL est étendu à AX CLC Met le drapeau de retenue à zéro CLD Met le drapeau de direction à zéro CLI Met le drapeau d'interruption à zéro CMC Inverse le drapeau de retenue CMP Compare deux entiers (de façon arithmétique) Positionne les drapeaux en fonction de la différence entre les opérandes CMPSzz Compare un octet/mot de deux chaînes Mnémoniques : CMPS, CMPSB, CMPSW CWD Convertit un mot en double mot Le registre AX est étendu à DX:AX DAA Ajuste le registre AL après addition (mode décimal) Utilisé avec le codage BCD compacté DAS Ajuste le registre AL après soustraction (mode décimal) Utilisé avec le codage BCD compacté DEC Décrémente un entier Ôte un de l'opérande DIV 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 Utilisé avec l'unité de calcul en virgule flottante HLT Entre en état d'arrêt jusqu'à réception d'une interruption Permet de réduire la consommation de puissance du processeur. Alias : HALT IDIV 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 Multiplie par un entier signé Le facteur est le registre AL/AX et le produit est écrit dans AX/DX:AX IN Lit depuis un port La destination est le registre AL/AX INC Incrémente un entier Ajoute un à l'opérande INT Appelle l'interruption identifiée par l'opérande INTO Appelle l'interruption de débordement si le drapeau de débordement est à un IRET Revient d'une interruption Jcc 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 Saute (inconditionnel) LAHF Copie le registre des drapeaux dans le registre AH LDS Charge un pointeur de type far (lointain) dans le registre DS (segment) et l'opérande (décalage) LEA Charge l'adresse du second opérande dans le premier LES Charge un pointeur de type far (lointain) dans le registre ES (segment) et l'opérande (décalage) LOCK Préfixe verrouillant les bus pour les prochaines instructions Utilisé pour les plates-formes multiprocesseurs. LODSzz Copie un octet/mot d'une chaîne La destination est le registre AL/AX. Mnémoniques : LODS, LODSB, LODSW LOOPcc 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 Copie le second opérande dans le premier MOVSzz Copie un octet/mot d'une chaîne vers une autre Mnémoniques : MOVS, MOVSB, MOVSW MUL Multiplie par un entier non signé Le facteur est le registre AL/AX et le produit est écrit dans AX/DX:AX NEG Calcule l'opposé de l'opérande (négation par complément à deux) Le résultat remplace l'opérande NOP Ne fait rien NOT Effectue un NON logique (négation par complément à un) Le résultat remplace l'opérande OR Effectue un OU logique inclusif des opérandes Le résultat remplace le premier opérande OUT Écrit vers un port La source est le registre AX/AL POP Dépile vers le registre opérande POPF Dépile vers le registre des drapeaux PUSH Empile le registre opérande PUSHF Empile le registre des drapeaux RCL Effectue une rotation à gauche via par le drapeau de retenue RCR Effectue une rotation à droite via par le drapeau de retenue REPcc Préfixe de répétition d'une opération sur une chaîne Mnémoniques : REP, REPE, REPNE, REPNZ, REPZ RET Revient d'une procédure appelée avec décalage seul L'adresse de retour (décalage) est sur la pile. Un opérande optionnel peut indiquer le nombre d'octets supplémentaire à dépiler. RETF Revient d'une procédure appelée avec segment et décalage L'adresse de retour (segment et décalage) est sur la pile. Un opérande optionnel peut indiquer le nombre d'octets supplémentaire à dépiler. ROL Effectue une rotation vers la gauche ROR Effectue une rotation vers la droite SAHF Copie le registre AH dans le registre des drapeaux SAL Décalage arithmétique vers la gauche Même instruction que SHL SALC Copie la valeur 0xFF dans le registre AL si CF vaut 1, ou 0x00 sinon Initialement non documenté. Alias : SETALC SAR Décalage arithmétique vers la droite À ne pas confondre avec SHR SBB Soustrait deux entiers, ajoute le drapeau de retenue Le résultat remplace le premier opérande SCASzz Compare un octet/mot d'une chaîne La référence est le registre AL/AX. Mnémoniques : SCAS, SCASB, SCASW SHL Décalage logique à gauche Même instruction que SAL SHR Décalage logique à droite À ne pas confondre avec SAR STC Met le drapeau de retenue à un STD Met le drapeau de direction à un STI Met le drapeau d'interruption à un STOSzz Copie dans un octet/mot d'une chaîne La source est le registre AL/AX. Mnémoniques : STOS, STOSB, STOSW SUB Soustrait deux entiers Le résultat remplace le premier opérande TEST Compare deux opérandes (de façon logique) Positionne les drapeaux en fonction du résultat du ET logique entre les opérandes WAIT Attend tant que la broche BUSY du processeur est inactive Utilisé avec l'unité de calcul en virgule flottante XCHG Permute le contenu des deux opérandes XLAT Translation de donnée entre des tables Alias : XLATB XOR Effectue un OU logique exclusif des opérandes Le résultat remplace le premier opérande
Ajouts aux processeurs spécifiques
Ajouts aux processeurs 80186/80188
BOUND, ENTER, INSB, INSW, LEAVE, OUTSB, OUTSW, POPA, PUSHA, PUSHW
Ajouts au processeur 80286
ARPL, CLTS, LAR, LGDT, LIDT, LLDT, LMSW, LOADALL, LSL, LTR, SGDT, SIDT, SLDT, SMSW, STR, VERR, VERW
Ajouts au processeur 80386
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
Ajouts au processeur 80486
BSWAP, CMPXCHG, CPUID, INVD, INVLPG, RSM, WBINVD, XADD
Ajouts au processeur Pentium
CMPXCHG8B, RDMSR, RDPMC*, RDTSC, WRMSR RDPMC a été introduit avec le processeur Pentium Pro et le processeur Pentium MMX
Ajouts au processeur Pentium Pro
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
Ajouts au processeur AMD K7
SYSCALL - Fonctionnalité spécifique au processeur AMD équivalente à l'instruction SYSENTER. SYSRET - Fonctionnalité spécifique au processeur AMD équivalente à l'instruction SYSEXIT.
Ajouts au processeur Pentium
Fonctionnalités SSE
MASKMOVQ, MOVNTPS, MOVNTQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE (Mise en cache et ordonnancement mémoire ())
Ajouts au processeur Pentium 4
Fonctionnalités SSE2
CLFLUSH, LFENCE, MASKMOVDQU, MFENCE, MOVNTDQ, MOVNTI, MOVNTPD, PAUSE ()
Ajouts au processeur Pentium 4 supportant les fonctionnalités SSE3
Processeur supportant l'
Fonctionnalités SSE3
MONITOR, MWAIT (Pour la synchronisation des )
Ajouts au processeur Pentium 4 6x2
VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON (instructions VMX)
Ajouts aux processeurs x86-64
CMPXCHG16B
x87 : Instructions d'unité de calcul en virgule flottante Instructions du processeur x87 original F2XM1, FABS, FADD, FADDP, FBLD, FBSTP, FCHS, FCLEX, FCOM, FCOMP, FCOMPP, FDECSTP, FDISI, FDIV, FDIVP, FDIVR, FDIVRP, FENI, FFREE, FIADD, FICOM, FICOMP, FIDIV, FIDIVR, FILD, FIMUL, FINCSTP, FINIT, FIST, FISTP, FISUB, FISUBR, FLD, FLD1, FLDCW, FLDENV, FLDENVW, FLDL2E, FLDL2T, FLDLG2, FLDLN2, FLDPI, FLDZ, FMUL, FMULP, FNCLEX, FNDISI, FNENI, FNINIT, FNOP, FNSAVE, FNSAVEW, FNSTCW, FNSTENV, FNSTENVW, FNSTSW, FPATAN, FPREM, FPTAN, FRNDINT, FRSTOR, FRSTORW, FSAVE, FSAVEW, FSCALE, FSQRT, FST, FSTCW, FSTENV, FSTENVW, FSTP, FSTSW, FSUB, FSUBP, FSUBR, FSUBRP, FTST, FWAIT, FXAM, FXCH, FXTRACT, FYL2X, FYL2XP1
Ajouts aux processeurs spécifiques
Ajouts au processeur 80287
FSETPM
Ajouts au processeur 80387
FCOS, FLDENVD, FNSAVED, FNSTENVD, FPREM1, FRSTORD, FSAVED, FSIN, FSINCOS, FSTENVD, FUCOM, FUCOMP, FUCOMPP
Ajouts au processeur Pentium Pro
FCMOVB, FCMOVBE, FCMOVE, FCMOVNB, FCMOVNBE, FCMOVNE, FCMOVNU, FCMOVU, FCOMI, FCOMIP, FUCOMI, FUCOMIP, FXRSTOR, FXSAVE
Ajouts au processeur Pentium 4 supportant le SSE3
Fonctionnalité SSE3
FISTTP (conversion x87 vers entier)
Instructions SIMD Instructions MMX Ajouts au processeur Pentium MMX
EMMS, MOVD, MOVQ, PABSB, PABSW, PABSD, PACKSSDW, PACKSSWB, PACKUSWB, PADDB, PADDD, PADDSB, PADDSW, PADDUSB, PADDUSW, PADDW, PAND, PANDN, PCMPEQB, PCMPEQD, PCMPEQW, PCMPGTB, PCMPGTD, PCMPGTW, PMADDWD, PMULHW, PMULLW, POR, PSLLD, PSLLQ, PSLLW, PSRAD, PSRAW, PSRLD, PSRLQ, PSRLW, PSUBB, PSUBD, PSUBQ, PSUBSB, PSUBSW, PSUBUSB, PSUBUSW, PSUBW, PUNPCKHBW, PUNPCKHDQ, PUNPCKHWD, PUNPCKLBW, PUNPCKLDQ, PUNPCKLWD, PXOR
Instructions MMX+ étendues Ajouts au processeur 6x86MX de Cyrix ; Supportés sur les autres processeurs, i.e. sur Athlon 64
Instructions 3DNow! Ajouts au processeur K6-2
FEMMS, PAVGUSB, PF2ID, PFACC, PFADD, PFCMPEQ, PFCMPGE, PFCMPGT, PFMAX, PFMIN, PFMUL, PFRCP, PFRCPIT1, PFRCPIT2, PFRSQIT1, PFRSQRT, PFSUB, PFSUBR, PI2FD, PMULHRW, PREFETCH, PREFETCHW
Instructions 3DNow!+ Ajout au processeur Athlon
PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD
Instructions SSE Ajouts au processeur Pentium
Voir aussi les instructions sur les entiers ajoutées au processeur Pentium
Instructions SSE SIMD en virgule flottante ADDPS, ADDSS, ANDNPS, ANDPS, CMPPS, CMPSS, COMISS, CVTPI2PS, CVTPS2PI, CVTSI2SS, CVTSS2SI, CVTTPS2PI, CVTTSS2SI, DIVPS, DIVSS, LDMXCSR, MAXPS, MAXSS, MINPS, MINSS, MOVAPS, MOVHLPS, MOVHPS, MOVLHPS, MOVLPS, MOVMSKPS, MOVNTPS, MOVSS, MOVUPS, MULPS, MULSS, ORPS, RCPPS, RCPSS, RSQRTPS, RSQRTSS, SHUFPS, SQRTPS, SQRTSS, STMXCSR, SUBPS, SUBSS, UCOMISS, UNPCKHPS, UNPCKLPS, XORPS
Instructions SSE SIMD sur les entiers PAVGB, PAVGW, PEXTRW, PINSRW, PMAXSW, PMAXUB, PMINSW, PMINUB, PMOVMSKB, PSADBW, PSHUFW
Instructions SSE2 Ajouts au processeur Pentium 4
Voir aussi les instructions sur les entiers ajoutées au processeur Pentium 4
Instructions SSE2 SIMD en virgule flottante