Jeu d'instruction x86

Un article de Wikipédia, l'encyclopédie libre.

Icône de détail 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.

Sommaire

[modifier] 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.).

[modifier] Instructions originale des 8086/8088

Nom Sens Traduction Notes
AAA ASCII Adjust AL after Addition Ajustement ASCII de AL après addition Utilisé avec le codage BCD non compacté
AAD ASCII Adjust AX after Division Ajustement ASCII de AX après division 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 Ajustement ASCII de AX après multiplication
AAS ASCII Adjust AL after Subtraction Ajustement ASCII de AL après soustraction
ADC Add with Carry Ajoute avec le drapeau de retenue
ADD Add Ajoute
AND Logical AND ET logique
CALL Call procedure Appel de procédure
CBW Convert Byte to Word Convertit un octet en mot
CLC Clear Carry flag Réinitialise le drapeau de retenue
CLD Clear Direction flag Réinitialise le drapeau de direction
CLI Clear Interrupt flag Réinitialise le drapeau d'interruption
CMC Complement Carry flag Complémente le drapeau de retenue
CMP Compare operands Compare des opérandes
CMPSB Compare bytes in memory Compare des octets en mémoire
CMPSW Compare words Compare des mots en mémoire
CWD Convert Word to Doubleword Convertit un mot en double mot
DAA Decimal Adjust AL after Addition Ajustement décimal de AL après addition Utilisé avec le codage BCD compacté)
DAS Decimal Adjust AL after Subtraction Ajustement décimal de AL après soustraction
DEC Decrement Décrémente soustrait 1 à l'opérande
DIV Unsigned divide Division non signée
ESC Escape Utilisé avec l'unité de calcul en virgule flottante
HLT Enter halt state Entre en état d'arrêt
IDIV Signed divide Division signée
IMUL Signed multiply Multiplication signée
IN Input from port Entrée depuis un port
INC Increment Incrémente Ajoute 1 à l'opérande
INT Call to interrupt Appel à une interruption
INTO Call to interrupt if overflow Appel à une interruption si débordement
IRET Return from interrupt Retour depuis une interruption
Jcc Jump if condition is met Saute si une condition est rencontré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
LAHF Load flags into AH register Charge les drapeaux dans le registre AH
LDS Load DS with far pointer Charge DS avec un pointeur de type far (lointain)
LEA Load Effective Address Charge une adresse effective
LES Load ES with far pointer Charge ES avec un pointeur de type far (lointain)
LOCK Assert LOCK# signal Envoi un signal LOCK au bus du processeur Utilisé pour les plateformes multiprocesseurs. LOCK est un préfixe.
LODSB Load Byte Charge un octet
LODSW Load Word Charge un mot
LOOP/LOOPx Loop control Contrôle de boucle Mnémoniques : (LOOPE, LOOPNE, LOOPNZ, LOOPZ)
MOV Move Déplace
MOVSB Move byte from string to string Déplace un octet d'une chaîne vers une autre chaîne
MOVSW Move word from string to string Déplace un mot d'une chaîne vers une autre chaîne
MUL Unsigned multiply Multiplication non signée
NEG Two's complement negation Négation par complément à deux
NOP No operation Pas d'opération Cette instruction ne fait absolument rien
NOT One's Complement Negation Négation par complément à un
OR Logical OR OU logique
OUT Output to port Sortie vers un port
POP Pop data from stack Retire une donnée de la pile
POPF Pop data into flags register Retire une donnée de la pile et la place dans le registre des drapeaux
PUSH Push data onto stack Pousse une donnée sur la pile
PUSHF Push flags register onto stack Pousse le registre des drapeaux sur la pile
RCL Rotate through carry left Rotation à gauche en passant par le drapeau de retenue
RCR Rotate through carry right Rotation à droite en passant par le drapeau de retenue
REPxx Repeat string operation Répète une opération sur une chaîne Mnémoniques :(REP, REPE, REPNE, REPNZ, REPZ). À utiliser avec les instructions (CMPS/MOVS/SCAS/STOS). REPxx est un préfixe.
RET Return from procedure Retour d'une procédure
RETN Return from near procedure Retour d'une procédure de type near (proche)
RETF Return from far procedure Retour d'une procédure de type far (lointaine)
ROL Rotate left Rotation vers la gauche
ROR Rotate right Rotation vers la droite
SAHF Store AH into flags Sauvegarde AH dans le registre de drapeaux
SAL Shift Arithmetic left Déplacement arithmétique vers la gauche Même instruction que SHL. Il s'agit en fait d'une multiplication.
SAR Shift Arithmectic Right Déplacement arithmétique vers la droite Même instruction que SHR. Il s'agit en fait d'une division signée.
SBB Subtraction with borrow Soustraction avec retenue
SCASB Scan String with Byte Scan d'une chaîne avec un octet Il s'agit d'une comparaison entre l'octet contenu dans le registre AL et la chaîne pointée par ES:(E)DI.
SCASW Scan String with Word Scan d'une chaîne avec un mot Même chose que SCASB mais avec un mot en lieu et place d'un octet.
SHL Shift Left Déplacement à gauche Instruction semblable à SAL.
SHR Shift Right Déplacement à droite Instruction semblable à SAR.
STC Set Carry flag Arme le drapeau de retenue
STD Set Direction flag Arme le drapeau de direction
STI Set Interrupt flag Arme le drapeau d'interruption
STOSB Store in String using Byte Sauvegarde dans une chaîne en utilisant un octet L'octet dans le registre AL est sauvegardé à l'emplacement mémoire pointé par le registre ES:(E)DI.
STOSW Store in String using Word Sauvegarde dans une chaîne en utilisant un mot Le mot dans le registre AX est sauvegardé à l'emplacement mémoire pointé par le registre ES:(E)DI.
SUB Subtraction Soustraction
TEST Test Teste deux opérandes L'instruction TEST opére une comparaison grâce à un ET logique (AND) et change les drapeaux suivant le résultat du test.
WAIT Wait until BUSY# pin is inactive Attends tant que la broche BUSY du processeur est inactive Utilisé avec la FPU)
XCHG Exchange data Échange de donnée entre deux opérandes
XLAT Table look-up translation Translation de donnée entre des tables
XOR Exclusive OR OU exclusif

[modifier] 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 à été introduit avec le processeur Pentium Pro et le processeur Pentium avec la technologie 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

[modifier] x87 : Instructions d'unité de calcul en virgule flottante

[modifier] 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

[modifier] 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)

[modifier] Instructions SIMD

[modifier] Instructions MMX

Ajouts au processeur Pentium MMX
EMMS, MOVD, MODQ, 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, PSUBSB, PSUBSW, PSUBUSB, PSUBUSW, PSUBW, PUNPCKHBW, PUNPCKHDQ, PUNPCKHWD, PUNPCKLBW, PUNPCKLDQ, PUNPCKLWD, PXOR

[modifier] Instructions MMX+ étendues

Ajouts au processeur 6x86MX de Cyrix; Supportés sur les autres processeurs, i.e. Extended MMX sur Athlon 64

[modifier] 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

[modifier] Instructions 3DNow!+

Ajout au processeur Athlon
PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD

[modifier] Instructions SSE

Ajouts au processeur Pentium III
Voir aussi les instructions sur les entiers ajoutées au processeur Pentium III

[modifier] 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

[modifier] Instructions SSE SIMD sur les entiers

PAVGB, PAVGW, PEXTRW, PINSRW, PMAXSW, PMAXUB, PMINSW, PMINUB, PMOVMSKB, PSADBW, PSHUFW

[modifier] Instructions SSE2

Ajouts au processeur Pentium 4
Voir aussi les instructions sur les entiers ajoutées au processeur Pentium 4

[modifier] Instructions 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-precision 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).

[modifier] Instructions SSE2 SIMD sur les entiers

MOVDQ2Q, MOVDQA, MOVDQU, MOVQ2DQ, PADDQ, PMULUDQ, PSHUFHW, PSHUFLW, PSHUFD, PSLLDQ, PSRLDQ, PUNPCKHQDQ, PUNPCKLQDQ

[modifier] 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 SSE3

[modifier] Instructions SSE3 SIMD en virgule flottante

  • ADDSUBPD, ADDSUBPS (Arithmétique sur les nombres complexes)
  • HADDPD, HADDPS, HSUBPD, HSUBPS (Pour les graphismes)

[modifier] Instructions SSE3 SIMD portant sur les entiers

  • MOVDDUP, MOVSHDUP, MOVSLDUP (Arithmétique sur les nombres complexes)
  • LDDQU (Pour l'encodage vidéo)

[modifier] Instructions SSSE3

Ajouts au processeur Core 2

  • PSIGNW, PSIGND, PSIGNB
  • PSHUFB
  • PMULHRSW, PMADDUBSW
  • PHSUBW, PHSUBSW, PHSUBD
  • PHADDW, PHADDSW, PHADDD
  • PALIGNR
  • PABSW, PABSD, PABSB

[modifier] 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

[modifier] Voir aussi

[modifier] Liens externes

Autres langues