A FLAGS regiszter az állapotregiszter, amely egy x86-os CPU aktuális állapotát tartalmazza. A flag bitek mérete és jelentése architektúrától függ. Általában a számtani műveletek eredményét, valamint a CPU működésére az adott időpontban vonatkozó korlátozásokkal kapcsolatos információkat tükrözi. Ezen korlátozások némelyike magában foglalhatja bizonyos megszakítások kiváltásának megakadályozását, egy "privilegizált" utasításosztály végrehajtásának tiltását. További állapotflagek megkerülhetik a memória-leképezést, és meghatározhatják, hogy a CPU milyen műveletet tegyen számtani túlcsordulás esetén.

Az átvitel (carry), paritás (parity), kiegészítő átvitel (auxiliary carry vagy félátvitel, half-carry), nulla (zero) és előjel (sign) jelzők számos architektúrában megtalálhatók (sok modern (RISC) architektúrában nincsenek jelzők, mint például az átvitel, és még ha használnak is jelzőket, akkor a félátvitel ritka, mivel a BCD aritmetika már nem elterjedt, sőt, x86-64-en hosszú módbanAz x86-64 számítógépes architektúrában a hosszú mód (long mode) az a mód, amelyben egy 64 bites operációs rendszer hozzáférhet a 64 bites utasításokhoz és regiszterekhez. A 64 bites programok egy 64 bites módnak nevezett almódban futnak, míg a 32 bites és a 16 bites védett módú programok egy kompatibilitási módnak nevezett almódban futnak. A valós módú vagy virtuális 8086 módú programok nem futtathatók natívan hosszú módban. is korlátozott támogatással rendelkezik).

Az Intel 8086-ban a regiszter 16 bit széles. Utódai, az EFLAGS és RFLAGS regiszterek (a modern x86-64-ben) 32, illetve 64 bit szélesek. A szélesebb regiszterek továbbra is kompatibilisek kisebb elődeikkel.

FLAGS Intel x86 FLAGS regiszter Bit # Maszk Rövidítés Leírás Kategória =1 =0 FLAGS 0 0x0001 CF Carry flag Status CY (Carry) NC (No Carry) 1 0x0002 BRKI I/O Trap (csak NEC V25/V35/V55),NEC, 16-bit V-series Microprocessor Data Book, 1991, pp. 429-433.foglalt és mindig 1 az EFLAGS-ban minden más x86 processzoron Control (NEC only)I/O permitted (NEC only)I/O trapped 2 0x0004 PF Parity flag Status PE (Parity Even) PO (Parity Odd) 3 0x0008 — Fenntartott — 4 0x0010 AF Auxiliary Carry flag Status AC (Auxiliary Carry) NA (No Auxiliary Carry) 5 0x0020 — Fenntartott — 6 0x0040 ZF Zero flag Status ZR (Zero) NZ (Not Zero) 7 0x0080 SF Sign flag Status NG (Negative) PL (Positive) 8 0x0100 TF Trap flag (lépésenkénti végrehajtás) Control 9 0x0200 IF Interrupt engedély flag Control EI (Megszakítás engedélyezése) DI (Megszakítás letiltása) 10 0x0400 DF Direction flag Control DN (Down) UP (Up) 11 0x0800 OF Overflow flag Status OV (Overflow) NV (Not Overflow) 12–13 0x3000 IOPL I/O jogosultsági szint (csak 286+), mindig csupa 1-es a 8086 és 186-on System 14 0x4000 NT Beágyazott feladatjelző (286+ only), mindig 1 8086 és 186-on System 15 0x8000 MD Módjelző (csak NEC V-series),NEC, 16-bit V-Series User's Manual , document no. U11301E, sep 2000, p. 186minden Intel CPU-n fenntartva.Mindig 1 a 8086/186-on, 0 a 286-os és újabb verziókon. Control (NEC only)Native Mode(186 compatible) (NEC only)Emulation Mode(8080 compatible) EFLAGS 16 0x0001 0000 RF Resume flag (386+ only) System 17 0x0002 0000 VM Virtual 8086 mode flag (386+ only) System 18 0x0004 0000 AC Alignment Check (486+, ring 3),SMAP Access Check (Broadwell+, ring 0-2) System 19 0x0008 0000 VIF Virtual interrupt flag (Pentium+) System 20 0x0010 0000 VIP Virtual interrupt pending (Pentium+) System 21 0x0020 0000 ID Able to use CPUID instruction (Pentium+) System 22–29 0x3FC0 0000 — Reserved — 30 0x4000 0000 (none) AES key schedule loaded flagVIA, PadLock Programming Guide, v1.66, Aug 4, 2005, pp. 7-8. Archived from the original on May 26, 2010.(VIA C3/C7 CPUs with VIA PadLock only) System 31 0x8000 0000 AI Alternate Instruction Set enabled(VIA C5XL processors only)VIA, VIA C3 Processor Alternate Instruction Set Application Note , version 0.24, 2002 - see figure 2 on page 12 and chapter 4 on page 21 for details on the EFLAGS.AI flag. System RX32 "REX32" (an alternate to compatibility mode that allows access to 16 GPRs) RFLAGS 32‑63 0xFFFF FFFF... ...0000 0000 — Reserved —

Megjegyzés: A táblázat maszk oszlopa az AND bitmaszk (hexadecimális értékként), amely a FLAGS regiszterértéken belüli jelző(k) lekérdezéséhez szükséges.

Használat Minden FLAGS regiszter tartalmazza a feltételkódokat, azaz a jelzőbiteket, amelyek lehetővé teszik, hogy egy gépi kódú utasítás eredménye egy másik utasításra hatással legyen. Az aritmetikai és logikai utasítások beállítják a jelzők (flag-ek) egy részét vagy egészét, a feltételes ugró utasítások pedig bizonyos jelzők értéke alapján változó műveleteket hajtanak végre. Például a jz (Jump if Zero), a jc (Jump if Carry) és a jo (Jump if Overflow) adott jelzőktől függenek. Más feltételes ugrások több jelző kombinációit tesztelik.

A FLAGS regiszterek áthelyezhetők a verembe vagy a veremből. Ez a CPU-kontextus mentésének és visszaállításának része egy olyan rutinnal szemben, mint például egy megszakításkezelő rutin, amelynek regiszterváltozásait a hívó kódnak nem szabad látnia. Íme a vonatkozó utasítások: A PUSHF és POPF utasítások a 16 bites FLAGS regisztert viszik át. A PUSHFD/POPFD (az i386 architektúrával bevezetett) a 32 bites dupla regiszterű EFLAGS regisztert viszi át. A PUSHFQ/POPFQ (az x86-64 architektúrával bevezetett) a 64 bites négyszavas RFLAGS regisztert viszi át.

64 bites módban a PUSHF/POPF és a PUSHFQ/POPFQ elérhető, de a PUSHFD/POPFD nem.:4–349, 4–432

A FLAGS regiszter alsó 8 bitje nyitott a SAHF és LAHF általi közvetlen betöltés/tárolás manipulációra is (az akkumulátor magasabb helyiértékű része, az AH betöltése/tárolása jelzőkbe).

Példa A FLAGS regiszterek feltöltésének és bezárásának képessége lehetővé teszi a programok számára, hogy a FLAGS regiszterekben lévő információkat olyan módon manipulálják, amelyre gépi nyelvi utasítások nem léteznek. Például a cld és std utasítások törlik, illetve beállítják az irányjelzőt (DF), de nincs utasítás a DF kiegészítésére. Ez a következő assembly kóddal érhető el:

; Ez egy 8086-os kód, 16 bites regiszterekkel a veremre helyezve, ; és a flags regiszter csak 16 bites ennél a CPU-nál. pushf ; Használja a veremtárolót a FLAGS-ok átviteléhez pop ax ; … az AX regiszterbe push ax ; és másolja vissza őket a verembe tárolás céljából xor ax, 400h ; Csak a DF bitet kapcsolja ki (invertálja, 'kiegészíti'); a többi bit változatlan marad push ax ; Használd újra a veremkezelőt a módosított érték popf ; … FLAGS regiszterbe helyezéséhez ; Ide kell beszúrni azt a kódot, amelyhez a DF jelző kiegészítése szükséges. popf ; A FLAGS eredeti értékének visszaállítása

A FLAGS regiszter manipulálásával a program meghatározhatja a telepített processzor modelljét. Például az igazítási jelző csak a 486-os és újabb processzorokon módosítható. Ha a program megpróbálja módosítani ezt a jelzőt, és azt érzékeli, hogy a módosítás nem maradt fenn, akkor a processzor korábbi, mint a 486-os.

Az Intel Pentiummal kezdődően a CPUID utasítás a processzor modelljét adja meg. A fenti módszer azonban továbbra is hasznos a korábbi modellek megkülönböztetésére.

Kapcsolódó szócikkek Regiszter Flag Állapotregiszter

Jegyzetek

Fordítás

Kategória:Mikroprocesszorok Kategória:CPU-architektúrák Kategória:Regiszterek