| 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
|
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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
Dans l'exemple ci-dessous le programme arme puis désarme le bit OF dans le cadre d'une soustraction.
mov al, 80h
|
| 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.
|