Langage de bas niveau, il sert à composer les instructions de base à alimenter au processeur pour exécuter les logiciels les plus complexes
Le terme code machine ou langage machine fait référence à un ensemble d’ instructions de code binaire exécutées directement par le processeur ou la CPU d’ un ordinateur . Chaque instruction compilée suivant les règles de ce code n’effectue qu’une opération bien précise : écrire une donnée dans une cellule mémoire ; sautez une cellule mémoire et passez à la suivante ; effectuer une opération logique-arithmétique et ainsi de suite. Chaque programme exécuté directement par le CPU est donc écrit à l’aide d’une suite d’instructions de ce type.
Le langage machine peut être considéré comme le niveau le plus bas de représentation d’un programme compilé ou assemblé ou comme un langage de programmation primitif et strictement dépendant du matériel utilisé pour exécuter des instructions. S’il est possible de créer des logiciels en utilisant directement le langage machine, la programmation en code binaire (un alphabet numérique composé exclusivement de deux caractères, classiquement indiqué par les chiffres et 1 ) peut être particulièrement fastidieuse et conduire facilement à des erreurs. Pour programmer en code machineen fait, il faut constamment se souvenir et calculer les adresses mémoire utilisées et “traiter” soigneusement chaque bit d’information dont le programme a besoin.
Tous les logiciels que nous utilisons au quotidien sont réalisés à l’aide de langages de programmation de haut niveau (plus proches du langage parlé et plus facilement compréhensibles par ceux qui programment). Le code source du logiciel sera ensuite traduit en instructions élémentaires par des outils spéciaux appelés assembleurs ou compilateurs . Les programmes interprétés sont une exception , dans lesquels le code source est exécuté directement (au lieu d’être traduit) grâce à des outils spéciaux appelés interpréteurs .
Structure du langage machine
Si d’un point de vue opérationnel, la programmation en langage machine peut paraître particulièrement complexe, d’un point de vue théorique sa structure et son fonctionnement sont assez simples. Comme s’il s’agissait d’un langage naturel, le code machine est composé de lettres (les valeurs du code binaire, les et les 1), de mots (combinaisons de plusieurs lettres du code binaire) et de phrases (combinaisons de plusieurs mots correspondant à une seule consigne donnée “en repas” au processeur). Aussi simple que cela puisse paraître, cette organisation est à la base du fonctionnement de tous les logiciels en circulation, y compris les plus complexes et les plus modernes.
Voulant faire une analogie grammaticale, on pourrait dire que les phrases du langage machine adoptent la structure syntaxique verbe + compléments (comme le complément d’objet, le complément de temps et le complément de lieu). En particulier, chaque phrase commence par un verbe, correspondant à l’action que le CPU doit effectuer après traitement de l’instruction d’entrée. Les compléments, quant à eux, indiquent les paramètres sur lesquels l’action doit être appliquée (deux nombres, par exemple, si le verbe est Add ou Subtract ) ou l’adresse des cellules mémoire dans lesquelles certaines informations doivent être lues ou enregistrées. informations.
Comme nous l’avons vu, les verbes qui commencent la phrase sont de nature impérative ( Read , Add , Subtract , Skip , Save ), ce qui fait du langage machine un langage de programmation impératif .
Unicité et compatibilité
Parler de langage machine dans un sens absolu, comme s’il était unique, est une erreur. Les différents types de CPU et de SoC du marché se caractérisent en effet par leur propre architecture et organisation interne : cela les rend (à leur manière) uniques et incapables d’exécuter des instructions écrites dans un langage machine différent du leur. Lorsque, par exemple, en parcourant les spécifications d’un smartphone, vous lisez des termes tels que Cortex-A73 (dans le cas des processeurs ARM ), cela signifie que ce SoC particulier est capable d’exécuter les instructions en langage machine écrites spécifiquement pour l’architecture ArmV8 et pas des instructions écrites pour une architecture matérielle différente.
Si un processeur P1, en revanche, est capable d’interpréter et d’exécuter les instructions d’un logiciel écrit avec un langage machine conçu pour le processeur P2, cela signifie que les deux processeurs sont compatibles entre eux. Il suffit de penser au cas précité des architectures ArmV8, un standard (ou presque) dans le domaine des SoC pour smartphones et autres appareils portables. Ou l’architecture x86, initialement développée par Intel et adoptée plus tard par presque tous les autres fabricants de processeurs (comme AMD, par exemple).