FLAGS –rejestrprocesorów zgodnych zarchitekturąx86 zaprojektowaną przezIntela wlatach 70. XX wieku i modernizowaną do tej pory, na której opiera się zdecydowana większość współczesnychkomputerów osobistych.
Nazwa FLAGS dotyczy zwykle 16-bitowego rejestru stanu procesorów do80286 włącznie. W architekturzeIA-32 (od80386 do najnowszych 32-bitowych procesorów firmy Intel) rejestr ten jest32-bitowy i nosi nazwęEFLAGS. W procesorach oarchitekturze 64-bitowej, zgodnej z x86 (x86-64,EM64T) rejestr stanu ma długość 64 bitów, przy czym opisuje się go symbolemRFLAGS.
Poszczególne rodzaje rejestrówsą ze sobą zgodne: młodsza część 32-bitowego rejestru EFLAGS jest tożsama z16-bitowym rejestrem FLAGS, z kolei młodsze 32 bity rejestru RFLAGS są tożsame z rejestrem EFLAGS.
Nr bitu | Skrót | Opis | Kategoria[a] |
---|---|---|---|
FLAGS | |||
0 | CF | flaga przeniesienia (carry flag) | S |
1 | 1 | zarezerwowane | |
2 | PF | flaga parzystości (parity flag) | S |
3 | 0 | zarezerwowane | |
4 | AF | flaga wyrównania (adjust flag) | S |
5 | 0 | zarezerwowane | |
6 | ZF | flaga zera (zero flag) | S |
7 | SF | flaga znaku (sign flag) | S |
8 | TF | flaga pracy krokowej (trap flag / single step flag) | X |
9 | IF | flaga przerwań (interrupt enable flag) | X |
10 | DF | flaga kierunku (direction flag) | C |
11 | OF | flaga przepełnienia (overflow flag) | S |
12, 13 | IOPL | poziom uprzywilejowania we/wy (I/O privilege level, 286+) | X |
14 | NT | flaga zadania zagnieżdżonego (nested task flag; 286+) | X |
15 | 0 | zarezerwowane | |
EFLAGS | |||
16 | RF | flaga wznowienia (resume flag, 386+) | X |
17 | VM | flagatrybu wirtualnego 8086 (virtual 8086 mode flag; 386+) | X |
18 | AC | sprawdzenie wyrównania (alignment check; 486SX+) | X |
19 | VIF | flaga przerwania wirtualnego (virtual interrupt flag; Pentium+) | X |
20 | VIP | oczekujące przerwanie wirtualne (virtual interrupt pending; Pentium+) | X |
21 | ID | identyfikacja (identification; Pentium+) | X |
22 | 0 | zarezerwowane | |
23 | 0 | zarezerwowane | |
24 | 0 | zarezerwowane | |
25 | 0 | zarezerwowane | |
26 | 0 | zarezerwowane | |
27 | 0 | zarezerwowane | |
28 | 0 | zarezerwowane | |
29 | 0 | zarezerwowane | |
30 | 0 | zarezerwowane | |
31 | 0 | zarezerwowane | |
RFLAGS | |||
32-63 | 0 | zarezerwowane |
Niżej przedstawiono przykład ustawiania flagi DF (flaga kierunku), czyli jej zmiany z 0 na 1.
movbx,400h; ustawienie flagi DFpushf; położenie bieżącej zawartości flag na stospopax; zdjęcie flag ze stosu do rejestru axpushax; położenie ich z powrotem na stos celem ich zachowaniaxorax,bx; przełączenie flagi DF z zachowaniem stanu reszty flagpushax; położenie na stosie nowej zawartościpopf; zdjęcie wartości ze stosu i ustawienie według niej rejestru FLAGS; … kod …popf; przywrócenie starej zawartości FLAGS
W zastosowaniach praktycznych do ustawienia i czyszczenia flagi kierunku korzysta się odpowiednio z mnemonikówstd
icld
.