Registre de processeur

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Registre.

Un registre est un emplacement de mémoire interne à un processeur. Les registres se situent au sommet de la hiérarchie mémoire : il s'agit de la mémoire la plus rapide d'un ordinateur, mais dont le coût de fabrication est le plus élevé car la place dans un microprocesseur est limitée. Leur capacité dépasse donc rarement quelques dizaines d'octets.

Une architecture externe de processeur définit un ensemble de registres, dits architecturaux, qui sont accessibles par son jeu d'instructions. Ils constituent l'état externe (architectural) du processeur. Cependant, une réalisation donnée d'une architecture externe (microarchitecture) peut contenir un ensemble différent de registres, qui sont en général plus nombreux que les registres architecturaux. Ils stockent non seulement l'état externe du processeur, mais aussi celui de sa microarchitecture : valeurs opérandes, indicateurs, etc. Ce dernier état est utilisé exclusivement par la microarchitecture, et n'est pas visible par le jeu d'instructions (architecture)[1].

La plupart des architectures modernes sont qualifiées de load-store : les programmes transfèrent d'abord des données de la mémoire centrale vers des registres, puis effectuent des opérations sur ces registres, et enfin transfèrent le résultat en mémoire centrale.

Utilisation des registres[modifier | modifier le code]

Les registres d'un processeur Motorola 68000.

Registres spécialisés[modifier | modifier le code]

Sur de nombreux processeurs, les registres sont spécialisés et ne peuvent contenir qu'un type bien précis de données.

On rencontre souvent les classes de registres suivantes :

  • les registres entiers, chargés de stocker des nombres entiers (et éventuellement des adresses) ;
  • les registres flottants, qui stockent des nombres à virgule flottantes ;
  • les registres d'adresses : sur certains processeurs, les adresses mémoires à manipuler sont placées dans ces registres dédiés ;
  • les registres d'Index, qui servaient à faciliter certains calculs d'adresses sur de vielles architectures ;
  • les registres à prédicats, des registres qui stockent des résultats de comparaisons et d'instructions de tests diverses ;

Un processeur contient souvent des registres spécialisés, présents en un seul exemplaire. On trouve parmi ceux-ci :

  • compteur ordinal (CO) : indique l'emplacement de la prochaine instruction à être exécutée (synonymes : compteur de programme, pointeur d'instruction) ;
  • registre d'état (PSW pour Processor Status Word) : décrit l'état du processeur ; il est le plus souvent interprété bit à bit, chaque bit représentant un drapeau ;
  • pointeur de pile : indique la position du prochain emplacement disponible dans la pile mémoire ;

Registres généraux[modifier | modifier le code]

Sur certaines architectures, tout ou partie des registres spécialisés sont remplacés par un ensemble de registres d'usage général interchangeables (parfois notés R0, R1, etc.). Ceux-ci peuvent stocker indifféremment adresses, entiers, flottants, etc. Par exemple, le Motorola 68000 dispose de 8 registres de données banalisés (D0 à D7) et de 8 registres d'adresses (A0 à A7, banalisés sauf A7 qui sert de pointeur de pile).

Sur la majorité des processeurs, ces registres généraux ne sont pas les seuls registres du processeur, qui contient aussi des registres spécialisés comme un compteur ordinal ou un registre d'état. Mais sur certains processeurs, il se peut que ces registres soient malgré tout des registres généraux, adressables comme tous les autres registres. Il devient alors possible d'aller écrire ou lire directement leur contenu sans restrictions. Cela peut servir pour faciliter l'implémentation des branchements indirects ou relatifs (si le compteur ordinal devient un registre général).

Référencement des registres[modifier | modifier le code]

Sur les processeurs disposant de plusieurs registres de même type (des registres entiers, flottants ou généraux), certaines instructions peuvent manipuler indifféremment certains registres. Dans ce cas, elles doivent préciser quel est le registre à manipuler. Sélectionner un registre pour manipulation peut s'effectuer de diverses manières au niveau du code machine.

Registres non-référençables[modifier | modifier le code]

Certains registres n'ont pas besoin d'être sélectionnées. On les manipule implicitement avec certaines instructions. Le seul moyen de manipuler ces registres est de passer par une instruction appropriée. C'est le cas pour le Program Counter : à part sur certains processeurs vraiment très rares, on ne peut modifier son contenu qu'en utilisant des instructions de branchements. Idem pour le registre d'état, manipulé implicitement par les instructions de comparaisons et de test, et certaines opérations arithmétiques. Idem aussi pour le stack pointer sur certaines architectures.

Noms de registres[modifier | modifier le code]

Autre possibilité : numéroter certains registres. Ce numéro est l'équivalent des adresses pour la mémoire RAM. Ce numéro est ce qu'on appelle un nom de registre. Ce n'est rien d'autre qu'une suite de bits attribuée à chaque registre, chaque registre se voyant attribuer une suite de bits différente. Celle-ci sera intégrée à toutes les instructions devant manipuler ce registre, afin de sélectionner celui-ci

Registres adressables[modifier | modifier le code]

Il est possible de faire correspondre les registres avec des adresses mémoire, typiquement à partir de 0 (c’est-à-dire que les cases mémoire d'adresse 0 à 31 pourront correspondre aux registres R0 — R31). C'est par exemple le cas des 16 registres du PDP-10. Les programmeurs astucieux désirant optimiser le temps d'exécution d'une boucle de code avaient donc la possibilité de la stocker dans les registres. Cette méthode évidemment marginale et dépendante de l'architecture de l'ordinateur montre la versatilité des registres généraux.

Réalisation physique[modifier | modifier le code]

Divers procédés ont été retenus pour la réalisation des registres, notamment de la RAM statique, d'abord sous forme de bascules individuelles, puis plus récemment sous forme de bancs de registres.

Notes et références[modifier | modifier le code]

  1. B. Shriver et B. Smith, The Anatomy of a High-Performance Microprocessor: A Systems Perspective. The IEEE Computer Society, 1998, p. 88.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]