RFLAGS - Définition

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

Catégories de drapeaux

On distingue trois catégories différentes de drapeaux à l'intérieur du registre RFLAGS.

  • Les drapeaux d'état.
  • Le drapeau de contrôle.
  • Les drapeaux système.

Drapeaux d'état

Les bits 0, 2, 4, 6, 7 et 11 du registre RFLAGS indiquent les résultats d'opérations arithmétiques résultant d'instructions telles que ADD, DIV, MUL, SUB, etc.

  • CF (bit 0) Carry Flag (Drapeau de retenue) : Ce drapeau est armé si une opération arithmétique génère une retenue sur le bit le plus significatif (bit de poids fort). Le drapeau est désarmé dans les autres cas. Ce drapeau indique ainsi une condition de débordement en arithmétique entière non signée. Il est aussi utilisé pour l'arithmétique en précision multiple.
  • PF (bit 2) Parity Flag (Drapeau de parité) : Armé si l'octet de poids faible (octet le moins significatif) du résultat généré après une opération arithmétique contient un nombre pair de bits à 1. Le drapeau est désarmé dans les autres cas.
  • AF (bit 4) Adjust Flag (Drapeau d'ajustement) : Armé si le résultat d'une opération arithmétique génère un résultat provoquant une retenue sur le troisième bit. Le drapeau est désarmé dans les autres cas. Ce drapeau n'est utile que dans l'utilisation du codage BCD.
  • ZF (bit 6) Zero Flag (Drapeau zéro) : Armé si le résultat d'une opération arithmétique vaut zéro. Le drapeau est désarmé dans les autres cas.
  • SF (bit 7) Sign Flag (Drapeau de signe) : Armé si le résultat d'une opération arithmétique possède un bit de poids fort (bit le plus significatif) à 1, indiquant ainsi un nombre signé. Le drapeau est désarmé dans les autres cas (indiquant possiblement un résultat non signé, c'est-à-dire positif).
  • OF (bit 11) Overflow Flag (Drapeau de débordement) : Armé si le résultat constitue un nombre positif ou négatif (en excluant le bit de signe) ne pouvant tenir dans l'opérande de destination. Le drapeau est désarmé dans les autres cas. Ce drapeau indique une condition de débordement pour les opérations arithmétiques signées sur les entiers.

Instructions affectées par les drapeaux d'état

Les instructions conditionnelles suivantes utilisent un ou plusieurs des drapeaux d'état comme condition pour les branchements conditionnels, l'armement d'octets ou les conditions de fin de boucle :

  • Jcc : Jump on condition code cc (par exemple les instructions JE, JO, JNC, etc.).
  • SETcc : Set on condition code cc (par exemple les instructions SETNE, SETNO, etc.).
  • LOOPcc : Loop on condition code cc (par exemple les instructions LOOPE, LOOPNZ, etc.)
  • CMOVcc : Conditional move on condition code cc (par exemple les instructions CMOVNZ, CMOVNO, etc.)

Instructions modifiant les drapeaux d'état

Seul le drapeau CF peut être modifié directement via certaines instructions. Ces instructions sont les suivantes :

  • CMC
  • CLC
  • STC

Les instructions suivantes, travaillant sur des bits, peuvent copier un bit spécifique directement dans le drapeau CF :

  • BT
  • BTC
  • BTR
  • BTC

Drapeau de contrôle

Le bit 10 du registre RFLAGS est le seul drapeau de contrôle (aussi appelé drapeau de direction).

  • DF (bit 10) Direction Flag (Drapeau de direction) : Ce drapeau est utilisé conjointement avec les instructions opérant sur les chaînes de caractères. Lorsque le drapeau DF est armé, les adresses des chaînes de caractères sont auto décrémentées (allant ainsi des adresses les plus hautes vers les adresses les plus basses). Lorsque le drapeau est désarmé, les adresses des chaînes de caractères sont auto incrémentées (allant des adresses les plus basses vers les adresses les plus hautes). Aucun résultat d'opération ne permet d'armer ou de désarmer le drapeau de direction. Seules deux instructions permettent de spécifier explicitement son état.

Instructions affectées par le drapeau de contrôle

Les instructions travaillant sur les chaînes de caractères sont les seules instructions affectées par le drapeau de direction. Ces instructions sont les suivantes :

  • CMPS
  • LODS
  • MOVS
  • SCAS
  • STOS

Instructions modifiant le drapeau de contrôle

Les instructions permettant de modifier directement le drapeau de direction sont les instructions suivantes :

  • STD (pour Set Direction Flag) : Arme le drapeau de direction.
  • CLD (pour Clear Direction Flag): Désarme le drapeau de direction.

Les drapeaux système

Les drapeaux système du registre RFLAGS sont contrôlés par le système d'exploitation ou les opérations de surveillance système. En temps normal un programme applicatif ne devrait pas modifier l'état de ces drapeaux. Les bits 12 et 13 ne sont pas considérés comme deux drapeaux, mais comme un champ de 2 bits (le champ IOPL).

  • TF (bit 8) Trap Flag (Drapeau de trappe) : Lorsqu'il est armé, ce drapeau permet le débogage en mode pas à pas, c'est-à-dire instruction par instruction. Lorsqu'il est désarmé, le mode pas à pas est inopérant (fonctionnement normal).
  • IF (bit 9) Interrupt Flag (Drapeau d'interruption) : Ce drapeau contrôle la façon dont le processeur répond aux requêtes d'interruptions masquables (c'est-à-dire désactivables). Lorsqu'il est armé, le processeur peut répondre à toutes les interruptions, dans le cas contraire (drapeau IF désarmé), le processeur ne pourra répondre qu'aux interruptions non masquables.
  • IOPL (bits 12 et 13) Input / Output privilege level field (Champ de niveau de privilège d'entrée et de sortie) : Ce champ indique le niveau de privilège en entrée/sortie (E/S) du programme ou de la tâche courante. Le niveau de privilège courant du programme ou de la tâche en cour doit être égal ou inférieur au niveau de privilège d'E/S pour accéder à l'espace d'adressage. Ce champ ne peut être modifié qu'avec un niveau de privilège égal à 0 (niveau de privilège le plus haut). Ce concept de niveaux de privilèges est implémenté au travers des anneaux de protection.
  • NT (bit 14) Nested task Flag (Drapeau de tâche chaînée) : Ce drapeau contrôle l'enchaînement des tâches interrompues et appelées. Il indique ainsi, lorsqu'il est armé, si la tâche courante est liée à une tâche parent (la tâche qui s'exécutait auparavant) via l'instruction CALL ou par le biais d'une interruption. Lorsqu'il est désarmé, ce drapeau indique simplement que la tâche courante n'a pas de tâche parente.
  • RF (bit 16) Resume Flag (Drapeau de redémarrage) : Ce drapeau contrôle la réponse du processeur aux exceptions de débogage. Il assure notamment que le débogage en pas à pas (voir drapeau TF) n'intervient qu'une seule fois par instruction.
  • VM (bit 17) Virtual-8086 mode Flag (Drapeau de mode virtuel 8086) : Lorsque ce drapeau est armé le processeur est en mode virtuel 8086. Lorsqu'il est désarmé, le processeur revient en mode protégé.
  • AC (bit 18) Alignment Check Flag (Drapeau de vérification d'alignement) : Ce drapeau, lorsqu'il est armé, assure une vérification d'alignement des références mémoire. Lorsqu'il est désarmé, aucune vérification d'alignement n'est effectuée. Ce drapeau nécessite d'armer conjointement le bit AM du registre de contrôle CR0.
  • VIF (bit 19) Virtual Interrupt Flag (Drapeau d'interruption virtuelle) : Ce drapeau est une image virtuelle du drapeau IF. Il est utilisé en conjonction avec le drapeau VIP (bit 20).
  • VIP (bit 20) Virtual Interrupt Pending Flag (Drapeau d'interruption virtuelle en attente) : Lorsqu'il est armé ce drapeau indique qu'une interruption est en attente. Lorsqu'il est désarmé ce drapeau indique qu'aucune interruption n'est en attente. Seuls les programmes peuvent armer ou désarmer ce drapeau, le processeur ne fait que le lire. À utiliser conjointement avec le drapeau VIF (bit 19).
  • ID (bit 21) Identification Flag (Drapeau d'indentification) : Si un programme a la possibilité d'armer ou de désarmer ce drapeau, cela indique que le processeur supporte l'utilisation de l'instruction CPUID.

Instructions affectées par les drapeaux système

D'une manière générale les drapeaux système ne changent pas la manière dont s'exécutent les instructions, ils n'affectent que le fonctionnement général du système d'exploitation. Toutefois, le champ IOPL peut par exemple permettre d'utiliser certaines instructions à différents niveaux de protections.

Instructions modifiant les drapeaux système

Seul le champ IOPL (bits 12 et 13) peut être affecté directement par des instructions. Ces instructions ne sont utilisables que si le niveau de privilège est le plus élevé (niveau 0) :

  • IRET
  • POPF
Page générée en 0.218 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