Aller au contenu

Chapitre 8.2 : Le langage assembleur⚓︎

A savoir

I. Le langage machine⚓︎

Le langage machine est l'ensemble des instructions exécutables directement par le processeur d'un ordinateur. Il est composé de séquences de bits (0 et 1) qui représentent des opérations basiques que le processeur peut effectuer, telles que :

  • Les instructions arithmétiques (addition, soustraction, multiplication, etc.).
  • Les instructions de transfert de données qui permettent de transférer des données.
  • Les instructions de rupture de séquence (de saut ou de branchement) : les instructions machines sont situées en mémoire vive dans l'ordre ; les ruptures de séquence d'exécution permettent d'interrompre l'ordre initial sous certaines conditions en passant à une instruction située à une adresse mémoire donnée.

Chaque type de processeur a son propre jeu d'instructions en langage machine.

Considérons un processeur hypothétique avec un jeu d'instructions très simple. Voici un exemple de programme en langage machine pour ce processeur :

101000000101       -> Charge la valeur immédiate 5 dans le registre A.
101100000011       -> Charge la valeur immédiate 3 dans le registre B
110000010010       -> Additionne les valeurs des registres A et B et stocke le résultat dans le registre 
1101000000010000   -> stocke la valeur du registre C à l'adresse mémoire 0x1000.
Ce type de code est très difficile à écrire et à comprendre pour les humains, c'est pourquoi on utilise généralement des langages de programmation de plus haut niveau, comme l'assembleur, le C, ou d'autres langages, qui sont ensuite compilés ou interprétés en langage machine par le processeur.

A savoir

II. Le langage assembleur⚓︎

L'assembleur est un langage de programmation de bas niveau qui utilise des noms symboliques pour représenter les instructions en langage machine.

Chaque instruction en assembleur correspond directement à une instruction en langage machine, mais elle est écrite de manière plus lisible pour les humains.

Il permet aux programmeurs de manipuler directement les registres, la mémoire et les opérations du processeur. Les programmes écrits en assembleur sont ensuite assemblés par un programme appelé assembleur, qui traduit le code assembleur en langage machine exécutable par le processeur.

Supposons que nous avons un processeur hypothétique avec un jeu d'instructions simple. Voici un exemple de programme en assembleur pour ce processeur :

MOV A, #5         -> Charge la valeur immédiate 5 dans le registre A.
MOV B, #3         -> Charge la valeur immédiate 3 dans le registre B
ADD C, A, B       -> Additionne les valeurs des registres A et B et stocke le résultat dans le registre 
STR [0x1000], C   -> stocke la valeur du registre C à l'adresse mémoire 0x1000.
Chaque instruction est composée d'une opération suivie d'un ou plusieurs opérandes. L'assembleur reste un langage de bas niveau et nécessite une bonne compréhension de l'architecture du processeur.

A savoir

III. Fonctionnement d'une instruction assembleur⚓︎

1. Les registres dans la CPU⚓︎

Une CPU minimale, souvent appelée un microprocesseur simple, contient généralement plusieurs types de registres essentiels pour son fonctionnement.

Voici les principaux types de registres que l'on trouve dans une CPU minimale :

Type de Registre Description
Registre d'Instruction (IR) Contient l'instruction en cours d'exécution.
Compteur de Programme (PC) Contient l'adresse de la prochaine instruction à exécuter.
Registre d'Accumulation (ACC) Utilisé pour les opérations arithmétiques et logiques.
Registre d'État (SR) Contient des indicateurs d'état (flags) comme le drapeau de zéro (Z), le drapeau de retenue (C), le drapeau de signe (S), etc.
Registres Généraux Utilisés pour stocker des données temporaires et des résultats intermédiaires.
Registre de Pile (SP) Contient l'adresse du sommet de la pile.

Ces registres sont essentiels pour le fonctionnement de base de la CPU, permettant l'exécution des instructions, la gestion des adresses mémoire, et le stockage temporaire des données.

L’image ci-dessous issue du simulateur RISC de Peter Higginson montre un exemple d’architecture RISC (Reduced Instruction Set Computing) basée sur l'utilisation d'un ensemble d'instructions simplifié et optimisé

Simulateur RISC de Peter Higginson
Simulateur RISC de Peter Higginson

2. Cycle processeur et horloge⚓︎

Un CPU possède une horloge qui définit le rythme auquel les instructions sont exécutées. Par exemple, un processeur ayant une fréquence de 3,2 GHz va effectuer 3,2 milliards de cycles d'horloge par seconde. Pour exécuter une instruction, le processeur va effectuer ce qu'on appelle un cycle d'exécution qui s'effectue en quatre étapes :

  • Chargement (Fetch en anglais) : l'unité de contrôle récupère le mot binaire (qui contient la prochaine instruction à exécuter) situé en mémoire à l'adresse indiquée par son registre PC et la stocke dans son registre IR ;
  • Décodage (Decode) : la suite de bits de l'instruction contenue dans le registre IR est décodée pour déduire quelle instruction est à exécuter et sur quelles données.
  • Exécution (Execute) : l'instruction est exécutée, soit par l'ALU s'il s'agit d'une opération arithmétique ou logique, soit par l'UC s'il s'agit d'une opération de branchement qui va modifier la valeur du registre PC.
  • Stockage (Store) : Le résultat de l’instruction est stocké en mémoire principale.

Cycle processeur
Cycle processeur

Conclusion⚓︎

Le langage machine et l'assembleur sont des composants fondamentaux de la programmation informatique. Le langage machine est le niveau le plus bas de programmation, directement exécutable par le processeur, tandis que l'assembleur offre une couche d'abstraction plus lisible pour les humains tout en restant très proche du matériel. Comprendre ces concepts est essentiel pour maîtriser les bases de l'informatique et du fonctionnement des ordinateurs.