RFLAGS - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

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.).

Vue d'ensemble du registre RFLAGS

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 :

  • RFLAGS : 64 bits, bits 63 à 0.
  • EFLAGS : 32 bits, bits 31 à 0.
  • FLAGS : 16 bits, bits 15 à 0.

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.

Les 64 bits du registre RFLAGS et les noms de ses drapeaux.
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.

Instructions affectant RFLAGS

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 :

  • LAHF : les bits 0 à 15 de RFLAGS (c'est-à-dire FLAGS) sont mis dans le registre AH (opération de lecture).
  • SAHF : le contenu du registre AH est placé dans les bits 0 à 15 de RFLAGS (opération d'écriture).
  • POPF : le mot de 16 bits actuellement sur le haut de la pile est placée dans les bits 0 à 15 de RFLAGS (opération d'écriture) - en mode 64 bits, l'instruction se comporte comme POPFQ.
  • POPFD : le double mot (32 bits) actuellement en haut de la pile est placé dans RFLAGS (opération d'écriture) - en mode 64 bits, l'instruction se comporte comme POPFQ.
  • POPFQ : le quadruple mot (64 bits) actuellement en haut de la pile est placé dans RFLAGS (opération d'écriture).
  • PUSHF : les bits 0 à 15 de RFLAGS sont poussés sur la pile (opération de lecture) - en mode 64 bits, l'instruction se comporte comme PUSHFQ.
  • PUSHFD : le contenu de RFLAGS (32 bits) est poussé sur la pile (opération de lecture) - en mode 64 bits, l'instruction se comporte comme PUSHFQ.
  • PUSHFQ : le contenu de RFLAGS (64 bits) est poussé sur la pile (opération de lecture).
Page générée en 0.075 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise