Article de reference

Registre d'état

Un registre d'état , un registre d'indicateurs ou un registre de codes de condition ( CCR ) est un ensemble de bits d'indicateurs d'état pour un processeur . Parmi ces registres...

Un registre d'état , un registre d'indicateurs ou un registre de codes de condition ( CCR ) est un ensemble de bits d'indicateurs d'état pour un processeur . Parmi ces registres, on peut citer le registre FLAGS dans l' architecture x86 , les indicateurs dans le registre de mots d'état du programme (PSW) dans l' architecture IBM System/360 via z/Architecture et le registre d'état du programme d'application (APSR) dans l' architecture ARM Cortex-A .

Le registre d'état est un registre matériel qui contient des informations sur l'état du processeur . Les bits individuels sont implicitement ou explicitement lus et/ou écrits par les instructions du code machine exécutées sur le processeur. Le registre d'état permet à une instruction d'agir en fonction du résultat d'une instruction précédente.

En règle générale, les indicateurs du registre d'état sont modifiés en fonction des effets des opérations arithmétiques et de manipulation de bits. Par exemple, un bit Z peut être défini si le résultat de l'opération est nul et effacé s'il est différent de zéro. D'autres classes d'instructions peuvent également modifier les indicateurs pour indiquer l'état. Par exemple, une instruction de chaîne peut le faire pour indiquer si l'instruction s'est terminée parce qu'elle a trouvé une correspondance/non-correspondance ou parce qu'elle a trouvé la fin de la chaîne. Les indicateurs sont lus par une instruction conditionnelle ultérieure de sorte que l'action spécifiée (selon le processeur, un saut, un appel, un retour, etc.) ne se produit que si les indicateurs indiquent un résultat spécifié de l'instruction précédente.

Certaines architectures de processeur, comme les processeurs MIPS et Alpha , n'utilisent pas de registre d'indicateurs dédié. D'autres ne définissent et/ou ne lisent pas implicitement les indicateurs. Ces machines ne transmettent pas du tout d'informations d'état implicites entre les instructions, ou les transmettent dans un registre à usage général explicitement sélectionné.

Un registre d'état peut souvent également contenir d'autres champs, tels que des indicateurs plus spécialisés, des bits d'activation d'interruption et des types d'informations similaires. Pendant une interruption, l'état du thread en cours d'exécution peut être préservé (et rappelé ultérieurement) en stockant la valeur actuelle du registre d'état avec le compteur de programme et d'autres registres actifs dans la pile de la machine ou dans une autre zone réservée de la mémoire.

Drapeaux communs

Il s'agit d'une liste des indicateurs de registre d'état du processeur les plus courants, implémentés dans presque tous les processeurs modernes.

Autres drapeaux

Sur certains processeurs, le registre d’état contient également des indicateurs tels que ceux-ci :

Architectures CPU sans indicateurs arithmétiques

Les indicateurs d'état permettent à une instruction d'agir en fonction du résultat d'une instruction précédente. Dans les processeurs pipeline , tels que les processeurs superscalaires et spéculatifs , cela peut créer des dangers qui ralentissent le traitement ou nécessitent du matériel supplémentaire pour les contourner.

Certains traitements de texte à instructions très longues se passent des indicateurs d'état. Une seule instruction exécute un test et indique sur quel résultat de ce test effectuer une action, comme Comparer a avec b et Aller à c si égal. Le résultat du test n'est pas enregistré pour les instructions suivantes.

Une autre alternative au registre d'état consiste à ce que les instructions du processeur déposent les informations d'état dans un registre à usage général lorsque le programme le demande. MIPS , AMD 29000 , DEC Alpha et RISC-V sont des exemples d'architectures qui fournissent des instructions de comparaison qui stockent le résultat de la comparaison dans un registre à usage général, sous la forme d'un seul bit ou d'une valeur numérique de 0 ou 1. Les branches conditionnelles agissent en fonction de la valeur du registre à usage général.

En général, les instructions de comparaison testent l'égalité ou la grandeur signée/non signée. Pour tester d'autres conditions, un programme utilise une formule d'équivalence. Par exemple, MIPS n'a pas de « bit de retenue », mais un programme effectuant une addition de plusieurs mots peut tester si une addition d'un seul mot de registres a débordé en testant si la somme est inférieure à un opérande :

# alow = blow + clow 
addu alow , blow , clow # définir tmp = 1 si alow < clow, sinon 0 sltu tmp , alow , clow addu ahigh , bhigh , chigh addu ahigh , ahigh , tmp

L' sltuinstruction est définie tmpsur 1 ou 0 en fonction de la comparaison spécifiée de ses deux autres opérandes. (Ici, le registre à usage général tmpn'est pas utilisé comme registre d'état pour contrôler un saut conditionnel ; au contraire, la valeur possible de 1, indiquant le report de l'addition d'ordre inférieur, est ajoutée au mot d'ordre supérieur.)

Ce schéma devient moins pratique lors de l'ajout de trois mots ou plus, car il y a deux ajouts lors du calcul de b + c + tmp, chacun d'eux pouvant générer une retenue, qui doit être détectée avec deux sltuinstructions. Heureusement, ces deux retenues peuvent être ajoutées l'une à l'autre sans risque de débordement, de sorte que la situation se stabilise à cinq instructions par mot ajouté.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index