Langage machine

Langage machine
Encodage binaire du mot « Wikipedia ».

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

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 est juste 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) ou ignorés (l'exécution continue à l'instruction suivante) selon certaines conditions.

Opcode

Chaque instruction commence par un numéro 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 bas 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écimale, en bas de la pile).

Longueur des instructions

Certains processeurs codent toutes leurs instructions avec le même nombre de bits (par exemple : ARM, MIPS, PowerPC), tandis que chez d'autres la longueur de l'instruction dépend de l'opcode (exemple : x86). L'organisation des combinaisons de bits dépend largement du processeur. Le plus commun est la division en champs. Un ou plusieurs champs spécifie l'opération exacte (par exemple une addition). Les autres champs indiquent le type des opérandes, leur localisation, ou une valeur littérale (les opérandes contenus dans une instruction sont appelés immédiat).

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.

En revanche le code machine prend moins de place en mémoire s'il ne possède pas de taille minimum, étant donné qu'on élimine les champs non utilisés.

Écriture du code

Bien que le langage machine était le seul disponible à l'aube des ordinateurs, il est aujourd'hui très long et fastidieux de développer en binaire ; il faut passer par un et souvent plusieurs langages intermédiaires.

De très nombreux langages de programmation sont transformés en langage machine lors de la compilation. Tous les programmes exécutables contiennent au moins une petite partie en langage machine.

Le langage le plus facile a 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 convertie à la volée par la machine virtuelle.

Exemples

Processeur MIPS

Comme exemple spécifique, regardons l'architecture MIPS. Ses instructions ont toujours une longueur de 32 bits. Le type général de l'instruction est donné par les 6 bits de poids les plus forts (dans une représentation sur 32 bits, les 6 de gauche), qu'on appelle le champ op.

Les instructions de type-J et de type-I sont pleinement spécifiées par le champ op. Les instructions de type-R ont un champ supplémentaire, fonct, pour déterminer la nature exacte de l'opération. Les champs de ces 3 types d'instructions sont :

   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 indique 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 leur 4 premiers bits indiquent dans quelles conditions l'instruction doit être exécutée.

Voir aussi


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Langage machine de Wikipédia en français (auteurs)

Игры ⚽ Поможем написать курсовую

Regardez d'autres dictionnaires:

  • Langage Machine — 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é …   Wikipédia en Français

  • Langage machine — ● Langage machine langage directement exécutable par l unité centrale d un ordinateur, dans lequel les instructions sont exprimées en code binaire …   Encyclopédie Universelle

  • langage machine — ● loc. m. ►LANG C est le langage de base compréhensible par un ordinateur, i.e. une suite de zéros et de uns. C est du binaire, absolument incompréhensible pour un être humain normalement constitué. Pour pouvoir manipuler du langage machine, on… …   Dictionnaire d'informatique francophone

  • langage machine — kompiuterinė kalba statusas T sritis automatika atitikmenys: angl. absolute language; actual language; computer language; machine language vok. Maschinensprache, f; Rechnersprache, f rus. машинный язык, m; язык машинных кодов, m pranc. langage… …   Automatikos terminų žodynas

  • langage — [ lɑ̃gaʒ ] n. m. • v. 1160; lengatge v. 980; de langue I ♦ 1 ♦ Fonction d expression de la pensée et de communication entre les hommes, mise en œuvre au moyen d un système de signes vocaux (parole) et éventuellement de signes graphiques… …   Encyclopédie Universelle

  • Langage De Programmation — Un langage de programmation est un langage informatique, permettant à un être humain d écrire un code source qui sera analysé par une machine, généralement un ordinateur. Le code source subit ensuite une transformation ou une évaluation dans une… …   Wikipédia en Français

  • Langage Intermédiaire — En informatique, un langage intermédiaire est le langage d une machine abstraite conçu pour l analyse d un programme informatique. Le terme vient de son utilisation dans les compilateurs, où un compilateur transcrit d abord le code source d un… …   Wikipédia en Français

  • Langage intermediaire — Langage intermédiaire En informatique, un langage intermédiaire est le langage d une machine abstraite conçu pour l analyse d un programme informatique. Le terme vient de son utilisation dans les compilateurs, où un compilateur transcrit d abord… …   Wikipédia en Français

  • Langage intermédaire — Langage intermédiaire En informatique, un langage intermédiaire est le langage d une machine abstraite conçu pour l analyse d un programme informatique. Le terme vient de son utilisation dans les compilateurs, où un compilateur transcrit d abord… …   Wikipédia en Français

  • Langage Interprété Informatique — En informatique, un programme écrit en langage interprété est converti en instructions directement exécutables par la machine au moment de son exécution. Au contraire, un programme écrit en langage compilé est traduit en instructions lisibles par …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”