- Jeu d'instruction x86
-
Article détaillé : Jeu d'instructions.
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.
Jeu d'instruction sur les entiers
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.).
Instructions originales des 8086/8088
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 jusqu'à réception d'une interruption Permet de réduire la consommation de puissance du processeur. Alias : HALT 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 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 Return from Far Procedure 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 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 SALC Set AL from Carry Flag Copie la valeur 0xFF dans le registre AL si CF vaut 1, ou 0x00 sinon Initialement non documenté. Alias : SETALC 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 Alias : XLATB XOR Logical Exclusive OR 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 III
Fonctionnalités SSE
MASKMOVQ, MOVNTPS, MOVNTQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE (Mise en cache et ordonnancement mémoire (Memory Ordering))Ajouts au processeur Pentium 4
Fonctionnalités SSE2
CLFLUSH, LFENCE, MASKMOVDQU, MFENCE, MOVNTDQ, MOVNTI, MOVNTPD, PAUSE (for Cacheability)
Ajouts au processeur Pentium 4 supporant les fonctionnalités SSE3
Processeur supportant l'Hyper-Threading
Fonctionnalités SSE3
MONITOR, MWAIT (Pour la synchronisation des threads)Ajouts au processeur Pentium 4 6x2
VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON (instructions VMX)
Ajouts au 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, PXORInstructions MMX+ étendues
Ajouts au processeur 6x86MX de Cyrix ; Supportés sur les autres processeurs, i.e. Extended MMX 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, PREFETCHWInstructions 3DNow!+
Ajout au processeur Athlon
PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPDInstructions SSE
Ajouts au processeur Pentium III
Voir aussi les instructions sur les entiers ajoutées au processeur Pentium IIIInstructions 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 4Instructions SSE2 SIMD en virgule flottante
ADDPD, ADDSD, ANDNPD, ANDPD, CMPPD, CMPSD*, COMISD, CVTDQ2PD, CVTDQ2PS, CVTPD2DQ, CVTPD2PI, CVTPD2PS, CVTPI2PD, CVTPS2DQ, CVTPS2PD, CVTSD2SI, CVTSD2SS, CVTSI2SD, CVTSS2SD, CVTTPD2DQ, CVTTPD2PI, CVTPS2DQ, CVTTSD2SI, DIVPD, DIVSD, MAXPD, MAXSD, MINPD, MINSD, MOVAPD, MOVHPD, MOVLPD, MOVMSKPD, MOVSD*, MOVUPD, MULPD, MULSD, ORPD, SHUFPD, SQRTPD, SQRTSD, SUBPD, SUBSD, UCOMISD, UNPCKHPD, UNPCKLPD, XORPD
- Les instructions CMPSD et MOVSD ont le même nom que les instructions portant sur les chaînes CMPSD (CMPS) et MOVSD (MOVS). Toutefois il convient de faire la différence entre les instructions portant sur les scalaires en virgules flottantes à double-précision alors que les dernières se réfèrent aux instructions portant sur des double-mots de chaînes de caractères (instructions portant sur des entiers).
Instructions SSE2 SIMD sur les entiers
MOVDQ2Q, MOVDQA, MOVDQU, MOVQ2DQ, PADDQ, PMULUDQ, PSHUFHW, PSHUFLW, PSHUFD, PSLLDQ, PSRLDQ, PUNPCKHQDQ, PUNPCKLQDQ
Instructions SSE3
Ajouts au processeur Pentium 4 supportant le SSE3
Voir aussi les instructions portant sur les entiers et les virgules flottantes ajoutées au processeurs Pentium 4 avec support SSE3Instructions SSE3 SIMD en virgule flottante
- ADDSUBPD, ADDSUBPS (Arithmétique sur les nombres complexes)
- HADDPD, HADDPS, HSUBPD, HSUBPS (Pour les graphismes)
Instructions SSE3 SIMD portant sur les entiers
- MOVDDUP, MOVSHDUP, MOVSLDUP (Arithmétique sur les nombres complexes)
- LDDQU (Pour l'encodage vidéo)
Instructions SSSE3
Ajouts au processeur Core 2
- PSIGNW, PSIGND, PSIGNB
- PSHUFB
- PMULHRSW, PMADDUBSW
- PHSUBW, PHSUBSW, PHSUBD
- PHADDW, PHADDSW, PHADDD
- PALIGNR
- PABSW, PABSD, PABSB
Instructions SSE4
Ajouts aux architectures Intel Penryn et Nehalem
- PMULLD, PMULDQ
- DPPS, DPPD
- BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDDW
- PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINSD, PMAXSD
- ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD
- INSERTPS, PINSRB, PINSRD, PINSRQ, EXTRACTPS, PEXTRB, PEXTRD, PEXTRW, PEXTRQ
- PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, *PMOVSXDQ, PMOVZXDQ
- PTEST
- PCMPEQQ, PCMPGTQ
- PACKUSDW
- PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM
- CRC32
- POPCNT
Ajouts aux architectures Intel Penryn
- 47 instructions SSE4
Ajouts aux architectures Intel Nehalem
- 3 instructions SSE4
Ajouts aux architectures Intel Westmere
- des instructions pour AES
Ajouts aux architectures Intel Sandy Bridge
- instruction Advanced Vector Extensions (en)
Voir aussi
Articles connexes
Liens externes
- (en)Jeu d'instruction des processeurs 8086/80186/80286/80386/80486
- (en)Documentation gratuite sur l'architecture IA-32 d'Intel, documentation officielle d'Intel, contient toutes les instructions et diverses documentations.
- (en)Référence NASM sur le jeu d'instruction x86
Wikimedia Foundation. 2010.