Le registre RFLAGS - aussi dit registre de drapeaux - est un registre spécifique des processeurs de la famille x86-64 (64 bits). Il est compatible avec les registres EFLAGS et FLAGS hérités des familles x86 (32 bits) et précédente (16 bits).
Il permet de fixer et de connaître l'état du processeur à tout moment grâce aux différents bits qui le composent. Ce registre permet ainsi d'avoir à tout instant l'état résultant d'une instruction ayant été exécutée par le processeur, la plupart des instructions des processeurs x86 affectant ce registre.
L'état des différents bits (les drapeaux) du registre RFLAGS permet au processeur de prendre des décisions, par exemple au niveau des branchements conditionnels (sauts et boucles) ou après une opération arithmétique (retenue ou débordement, etc.).
Le registre RFLAGS est constitué de 64 bits et n'est disponible que sous les processeurs 64 bits (x86-64). Il est toutefois compatible rétroactivement avec les registres EFLAGS (disponible sur les processeurs x86 32 bits) et FLAGS (disponible sur les processeurs 16 et 32 bits). Il se compose comme suit :
En cas d'exécution en mode de compatibilité 32 bits (lorsque le processeur 64 bits exécute du code 32 bits) seul EFLAGS et FLAGS sont accessibles.
RFLAGS | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bits | 63..32 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13..12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Drapeaux | - | - | - | - | - | - | - | - | - | - | - | ID | VIP | VIF | AC | VM | RF | 0 | NT | IOPL | OF | DF | IF | TF | SF | ZF | 0 | AF | 0 | PF | 1 | CF |
Nota Bene : Les bits 63 à 32, 31 à 22, 15, 5, 3, 1 (en gris sur le tableau) sont des bits réservés, leur utilisation et fonctionnement est inconnu. Les bits 15, 5, 3, 1 ont une valeur fixe donnée dans le tableau ci-dessus.
L'on dit d'un drapeau qu'il est armé lorsqu'il est à 1 et désarmé lorsqu'il est à 0.
Outre les instructions permettant d'armer ou de désarmer un seul bit (voire deux pour le champ IOPL) du registre RFLAGS, certaines instructions permettent de lire voir d'écrire tout ou partie du registre RFLAGS. Ces instructions sont :