Aller au contenu

Instructions Machines

Les "instructions machines" sont exécutées par l'unité de commande.

Un ordinateur exécute des programmes qui sont des suites d'instructions. Le CPU est incapable d'exécuter directement des programmes (écrits, par exemple, en Python).

En effet, comme tous les autres constituants d'un ordinateur, le CPU gère uniquement 2 états (symbolisés par "1" et "0"): les instructions exécutées au niveau du CPU sont donc codées en binaire.

Remarque

L'ensemble des instructions exécutables directement par le microprocesseur constitue ce que l'on appelle le "langage machine".

Composition d'une instruction machine

Une instruction machine est une chaîne binaire composée principalement de deux parties :

  • le champ "code opération" qui indique au processeur le type de traitement à réaliser. Par exemple le code 00100110 peut donner l'ordre au CPU d'effectuer une multiplication.
  • le champ "opérandes" indique la nature des données sur lesquelles l'opération désignée par le "code opération" doit être effectuée.

Les instructions arithmétiques (addition, soustraction, multiplication...).

On peut, par exemple, avoir une instruction qui ressemble à:
additionne la valeur contenue dans le registre R1 et le nombre 789 et range le résultat dans le registre R0.

Les instructions de transfert de données

Elles permettent de transférer une donnée d'un registre du CPU vers la mémoire vive et vice versa. Par exemple, on peut avoir une instruction qui ressemble à prendre la valeur située à l'adresse mémoire 487 et la placer dans la registre R2 ou encore prendre la valeur située dans le registre R1 et la placer à l'adresse mémoire 512.

Les instructions de rupture de séquence

Les instructions machines sont situées en mémoire vive.
Si, par exemple, l'instruction n°1 est située à l'adresse mémoire 343,
l'instruction n°2 sera située à l'adresse mémoire 344,
l'instruction n°3 sera située à l'adresse mémoire 345...

Au cours de l'exécution d'un programme, le CPU passe d'une instruction à une autre en passant d'une adresse mémoire à l'adresse mémoire immédiatement supérieure: après avoir exécuté l'instruction n°2 (situé à l'adresse mémoire 344), le CPU "va chercher" l'instruction suivante à l'adresse mémoire 344+1=345.

Les instructions de rupture de séquence d'exécution encore appelées instructions de saut ou de branchement permettent d'interrompre l'ordre initial sous certaines conditions en passant à une instruction située une adresse mémoire donnée.

Par exemple, nous pouvons avoir une instruction qui ressemble à cela: imaginons qu'à l'adresse mémoire 354 nous avons l'instruction si la valeur contenue dans le registre R1 est strictement supérieure à 0 alors exécuter l'instruction située à l'adresse mémoire 4521. Si la valeur contenue dans le registre R1 est strictement supérieure à 0 alors la prochaine instruction à exécuter est l'adresse mémoire 4521. Dans le cas contraire, la prochaine instruction à exécuter est à l'adresse mémoire 355.

Les opérandes

Les opérandes désignent les données sur lesquelles le code opération de l'instruction doit être réalisée.

Un opérande peut être de 3 natures différentes :

  1. L'opérande est une valeur (on parle de valeur immédiate): l'opération est effectuée directement sur la valeur donnée dans l'opérande.
  2. L'opérande est un registre du CPU: l'opération est effectuée sur la valeur située dans un des registres (R0, R1, R2,...), l'opérande indique de quel registre il s'agit.
  3. L'opérande est une donnée située en mémoire vive: l'opération est effectuée sur la valeur située en mémoire vive à l'adresse XXXXX. Cette adresse est indiquée dans l'opérande.

Exemples

  • Quand on considère l'instruction machine: additionne le nombre 125 et la valeur située dans le registre R2, range le résultat dans le registre R1, nous avons 2 valeurs:
    • "le nombre 125" qui est une valeur immédiate (cas n°1),
    • et "la valeur située dans le registre R2" (cas n°2).
  • Quand on considère l'instruction machine: prendre la valeur située dans le registre R1 et la placer à l'adresse mémoire 512, nous avons 2 valeurs:
    • "à l'adresse mémoire 512" (cas n°3),
    • et "la valeur située dans le registre R1" (cas n°2).

Remarque

Évidemment le microprocesseur est incapable d'interpréter la phrase additionne le nombre 125 et la valeur située dans le registre R2 , range le résultat dans le registre R1: tout cela doit être codé sous forme binaire.

Assembleur

Un programme en langage machine est donc une suite très très longue de "1" et de "0": sur les dizaines de milliers de "1" et de "0" qui composent un programme en langage machine (même de taille modeste), une seule erreur, et votre programme ne fonctionne pas... imaginer la difficulté pour retrouver l'erreur !

Programmer en langage machine est donc extrêmement difficile. Pour pallier cette difficulté, les informaticiens ont remplacé les codes binaires abscons par des symboles mnémoniques (plus facile à retenir qu'une suite de "1" et de "0").

Nous avons toujours des instructions machines du genre additionne le nombre 125 et la valeur située dans le registre R2 , range le résultat dans le registre R1, mais au lieu d'écrire "11100010100000100001000001111101", nous pourrons écrire ADD R1,R2,#125.
Dans les 2 cas, la signification est identique: "additionne le nombre 125 et la valeur située dans le registre R2 , range le résultat dans le registre R1".

Le processeur est uniquement capable d'interpréter le langage machine, un programme appelé "assembleur" assure donc le passage de ADD R1,R2,#125 à 11100010100000100001000001111101.

Par extension, on dit que l'on programme en assembleur quand on écrit des programmes avec ces symboles mnémoniques à la place de suites de "0" et de "1". Aujourd'hui plus personne n'écrit de programme directement en langage machine, en revanche l'écriture de programme en assembleur est encore chose relativement courante.