Mémoire et langage machine

Signaler

En son cœur, la machine effectue des calculs à partir d’instructions simples en binaire qui peuvent être directement traduites dans un langage (assembleur) qui prend, traite et remplit des cases mémoires.

I. L’organisation de la mémoire

1) Les différents types de mémoire

Il existe de nombreux mécanismes de mémoire qui se distinguent par leur coût, leur vitesse, leur durabilité (volatile ou permanente), leur mode d’accès (par adresse ou dans l’ordre de leur rangement). En règle générale, plus une mémoire est efficace, plus elle est chère.

On parle de mémoire vive quand le contenu est perdu lorsque le courant s’arrête : il s’agit des registres, des mémoires cache, de la mémoire centrale. Les autres mémoires sont persistantes : les SSD (Solid State Drive), les disques magnétiques.

Il existe une troisième catégorie, la ROM (Read Only Memory) qui, comme son nom l’indique, ne fonctionne (en principe) qu’en lecture seule.

2) Les registres

À noter

La plupart des PC actuels ont des registres de taille 64 bits. Ils sont accessibles via le jeu d’instructions.

Un registre est un emplacement mémoire interne au processeur pour stocker des opérandes et des résultats intermédiaires lors des opérations effectuées dans l’UAL notamment. Leur capacité, leur nombre et leurs rôles varient selon les processeurs.

3) Mémoires centrales et mémoire cache

La mémoire centrale est une mémoire vive qui contient les programmes en cours et les données qu’ils manipulent. Elle est de taille importante (plusieurs Go). Elle est organisée en cellules qui contiennent chacune une donnée ou une instruction repérées par un entier : une adresse mémoire. Le temps d’accès à chaque cellule est le même : on parle donc de mémoire à accès aléatoire (RAM : Random Access Memory) mais il est plus précis de parler de mémoire à accès direct.

Mot clé

Il s’agit le plus souvent de mémoire de type RAM statique (SRAM) plus rapide mais plus chère que la mémoire de type RAM dynamique (SDRAM, DDR…) utilisée dans la mémoire centrale.

Pour pouvoir adapter la très grande vitesse du processeur à celle plus faible de la mémoire centrale, on place entre eux une mémoire plus rapide, la mémoire cache, qui contient les instructions et données en cours d’utilisation car, la plupart du temps, les données qui viennent d’être utilisées ont une probabilité plus grande d’être réutilisées que d’autres.

II. Jeu d’instructions

1) Nature des instructions

Un programme écrit dans un langage de haut niveau (plus proche du langage « humain », Python par exemple, mais éloigné du langage machine, dit de bas niveau) dépend le moins possible du processeur et du système d’exploitation utilisés.

Chaque processeur a son langage. Une chaîne de production permet de passer du langage de haut niveau au langage machine écrit en binaire correspondant à un jeu d’instructions spécifique compris par la machine. Ces jeux ont toutefois des structures communes.

Chaque instruction contient un code correspondant à l’opération à effectuer et aux opérandes. Une opération peut être :

  • une opération de transfert entre les registres et la mémoire par exemple ;
  • une opération de calcul arithmétique ou logique (addition, comparaison…) ;
  • un branchement via des sauts vers une certaine adresse selon le résultat de l’opération précédente (branchement conditionnel) ou non (inconditionnel).

2) Assembleur

Il est parfois utile de programmer au plus bas de la machine. On utilise l’assembleur, un programme qui permet de passer directement du langage machine à un langage dit d’assemblage plus lisible pour l’être humain :

  • le jeu d’instruction est exactement identique à celui du langage machine ;
  • les opérations sont désignées par des mnémoniques comme par exemple add (addition), lw (charge mot load word), sw (range mot store word)… ;
  • les registres ont des noms : t0, t1, a0… ;
  • les constantes sont exprimables en hexadécimal, en binaire… ;
  • les branchements se font via des étiquettes, par exemple :

PB_Bac_05230_numerique1_TT_p171-212_C06_Groupe_Schema_0

signifie que si les contenus des registres t1 et t0 sont différents alors il faut aller à la ligne repérée par _plusLoin.

Exemple : Dans le langage d’assemblage d’un processeur MIPS 32 bits, pour additionner dans le registre t0 la somme des valeurs contenues dans les registres a0 et v0,l’instruction :

PB_Bac_05230_numerique1_TT_p171-212_C06_Groupe_Schema_1

est traduite en langage machine par :

PB_Bac_05230_numerique1_TT_p171-212_C06_Groupe_Schema_2