Registre de processeur
emplacement de mémoire interne à un processeur. De Wikipédia, l'encyclopédie libre
emplacement de mémoire interne à un processeur. De Wikipédia, l'encyclopédie libre
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.
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 interne (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]. Un processeur peut contenir plusieurs centaines de registres, mais, à titre d’exemple, un processeur Intel 32 bits en contient seize[2]. Chaque registre a une capacité de 8, 16, 32 ou 64 bits[3] (couramment la taille d’un bus).
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.
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 :
Un processeur contient souvent des registres spécialisés, présents en un seul exemplaire. On trouve parmi ceux-ci :
Sur certaines architectures, l'ensemble ou une partie des registres spécialisés sont remplacés par des registres généraux (en anglais, general-purpose register ou GPR) interchangeables (parfois notés R0, R1, etc.). Ceux-ci peuvent stocker indifféremment des adresses, des entiers, des 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'écrire ou de 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).
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 une manipulation peut s'effectuer de diverses manières au niveau du code machine.
Certains registres n'ont pas besoin d'être sélectionnés. 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 branchement. 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.
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 différente attribuée à chaque registre. Celle-ci sera intégrée à toutes les instructions devant manipuler ce registre, afin de sélectionner celui-ci.
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.
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.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.