फ्लैग रजिस्टर
FLAGS (फ्लैग्स) प्रोसेसर रजिस्टर स्थिति रजिस्टर है जिसमें x86 CPU की वर्तमान स्थिति होती है। फ्लैग बिट्स का आकार और अर्थ आर्किटेक्चर निर्भर हैं। यह सामान्यतः अंकगणितीय संचालन के परिणाम के साथ-साथ वर्तमान समय में सीपीयू संचालन पर लगाए गए प्रतिबंधों की जानकारी को दर्शाता है। उनमें से कुछ प्रतिबंधों में कुछ व्यवधानों को ट्रिगर होने से रोकना, विशेषाधिकार प्राप्त निर्देशों के वर्ग के निष्पादन पर रोक लगाना सम्मिलित हो सकता है। अतिरिक्त स्थिति फ़्लैग मेमोरी मैपिंग को बायपास कर सकते हैं और परिभाषित कर सकते हैं कि सीपीयू को अंकगणितीय अतिप्रवाह पर क्या कार्रवाई करनी चाहिए।
कैरी, पैरिटी, ऑक्सिलरी कैरी (या आधा ले जाने वाला झंडा), जीरो और साइन फ्लैग कई आर्किटेक्चर में सम्मिलित हैं।
i286 आर्किटेक्चर में, रजिस्टर 16-बिट16 बिट चौड़ा है। इसके उत्तराधिकारी, EFLAGS और RFLAGS रजिस्टर क्रमशः 32-बिट 32 बिट और 64-बिट 64 बिट चौड़े हैं। व्यापक रजिस्टर अपने छोटे पूर्ववर्तियों के साथ संगतता बनाए रखते हैं।
FLAGS
इंटेल x86 FLAGS रजिस्टर[1] | ||||||
---|---|---|---|---|---|---|
बिट # | मास्क | संक्षेपण | Description | Category | =1 | =0 |
FLAGS | ||||||
0 | 0x0001 | CF | Carry flag | Status | CY(Carry) | NC(No Carry) |
1 | 0x0002 | — | Reserved, always 1 in EFLAGS [2][3] | — | ||
2 | 0x0004 | PF | Parity flag | Status | PE(Parity Even) | PO(Parity Odd) |
3 | 0x0008 | — | Reserved[3] | — | ||
4 | 0x0010 | AF | Auxiliary Carry flag[4] | Status | AC(Auxiliary Carry) | NA(No Auxiliary Carry) |
5 | 0x0020 | — | Reserved[3] | — | ||
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 (single step) | Control | ||
9 | 0x0200 | IF | Interrupt enable flag | Control | EI(Enable Interrupt) | DI(Disable Interrupt) |
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 privilege level (286+ only), always all-1s on 8086 and 186 |
System | ||
14 | 0x4000 | NT | Nested task flag (286+ only), always 1 on 8086 and 186 |
System | ||
15 | 0x8000 | MD | Mode flag (NEC V-series only),[5] reserved on all Intel CPUs. Always 1 on 8086/186, 0 on 286 and later. |
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 flag[6] (CPUs with VIA PadLock only) |
System | ||
31 | 0x8000 0000 | AI | Alternate Instruction Set enabled (VIA C5XL processors only)[7] |
System | ||
RFLAGS | ||||||
32‑63 | 0xFFFF FFFF… …0000 0000 |
— | Reserved | — |
नोट: FLAGS रजिस्टर मान के भीतर फ्लैग (ओं) को क्वेरी करने के लिए तालिका में मास्क कॉलम AND bitmask (हेक्साडेसिमल मान के रूप में) है।
उपयोग
सभी FLAGS रजिस्टरों में स्थिति कोड रजिस्टर, फ्लैग बिट्स होते हैं जो एक मशीन- लैंग्वेज के परिणाम देते हैंl मशीन-लैंग्वेज निर्देश दूसरे निर्देश को प्रभावित करते हैं। अंकगणित और तार्किक निर्देश कुछ या सभी फ्लैग सेट करते हैं, और प्रतिबंधी झंप अनुदेश कुछ फ्लैग के मूल्य के आधार पर चर कार्रवाई करते हैं। उदाहरण के लिए, jz
(जम्प इफ जीरो / यदि शून्य हो तो कूदो), jc
(जंप इफ कैरी), और jo
(जम्प इफ ओवरफ्लो / यदि अतिप्रवाह हो तो कूदें) विशिष्ट फ्लैग्स पर निर्भर करते हैं। अन्य सशर्त कूद कई फ्लैग्स के संयोजन का परीक्षण करते हैं।
FLAGS रजिस्टरों को स्टैक से या स्टैक पर ले जाया जा सकता है। यह सीपीयू संदर्भ को बचाने और बहाल करने के काम का हिस्सा है, एक रूटीन के खिलाफ जैसे एक इंटरप्ट सर्विस रूटीन जिसके रजिस्टरों में परिवर्तन कॉलिंग कोड द्वारा नहीं देखा जाना चाहिए। यहाँ प्रासंगिक निर्देश हैं:
- PUSHF और POPF निर्देश 16-बिट FLAGS रजिस्टर को स्थानांतरित करते हैं।
- PUSHFD/POPFD (i386 आर्किटेक्चर के साथ पेश किया गया) 32-बिट डबल रजिस्टर EFLAGS को ट्रांसफर करता है।
- PUSHFQ/POPFQ (x64 आर्किटेक्चर के साथ पेश किया गया) 64-बिट क्वाडवर्ड रजिस्टर RFLAGS को ट्रांसफर करता है।
64-बिट मोड में, पुश/पीओपीएफ और पुशफक्यू/पीओपीएफक्यू उपलब्ध हैं लेकिन पुशफडी/पीओपीएफडी नहीं हैं।[8]: 4–349, 4–432
FLAGS रजिस्टर के निचले 8 बिट्स SAHF और LAHF द्वारा सीधे लोड/स्टोर मैनिपुलेशन (प्रकलन) के लिए भी खुले हैं (लोड/स्टोर AH को फ्लैग में)।
उदाहरण
FLAGS रजिस्टरों को पुश और पॉप करने की क्षमता एक प्रोग्राम को FLAGS में सूचनाओं को हेरफेर करने देती है जिसके लिए मशीन-लैंग्वेज निर्देश उपलब्ध नहीं हैं। उदाहरण के लिए, cld
और std
निर्देश स्पष्ट करें और दिशा फ्लैग (DF) क्रमशः सेट करें; लेकिन डीएफ के पूरक के लिए कोई निर्देश नहीं है। यह निम्नलिखित विधानसभा कोड के साथ प्राप्त किया जा सकता है:
pushf ; Use the stack to transfer the FLAGS
pop ax ; ...into the AX register
push ax ; and copy them back onto the stack for storage
xor ax, 400h ; Toggle (complement) DF only; other bits are unchanged
push ax ; Use the stack again to move the modified value
popf ; ...into the FLAGS register
; Insert here the code that required the DF flag to be complemented
popf ; Restore the original value of the FLAGS
FLAGS रजिस्टर में हेरफेर करके, एक प्रोग्राम स्थापित प्रोसेसर के मॉडल को निर्धारित कर सकता है। उदाहरण के लिए, संरेखण फ्लैग को केवल Intel 80486 और इसके बाद के संस्करण पर बदला जा सकता है। यदि प्रोग्राम इस फ्लैग को संशोधित करने का प्रयास करता है और यह महसूस करता है कि संशोधन कायम नहीं रहा, तो प्रोसेसर 486 से पहले का है।
P5 (माइक्रोआर्किटेक्चर) से प्रारम्भ होकर, CPUID निर्देश प्रोसेसर मॉडल की रिपोर्ट करता है। हालाँकि, उपरोक्त विधि पहले के मॉडलों के बीच अंतर करने के लिए उपयोगी बनी हुई है।
यह भी देखें
- बिट फील्ड
- नियंत्रण रजिस्टर
- सीपीयू फ्लैग (x86)
- प्रोग्राम स्थिति शब्द
- स्थिति रजिस्टर
- x86 असेंबली लैंग्वेज
- x86 निर्देश लिस्टिंग
संदर्भ
- ↑ Intel 64 and IA-32 Architectures Software Developer's Manual (PDF). Vol. 1. May 2012. pp. 3–21.
- ↑ Intel 64 and IA-32 Architectures Software Developer’s Manual (PDF). Vol. 1. Dec 2016. p. 78.
- ↑ 3.0 3.1 3.2 "Silicon reverse engineering: The 8085's undocumented flags". www.righto.com. Retrieved 2018-10-21.
- ↑ Intel 64 and IA-32 Architectures Software Developer’s Manual, Vol. 1. Dec 2022. p. 3-16.
- ↑ NEC, 16-bit V-Series User's Manual, document no. U11301E, sep 2000, p. 186
- ↑ VIA, PadLock Programming Guide, v1.66, Aug 4, 2005, pp. 7-8. Archived from the original on May 26, 2010.
- ↑ 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.
- ↑ Intel 64 and IA-32 Architectures Software Developer’s Manual (PDF). Vol. 2B. May 2012.