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
- David William Barron, Assemblers and Loaders, University of Southampton, Southampton, UK, Elsevier North-Holland Inc., coll. « Computer Monographs », (1re éd. 1971, 1969) (ISBN 0-444-19462-2, LCCN 78-19961), « 2.1. Symbolic instructions », p. 7 (xii+100 pages)
- Shigeru Chiba, « Javassist, a Java-bytecode translator toolkit » [archive du ], (consulté le )
- MCS-4 Assembly Language Programming Manual - The INTELLEC 4 Microcomputer System Programming Manual, Santa Clara, California, USA, Intel Corporation, , B-1 â B-8, « Appendix B - Instruction Machine Codes »
- MCS-40 User's Manual For Logic Designers, Santa Clara, California, USA, Intel Corporation, , « The Functions Of A Computer: Instruction Register And Decoder », viii :
« [âŠ] Each operation that the processor can perform is identified by a unique binary number known as an instruction code. [âŠ] »
- Douglas W. Jones, « A Minimal CISC », Association for Computing Machinery (ACM), New York, USA, vol. 16, no 3,â , p. 56â63 (DOI 10.1145/48675.48684)
- Ćukasz DomagaĆa, Application of CLP to instruction modulo scheduling for VLIW processors, Gliwice, Poland, Jacek Skalmierski Computer Studio, , 80â83 [83] (ISBN 978-83-62652-42-6, lire en ligne [archive du ]), « 7.1.4. Benchmark suite »
- Mark Smotherman, « Multiple Instruction Issue » [archive du ], School of Computing, Clemson University, (consulté le )
- Douglas W. Jones, « A Minimal CISC » [archive du ], sur Computer Architecture On-Line Collection, Iowa City, USA, The University of Iowa, Department of Computer Science, (consulté le )
- Andrew Schulman, « Finding Binary Clones with Opstrings & Function Digests », CMP Media LLC, vol. 30, no 7,â , p. 69â73 (ISSN 1044-789X, lire en ligne [archive du ], consultĂ© le ); Andrew Schulman, « Finding Binary Clones with Opstrings & Function Digests », CMP Media LLC, vol. 30, no 8,â , p. 56â61 (ISSN 1044-789X, lire en ligne [archive du ], consultĂ© le ); Andrew Schulman, « Finding Binary Clones with Opstrings & Function Digests », United Business Media, vol. 30, no 9,â , p. 64â70 (ISSN 1044-789X, lire en ligne [archive du ], consultĂ© le )
- Computer architecture: A quantitative approach, Cambridge, Massachusetts, USA, Morgan Kaufmann Publishers, (ISBN 978-0-12811905-1, OCLC 983459758)
- Richard Mansfield, Machine Language For Beginners, Greensboro, North Carolina, USA, COMPUTE! Publications, Inc., American Broadcasting Companies, Inc.; Small System Services, Inc., coll. « Compute! Books », (ISBN 0-942386-11-6, lire en ligne [archive du ]), « Introduction: Why Machine Language? »
- « Programming Language Popularity » [archive du ], sur langpop.com, (consulté le )
- William Swanson, « Introduction to Assembly Language » [archive du ], sur Swanson Technologies, (consulté le )
- (en) « bytecode Definition » [archive du ] (consulté le )