Académique Documents
Professionnel Documents
Culture Documents
Le langage machine, ou code machine, est la suite de bits qui est interprétée par le processeur
d'un ordinateur exécutant un programme informatique. C'est le langage natif d'un processeur,
c'est-à-dire le seul qu'il puisse traiter. Il est composé d'instructions et de données à traiter codées
en binaire.
Chaque processeur possède son propre langage machine, dont un code machine qui ne peut
s'exécuter que sur la machine pour laquelle il a été préparé. Si un processeur A est capable
d'exécuter toutes les instructions du processeur B, on dit que A est compatible avec B. L'inverse
n'est pas forcément vrai : A peut avoir des instructions supplémentaires que B ne connaît pas.
Le code machine est aujourd'hui généré automatiquement, généralement par le compilateur d'un
langage de programmation ou par l'intermédiaire d'un bytecode.
Sommaire
Instructions du langage
Opcode
Longueur des instructions
Avantages et inconvénients
Écriture du code
Exemples
Processeur MIPS
Processeur ARM
Voir aussi
Instructions du langage
Les « mots » d'un langage machine sont appelés instructions. Chacune d'elles déclenche une
commande de la part du processeur (par exemple : chercher une valeur dans la mémoire pour
charger un registre, additionner deux registres, etc.).
Un processeur à architecture RISC ne reconnaît que peu d'instructions différentes, alors qu'un
processeur à architecture CISC en possède un large éventail. Néanmoins certains processeurs CISC
récents transforment en interne les instructions complexes en une suite d'instructions simples, qui
sont alors exécutées.
Un programme n'est qu'une longue séquence d'instructions qui sont exécutées par le processeur.
Elles sont exécutées séquentiellement sauf quand une instruction de saut transfère l'exécution à
une autre instruction que celle qui suit. Il existe également des sauts conditionnels qui sont soit
exécutés (l'exécution continue à une autre adresse), soit ignorés (l'exécution continue à
l'instruction suivante) selon certaines conditions.
Opcode
Chaque instruction commence par un nombre appelé opcode (ou code opération) qui détermine
la nature de l'instruction. Par exemple, pour les ordinateurs d'architecture x86, l'opcode 0x6A (en
binaire 01101010) correspond à l'instruction push (ajouter une valeur en haut de la pile). Par
conséquent, l'instruction 0x6A 0x14 (01101010 00010100) correspond à push 0x14 (ajouter la
valeur hexadécimale 0x14 , ou 20 en décimal, en haut de la pile).
Avantages et inconvénients
Lorsque toutes les instructions ont la même taille elles sont également
alignées en mémoire. Par exemple si toutes les instructions sont alignées
sur 32 bits (4 octets), alors les deux bits de poids faibles de l'adresse
mémoire de n'importe quelle instruction sont à zéro. Cela permet
notamment une implémentation plus aisée du cache des prédictions de
branchement bimodales.
Le langage le plus facile à convertir en code machine est l'assembleur car il possède quasiment les
mêmes instructions. L'assembleur (ou langage assembleur) diffère d'une machine à une autre, bien
que les instructions soient au bout du compte très semblables. Les langages de plus haut niveau
sont convertis en assembleur pendant la compilation. Les langages utilisant une machine virtuelle
passent par un bytecode qui est converti à la volée par la machine virtuelle.
Exemples
Processeur MIPS
6 5 5 5 5 6 bits
[ op | rs | rt | rd |shamt| fonct] type-R
[ op | rs | rt | adresse/immédiat ] type-I
[ op | adresse cible ] type-J
rs, rt, et rd indiquent des opérandes de type registre ; shamt indique un décalage (shift amount) ;
et le champ adresse ou immédiat contient un opérande sous forme de valeur.
Par exemple, ajouter les registres 1 et 2 et placer le résultat dans le registre 6 est codé :
[ op | rs | rt | rd |shamt| fonct]
0 1 2 6 0 32 décimal
000000 00001 00010 00110 00000 100000 binaire
Charger une valeur depuis la cellule mémoire 68 cellules après celle pointée par le registre 3 dans
le registre 8 :
[ op | rs | rt | adresse/immédiat ]
35 3 8 68 décimal
100011 00011 01000 0000000001000100 binaire
Sauter à l'adresse 1025 (la prochaine instruction à exécuter se trouve à l'adresse 1025) :
[ op | adresse cible ]
2 1025 décimal
000010 00000000000000010000000001 binaire
Processeur ARM
Les processeurs de l'architecture ARM sont un cas particulier dans la mesure où toutes les
instructions sont conditionnelles. Elles sont toutes d'une longueur de 32 bits, et leurs quatre
premiers bits indiquent dans quelles conditions l'instruction doit être exécutée.
Voir aussi
Langage assembleur dit de deuxième Sur les autres projets Wikimedia :
génération
Langage de haut niveau dit de troisième langage machine, sur le Wiktionnaire
génération
Langage de quatrième génération
Processeur, la composante qui exécute le langage machine
Pipeline (architecture des processeurs)
Droit d'auteur : les textes sont disponibles sous licence Creative Commons attribution, partage dans les mêmes
conditions ; d’autres conditions peuvent s’appliquer. Voyez les conditions d’utilisation pour plus de détails, ainsi que les
crédits graphiques. En cas de réutilisation des textes de cette page, voyez comment citer les auteurs et mentionner la
licence.
Wikipedia® est une marque déposée de la Wikimedia Foundation, Inc., organisation de bienfaisance régie par le
paragraphe 501(c)(3) du code fiscal des États-Unis.