Langage machine

Encodage binaire des codes ASCII 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.

Instructions du langage

Article détaillé : Instruction informatique.

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), 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).

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écifient 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.

Other Languages
العربية: لغة الآلة
беларуская: Машынны код
български: Машинен език
বিষ্ণুপ্রিয়া মণিপুরী: মেশিন লেঙগুয়েজ
brezhoneg: Areg ijinenn
bosanski: Mašinski jezik
čeština: Strojový kód
dansk: Maskinkode
Ελληνικά: Γλώσσα μηχανής
English: Machine code
Esperanto: Maŝinkodo
eesti: Masinkood
فارسی: کد ماشین
suomi: Konekieli
עברית: שפת מכונה
हिन्दी: मशीनी भाषा
hrvatski: Strojni jezik
hornjoserbsce: Mašinowa rěč
magyar: Gépi kód
Bahasa Indonesia: Bahasa mesin
íslenska: Vélamál
日本語: 機械語
la .lojban.: sambau
한국어: 기계어
олык марий: Машин код
മലയാളം: യന്ത്രഭാഷ
монгол: Машин код
မြန်မာဘာသာ: Machine language
Nederlands: Machinetaal
norsk nynorsk: Maskinkode
norsk bokmål: Maskinkode
română: Limbaj mașină
русский: Машинный код
srpskohrvatski / српскохрватски: Mašinski jezik
Simple English: Machine code
slovenčina: Strojový kód
slovenščina: Strojna koda
српски / srpski: Машински језик
svenska: Maskinkod
Türkçe: Makine dili
українська: Машинний код
Tiếng Việt: Ngôn ngữ máy
中文: 机器语言
粵語: 機器語言