
Un registre de processeur est une zone de stockage rapidement accessible au processeur d'un ordinateur . Les registres sont généralement constitués d'une petite quantité de mémoire vive , bien que certains registres aient des fonctions matérielles spécifiques et puissent être en lecture seule ou en écriture seule. En architecture informatique , les registres sont généralement adressés par des mécanismes autres que la mémoire principale , mais peuvent dans certains cas se voir attribuer une adresse mémoire, par exemple pour les DEC PDP-6 / PDP-10 et ICT 1900.
Presque tous les ordinateurs, qu'ils soient à architecture de type chargement/stockage ou non, chargent des données depuis une mémoire plus grande vers des registres où elles sont utilisées pour des opérations arithmétiques , des opérations bit à bit et d'autres opérations, et sont manipulées ou testées par les instructions machine . Les données manipulées sont ensuite souvent stockées dans la mémoire principale, soit par la même instruction, soit par une instruction ultérieure. Les processeurs modernes utilisent une mémoire vive (RAM) statique ou dynamique comme mémoire principale, cette dernière étant généralement accessible via un ou plusieurs niveaux de cache .
Les registres du processeur se situent généralement au sommet de la hiérarchie mémoire et offrent le moyen le plus rapide d'accéder aux données. Ce terme désigne habituellement l'ensemble des registres directement encodés dans une instruction, conformément au jeu d'instructions . Cependant, les processeurs modernes hautes performances possèdent souvent des copies de ces « registres architecturaux » afin d'améliorer les performances grâce au renommage des registres , permettant ainsi l'exécution parallèle et spéculative . L'architecture x86 moderne a intégré ces techniques vers 1995 avec la sortie des Pentium Pro , Cyrix 6x86 , Nx586 et AMD K5 .
Lorsqu'un programme informatique accède de manière répétée aux mêmes données, on parle de localité de référence . Le stockage des valeurs fréquemment utilisées dans des registres peut être crucial pour les performances d'un programme. L'allocation des registres est effectuée soit par le compilateur lors de la génération du code , soit manuellement par un programmeur en langage assembleur .
bits : registre 8 bits , 32 bits , 64 bits , 128 bits , etc. Dans certains jeux d’instructions , les registres peuvent fonctionner selon différents modes, en divisant leur mémoire en sous-ensembles (un registre 32 bits en quatre sous-ensembles 8 bits, par exemple) permettant de charger et de traiter simultanément plusieurs données (vecteur ou tableau unidimensionnel ). Cette fonctionnalité est généralement implémentée en ajoutant des registres supplémentaires qui mappent leur mémoire dans un registre plus grand. Les processeurs capables d’exécuter une seule instruction sur plusieurs données sont appelés processeurs SIMD .Types
Un processeur contient souvent plusieurs types de registres, qui peuvent être classés selon les types de valeurs qu'ils peuvent stocker ou les instructions qui opèrent sur eux :
- Les registres accessibles à l'utilisateur peuvent être lus ou écrits par des instructions machine. La division la plus courante de ces registres consiste à distinguer les registres de données et les registres d'adresse.
- Les registres de données peuvent contenirdes valeurs de données numériquestelles quedes entierset, dans certaines architectures,des nombres à virgule flottante, ainsi quedes caractères, de petitstableaux de bitset d'autres données.
- Sur certains ordinateurs anciens, un registre de données spécial appelé accumulateur est utilisé implicitement pour de nombreuses opérations. On peut citer comme exemples l'IBM 704 , l' IBM 709 et ses successeurs, le PDP-1 , le PDP-4 / PDP-7 / PDP-9 / PDP-15 , le PDP-5 / PDP-8 , le HP 2100 et l' Intel 8080 .
- des adresseset sont utilisés par les instructions qui accèdent indirectementàla mémoire principale.
- Certains processeurs possèdent des registres qui ne peuvent contenir qu'une adresse ou qu'une valeur numérique (dans certains cas, un registre d'index dont la valeur est ajoutée par décalage à partir d'une adresse). D'autres processeurs permettent de stocker les deux types de données. Il existe une grande variété de modes d'adressage possibles , utilisés pour spécifier l'adresse effective d'un opérande.
- Les pointeurs de pile et de cadre servent à gérer la pile d'appels . Plus rarement, d'autres piles de données sont adressées par des registres d'adresse dédiés (voir machine à pile ).
- Registres à usage général (fichier de registresestunifiéafin que les GPR puissent également stocker des nombres à virgule flottante.
- Les registres constants contiennent des valeurs en lecture seule telles que zéro, un oupi.
- au traitement vectorieleffectué parSIMD(Single Instruction, Multiple Data).
- Les registres d'état contiennentdes valeurs de véritésouvent utilisées pour déterminer si une instruction doit ou non être exécutée.
- Les registres à usage spécifique ( SPR ) contiennent certains éléments de l' état du programme ; ils comprennent généralement le compteur de programme , également appelé pointeur d'instructions, et le registre d'état . Le compteur de programme et le registre d'état peuvent être combinés dans un registre d'état du programme (PSW). Le pointeur de pile mentionné précédemment est parfois également inclus dans ce groupe. Les microprocesseurs embarqués, tels que les microcontrôleurs , peuvent également comporter des registres de fonctions spécifiques correspondant à des éléments matériels spécialisés.
- Les registres de contrôle servent à définir le comportement des composants du système tels que leprocesseur.
- Les registres spécifiques au modèle (également appelésregistres machine) stockent des données et des paramètres liés au processeur lui-même. Leur signification étant liée à la conception d'un processeur particulier, ils ne sont généralement pas standardisés d'une génération de processeurs à l'autre.
- Registres de plage de type de mémoire (MTRR)
- Les registres de données peuvent contenirdes valeurs de données numériquestelles quedes entierset, dans certaines architectures,des nombres à virgule flottante, ainsi quedes caractères, de petitstableaux de bitset d'autres données.
- registre d'instructions contient l'instruction en cours d'exécution.
- Registres liés à la récupération d'informations depuis la RAM , un ensemble de registres de stockage situés sur des puces distinctes de celles du processeur :
- Registre tampon mémoire (MBR), également connu sous le nomde registre de données mémoire(MDR)
- registre d'adresse mémoire (MAR)
Les registres matériels sont similaires, mais se trouvent en dehors des processeurs.
Dans certaines architectures (comme SPARC et MIPS ), le premier ou le dernier registre du fichier de registres d'entiers est un pseudo-registre : il est configuré pour toujours renvoyer zéro à la lecture (principalement pour simplifier les modes d'indexation) et ne peut pas être modifié. Dans Alpha , ce principe s'applique également au fichier de registres à virgule flottante. De ce fait, on indique souvent que les fichiers de registres contiennent un registre de plus que le nombre réellement utilisable ; par exemple, on indique 32 registres alors que seuls 31 correspondent à la définition d'un registre.
Exemples
Le tableau suivant présente le nombre de registres dans plusieurs architectures de processeurs courantes. Bien que toutes les architectures listées ci-dessous diffèrent, la plupart reposent sur une configuration de base appelée architecture de von Neumann , proposée initialement par le mathématicien hungaro-américain John von Neumann . Il est également à noter que le nombre de registres sur les GPU est bien supérieur à celui des CPU.
efficacité du code généré par les compilateurs optimisants . Le nombre de Strahler d'un arbre d'expressions indique le nombre minimal de registres requis pour évaluer cet arbre.