informatique , un code opération ( opcode ) est une valeur énumérée qui spécifie l'opération à effectuer. Les codes opérations sont utilisés dans les dispositifs matériels tels que les unités arithmétiques et logiques (UAL), les unités centrales de traitement (CPU) et les jeux d'instructions logiciels. Dans les UAL, le code opération est directement appliqué aux circuits via un bus de signaux d'entrée. En revanche, dans les CPU, le code opération est la partie d'une instruction en langage machine qui spécifie l'opération à effectuer.
machines de calcul abstraites . Dans les CPU, un opcode peut être appelé code machine d'instruction , code d'instruction , syllabe d'instruction , paquet d'instruction ou chaîne d'opérations . Pour un processeur donné (qu'il s'agisse d'un CPU général ou d'une unité de traitement plus spécialisée), les opcodes sont définis par l' architecture du jeu d'instructions (ISA) du processeur . Ils peuvent être décrits à l'aide d'une table d'opcodes . Les types d'opérations peuvent inclure des opérations arithmétiques , la copie de données, des opérations logiques , le contrôle de programme et des instructions spéciales (par exemple, CPUID ) .Outre le code opération, de nombreuses instructions spécifient les données (appelées opérandes ) sur lesquelles l'opération agira, bien que certaines instructions puissent avoir des opérandes implicites ou aucun opérande. Certains jeux d'instructions possèdent des champs quasi uniformes pour les spécificateurs de code opération et d'opérandes, tandis que d'autres (par exemple, l'architecture x86 ) ont une structure moins uniforme et de longueur variable. Les jeux d'instructions peuvent être étendus par des préfixes de code opération , qui ajoutent un sous-ensemble de nouvelles instructions composées de codes opération existants suivant des séquences d'octets réservées.
Exemple de tableau d'opcodes
Ce tableau présente les codes d'opération d'un microprocesseur simple à 8 bits, l' Intel 8008 de 1972.
Chaque code opération est codé sur 8 bits . Il est affiché sous forme de séquence binaire de 1 et de 0 dans la colonne « Code opération » . Jusqu'à deux champs supplémentaires peuvent être intégrés au code opération. Certains champs de 3 bits sont nommés DDD, SSS, CC et ALU. Les champs SSS (source) et DDD (destination) spécifient l'un des huit registres ou la mémoire 8008 possibles : A, B, C, D, E, H, L ou M. Le champ CC spécifie l'une des huit conditions de résultat qui activeront certaines instructions JMP, CAL et RET. Le champ ALU spécifie l'une des huit fonctions arithmétiques et logiques à exécuter lors de l'instruction : addition, addition avec retenue, soustraction, soustraction avec emprunt, ET logique, OU exclusif logique, OU logique et comparaison. Le « X » dans certains champs signifie qu'un 1 ou un 0 peut être inséré sans effet .
Les bits fixes (0 et 1) sont combinés aux champs de paramètres pour former le code opération 8 bits. L'instruction complète peut également nécessiter un ou deux octets supplémentaires d' opérandes . Ces derniers sont indiqués dans la deuxième colonne principale du tableau, intitulée « Opérandes » . Si aucun opérande n'est requis, la colonne est remplie d'un tiret ( — ).
Comme les 0 et les 1 sont difficiles à mémoriser, la colonne Mnémonique affiche un code de lettre court et facile à retenir qu'un programmeur en langage assembleur peut utiliser pour invoquer le code d'opération requis.
La colonne Description indique la fonction exécutée par le microprocesseur lorsqu'il rencontre un code d'opération spécifique.
| Opcode | Opérandes | Mnémonique | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | b2 | b3 | |||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | X | — | — | HLT | Arrêt | |
| 0 | 0 | DDD | 0 | 0 | 0 | — | — | INR | DDD ← DDD + 1 (sauf A et M) | |||
| 0 | 0 | DDD | 0 | 0 | 1 | — | — | DCr | DDD ← DDD - 1 (sauf A et M) | |||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | — | RLC | A 1-7 ← A 0-6 ; A 0 ← Cy ← A 7 | |
| 0 | 0 | CC | 0 | 1 | 1 | — | — | Rcc (RET conditionnel) | Si cc est vrai, P ← (pile) | |||
| 0 | 0 | ALU | 1 | 0 | 0 | données | — | ADI ACI SUI SBI NDI XRI ORI Données IPC | Données A ← A [opération ALU] | |||
| 0 | 0 | N | 1 | 0 | 1 | — | — | RST n | (pile) ← P, P ← N x 8 | |||
| 0 | 0 | DDD | 1 | 1 | 0 | données | — | Données LrI (Charger r avec les données immédiates) | DDD ← données | |||
| 0 | 0 | X | X | X | 1 | 1 | 1 | — | — | RET | P ← (pile) | |
| 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | — | — | RRC | A 0-6 ← A 1-7 ; A 7 ← Cy ← A 0 | |
| 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | — | — | RAL | A 1-7 ← A 0-6 ; Cy ← A 7 ; A 0 ← Cy | |
| 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | — | — | RAR | A 0-6 ← A 1-7 ; Cy ← A 0 ; A 7 ← Cy | |
| 0 | 1 | CC | 0 | 0 | 0 | addlo | addhi | Jcc ajouter (JMP conditionnel) | Si cc est vrai, P ← ajouter | |||
| 0 | 1 | 0 | 0 | port | 1 | — | — | Port INP | A ← Port (ports 0 à 7 uniquement) | |||
| 0 | 1 | port | 1 | — | — | Port de sortie | Port ← A (ports 8 à 31 uniquement) | |||||
| 0 | 1 | CC | 0 | 1 | 0 | addlo | addhi | Ccc ajouter (CAL conditionnel) | Si cc est vrai, (pile) ← P, P ← ajouter | |||
| 0 | 1 | X | X | X | 1 | 0 | 0 | addlo | addhi | JMP ajouter | P ← ajouter | |
| 0 | 1 | X | X | X | 1 | 1 | 0 | addlo | addhi | CAL ajouter | (pile) ← P, P ← ajouter | |
| 1 | 0 | ALU | SSS | — | — | ADr ACr SUr SBr NDr XRr ORr CPr | A ← A [Opération ALU] SSS | |||||
| 1 | 1 | DDD | SSS | — | — | Lds (Charger d avec s) | DDD ← SSS | |||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | — | — | HLT | Arrêt | |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | b2 | b3 | Mnémonique | Description | |
| SSS DDD | 2 | 1 | 0 | CC | ALU | |||||||
| UN | 0 | 0 | 0 | FC, C faux | ADr ADI (A ← A + arg) | |||||||
| B | 0 | 0 | 1 | FZ, Z faux | ACr ACI (A ← A + arg + Cy) | |||||||
| C | 0 | 1 | 0 | FS, S faux | SUr SUI (A ← A - arg) | |||||||
| D | 0 | 1 | 1 | FP, P impair | SBr SBI (A ← A - arg - Cy) | |||||||
| E | 1 | 0 | 0 | TC, C vrai | NDr NDI (A ← A ∧ arg) | |||||||
| H | 1 | 0 | 1 | TZ, Z vrai | XRr XRI (A ← A ⊻ arg) | |||||||
| L | 1 | 1 | 0 | TS, S vrai | ORr ORI (A ← A ∨ arg) | |||||||
| M | 1 | 1 | 1 | TP, P même | CPr IPC (A - arg) | |||||||
| SSS DDD | 2 | 1 | 0 | CC | ALU | |||||||