Vous êtes sur la page 1sur 2

Code opération

En informatique, un code opération (en anglais, opcode[1],[2], operation code[1], machine


code[3], instruction code[4], instruction syllable[5],[6],[7],[8], instruction parcel ou opstring[9],[2]) est
la partie d'une instruction en langage machine qui spécifie l'opération à effectuer.

Outre le code opération lui-même, la plupart des instructions précise également les données
qu'elles vont traiter, sous forme d'opérandes.

En plus des codes opérations utilisés dans les jeux d'instructions de diverses unités centrales
de traitement, qui sont des dispositifs matériels, ils peuvent également être utilisés dans les
bytecodes de machines virtuelles.

Vue d'ensemble

Les spécifications et le format des codes opérations sont définis dans le jeu d'instructions du
processeur en question, qui peut être une unité centrale de traitement (UCT ou CPU en
anglais) ou une unité de traitement spécialisée (comme un processeur graphique ou GPU)
[10].
Les codes opérations pour un jeu d'instructions donné peuvent être décrits à l'aide d'une
table de codes opérations détaillant toutes les valeurs de codes opérations possibles. Outre
le code opération lui-même, une instruction comporte normalement aussi un ou plusieurs
spécificateurs d'opérandes (c'est-à-dire de données) sur lesquels l'opération doit agir, bien
que certaines opérations puissent avoir des opérandes implicites, voire aucun opérande[10].

Certains jeux d'instructions ont des champs de longueurs uniformes pour les codes
opérations et les opérandes, alors que d'autres (l'architecture x86 par exemple) ont une
structure plus compliquée, avec des champs de longueurs variables[10],[11]. Les jeux
d'instructions peuvent être étendus par l'utilisation de préfixes au code opération qui ajoutent
un sous-ensemble de nouvelles instructions composées de codes opérations existants
suivant des séquences d'octets réservées.

Selon l'architecture, les opérandes peuvent être des registres de processeur, des valeurs dans
la pile d'exécution, des adresses de mémoire vive, des ports d'entrées-sorties, etc. spécifiés
et accessibles en utilisant des modes d'adressage plus ou moins complexes. Les types
d'opérations comprennent les opérations arithmétiques, les opérations logiques, la
manipulation de bits, la copie de données et le contrôle de programme, ainsi que des
instructions spéciales (telles que l'instruction CPUID, qui permet de connaître certaines
caractéristiques du processeur)[10].

Le langage assembleur, ou simplement l'assembleur, est un langage de programmation de


bas niveau, qui utilise des mnémoniques (pour les codes opérations et les opérandes) pour
représenter le code machine[10], ce qui améliore la lisibilité tout en donnant un contrôle précis
sur les instructions. La plupart des programmes sont aujourd'hui réalisés à l'aide de langages
de programmation de haut niveau[12], qui sont plus faciles à lire et à écrire[10]. Ces langages
doivent être compilés (traduits en langage assembleur), ou exécutés par des interpréteurs[13].

Jeux d'instructions pour les logiciels

Les codes opérations sont aussi utilisés dans les bytecodes et autres représentations
destinées à un interpréteur de logiciel plutôt qu'à un dispositif matériel. Ces jeux
d'instructions destinés à des logiciels utilisent souvent des types de données et des
opérations de niveau légèrement supérieur à la plupart des équivalents matériels, mais sont
néanmoins construits selon des principes similaires. Les exemples incluent le bytecode
trouvé dans les fichiers de classe Java qui sont ensuite interprétés par la machine virtuelle
Java, le bytecode utilisé dans GNU Emacs pour le code Lisp compilé, le Common
Intermediate Language .NET, et bien d'autres[14].

Références

1. David William Barron, Assemblers and Loaders, University of Southampton, Southampton,


UK, Elsevier North-Holland Inc., coll. « Computer Monographs », 1978 (1re éd. 1971, 1969)
(ISBN 0-444-19462-2, LCCN 78-19961 (https://lccn.loc.gov/78-19961) ), « 2.1. Symbolic
instructions », p. 7 (xii+100 pages)

2. Shigeru Chiba, « Javassist, a Java-bytecode translator toolkit » (http://www.docjar.org/ht


ml/api/javassist/bytecode/InstructionPrinter.java.html) [archive du 2 mars 2020 (http
s://web.archive.org/web/20200302185725/http://www.docjar.org/html/api/javassist/byte
code/InstructionPrinter.java.html) ], 2007 (consulté le 27 mai 2016)

Vous aimerez peut-être aussi