Jeu d'instruction x86
Un article de Wikipédia, l'encyclopédie libre.
Sommaire
|
[modifier] Introduction
Le jeu d'instruction 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.
[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] Liens externes
- Jeu d'instruction des processeurs 8086/80186/80286/80386/80486 [en]
- Documentation gratuite sur l'architecture IA-32 d'Intel, documentation officelle d'Intel, contient toutes les instructions et diverses documentations.[en]
- Référence NASM sur le jeu d'instruction x86 [en]
Portail de l'informatique – Accédez aux articles de Wikipédia concernant l’informatique. |