LE REGISTRE EFLAGS

Le registre des drapeaux contient des informations importantes qui déterminent le choix de l'exécution de tel ou tel programme. Toutes les instructions de saut utilisent les bits dit d' ETAT. Ci-après les différentes catégories de drapeaux :

Un "flag" (drapeau) en programmation informatique est l'interprétation d'un bit. Un drapeau est armé lorsqu'il prend la valeur de 1 et désarmé lorsqu'il prend la valeur de 0.

Seuls les bits d'Etat et de Contrôle seront expliqués dans ce cours.

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
R R R R R R R R R R ID VIP VIF AC VM RF R NT IOPL OF DF IF TF SF ZF R AF R PF R CF

CF : CARRY FLAG (bit 0 valeur 1)

Ce bit, ne sert que dans l'arithmétique non signé, et, est activé lorsqu'une opération arithmétique telle que : ADD, SUB, MUL, DIV donne un résultat soit, trop grand ou trop petit par rapport à la plage de valeurs de la destination. le registre 8 bits al à une plage de valeurs allant de 0...255, si le programme réalise une opération qui donne un résultat tel que 256 ou -1 alors CF est armé. Donc, il indique un dépassement de capacité.

Dans l'exemple ci-après, le programme efface le bit CF puis place dans le registre al la valeur de 0FFh (255) et ajoute à ce dernier la valeur de 1h ce qui donne un résultat trop grand que al ne peut stocker.

clc
mov al, 0FFh
add al, 1 ;CF armé

Dans l'exemple ci-dessous, le programme efface le bit CF puis met le registre al à 0h et soustrait à ce dernier la valeur de 1h ce qui engendre un résultat trop petit que ne peut stocker al.

clc
xor al, al
sub al, 1 ;CF armé

PF : PARITY FLAG (bit 2 valeur 4h)

Ce bit est armé lorsqu'une opération arithmétique telle que : ADD, SUB, MUL, DIV crée un résultat dont les 8 bits de poids faible ont un nombre pair de bits armés ou lorsqu'ils sont tous désarmés.

Dans l'exemple ci-dessous le programme désarme puis arme le bit PF.

mov al, 1h
sub al, 3h ;PF désarmé -> Résultat : 0FEh (bits désarmés impairs)
add al, 1h ;PF armé -> Résultat : 0FFh (bits armés pairs)

AF : ADJUST FLAG (bit 4 valeur 10h )

Ce bit est armé lorsqu'une opération arithmétique telle que : ADD, SUB, MUL, DIV crée un résultat qui n'est pas compris dans la plage de valeurs de 4 bits : 0...15. .

Dans l'exemple ci-dessous le programme désarme puis arme le bit AF.

mov al, 0Fh
sub al, 0Fh ;AF désarmé -> Résultat : 0h
add al, 1h
add al, 0Fh ;AF armé -> Résultat : 10h

ZF : ZERO FLAG (bit 6 valeur 40h)

Ce bit est armé lorsqu'une opération arithmétique telle que : ADD, SUB, MUL, DIV crée un résultat égal à zéro.

Dans l'exemple ci-dessous le programme arme puis désarme le bit ZF.

mov al, 0FFh
sub al, 0FFh ; ZF armé -> Résultat : 0h
add al, 0FFh ; ZF désarmé -> Résultat différent de zero.

SF : SIGN FLAG (bit 7 valeur 80h)

Ce bit est armé lorsqu'une opération arithmétique telle que : ADD, SUB, MUL, DIV crée un résultat dont le MSB (Most Significant Bit) est armé.

Dans l'exemple ci-dessous le programme arme puis désarme le bit SF.

mov al, 07Fh
add al, 1h ; SF armé -> Résultat : 80h (MSB = 1)
sub al, 1h ; SF désarmé -> Résultat : 7Fh (MSB = 0).

OF : OVERFLOW FLAG (bit 11 valeur 800h)

Ce bit est armé lorsqu'une opération arithmétique telle que : ADD, SUB, MUL, DIV crée un résultat qui est hors plage de valeurs négatives autorisées. On peut considérer que, pour une addition, si les deux operandes de l'opération sont du même signe et que le résultat est de signe différent OF sera armé. Si les deux operandes sont de signe différent le résultat pourra avoir son MSB armé ou non sans qu'il y ait d'overflow donc OF sera toujours désarmé. Pour une soustraction, il faudra appliquer la règle mathématique de l'opposer d'un nombre. Si deux operandes sont de même signe on peut facilement déduire que le résultat donnera toujours un OF égal à zero. A contrario si l'un des deux operandes est de signe différent, le résultat devra être du même signe que le premier operande et OF sera désarmé à l'inserve OF sera armé.

Dans l'exemple ci-dessous le programme arme puis désarme le bit OF dans le cadre d'une addition.

mov al, 80h
add al, 0FFh ; Les deux operandes sont de même signe alors OF armé -> Résultat : 7Fh (MSB = 0)
add al, 0FFh ; Les deux operandes sont de signe différent donc OF est désarmé -> Résultat : 7Eh (MSB = 0)

Dans l'exemple ci-dessous le programme arme puis désarme le bit OF dans le cadre d'une soustraction.

mov al, 80h
sub al, 0FFh ; Deux operandes de même signe OF sera désarmé.
mov al, 80h
sub al, 1h ; Deux operande de signe différent : Résultat -> 7Fh (MSB = 0) OF sera armé.

DF : DIRECTION FLAG (bit 10 valeur 400h)

Ce bit indique si les registres esi et edi seront incrémentés ou décrémentés lors de l'usage des instructions de chaîne.
Si ce bit est désarmé ce sera une incrémentation et si il est armé ce sera une décrémentation

Dans l'exemple ci-dessous le programme arme puis désarme le bit DF.

std ; DF est armé : décrémentation.
cld ; DF désarmé : incrémentation.