FLAGS
- Artykuł opisuje rejestr stanu w architekturze x86. Ogólne informacje można znaleźć w artykule: rejestr stanu.
FLAGS – rejestr procesorów zgodnych z architekturą x86 zaprojektowaną przez Intela w latach 70. XX wieku i modernizowaną do tej pory, na której opiera się zdecydowana większość współczesnych komputerów osobistych.
Nazwa FLAGS dotyczy zwykle 16-bitowego rejestru stanu procesorów do 80286 włącznie. W architekturze IA-32 (od 80386 do najnowszych 32-bitowych procesorów firmy Intel) rejestr ten jest 32-bitowy i nosi nazwę EFLAGS. W procesorach o architekturze 64-bitowej, zgodnej z x86 (x86-64, EM64T) rejestr stanu ma długość 64 bitów, przy czym opisuje się go symbolem RFLAGS.
Poszczególne rodzaje rejestrów są ze sobą zgodne: młodsza część 32-bitowego rejestru EFLAGS jest tożsama z 16-bitowym rejestrem FLAGS, z kolei młodsze 32 bity rejestru RFLAGS są tożsame z rejestrem EFLAGS.
-
Rejestr stanu architektury x86 firmy Intel Nr bitu Skrót Opis Kategoria[1] 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 flaga trybu 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
- ↑ S: Flaga stanu
C: Flaga sterowania
X: Flaga systemowa
Przykłady [edytuj]
Niżej przedstawiono przykład ustawiania flagi DF (flaga kierunku), czyli jej zmiany z 0 na 1.
mov bx, 400h ; ustawienie flagi DF pushf ; położenie bieżącej zawartości flag na stos pop ax ; zdjęcie flag ze stosu do rejestru ax push ax ; położenie ich z powrotem na stos celem ich zachowania xor ax, bx ; przełączenie flagi DF z zachowaniem stanu reszty flag push ax ; położenie na stosie nowej zawartości popf ; zdjęcie wartości ze stosu i ustawienie wg 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ów std i cld.