फ्लैग रजिस्टर
FLAGS (फ्लैग्स) प्रोसेसर रजिस्टर स्थिति रजिस्टर है जिसमें x86 CPU की वर्तमान स्थिति होती है। फ्लैग बिट्स का आकार और अर्थ आर्किटेक्चर निर्भर हैं। यह सामान्यतः अंकगणितीय संचालन के परिणाम के साथ-साथ वर्तमान समय में सीपीयू संचालन पर लगाए गए प्रतिबंधों की जानकारी को दर्शाता है। उनमें से कुछ प्रतिबंधों में कुछ व्यवधानों को ट्रिगर होने से रोकना, विशेषाधिकार प्राप्त निर्देशों के वर्ग के निष्पादन पर रोक लगाना सम्मिलित हो सकता है। अतिरिक्त स्थिति फ़्लैग मेमोरी मैपिंग को बायपास कर सकते हैं और परिभाषित कर सकते हैं कि सीपीयू को अंकगणितीय अतिप्रवाह पर क्या कार्रवाई करनी चाहिए।
कैरी, पैरिटी, ऑक्सिलरी कैरी (या आधा ले जाने वाला फ्लैग), जीरो और साइन फ्लैग कई आर्किटेक्चर में सम्मिलित हैं।
i286 आर्किटेक्चर में, रजिस्टर 16-बिट16 बिट चौड़ा है। इसके उत्तराधिकारी, ईफ्लैग्स (EFLAGS) और आरफ्लैग्स रजिस्टर क्रमशः 32-बिट 32 बिट और 64-बिट 64 बिट चौड़े हैं। व्यापक रजिस्टर अपने छोटे पूर्ववर्तियों के साथ संगतता बनाए रखते हैं।
फ्लैग्स
इंटेल x86 फ्लैग्स रजिस्टर[1] | ||||||
---|---|---|---|---|---|---|
अंश # | मास्क | संक्षेपाक्षर | विवरण | वर्ग | =1 | =0 |
फ्लैग | ||||||
0 | 0x0001 | सीएफ़ | फ्लैग लेकर चलो | स्थति | CY(कैरी) | एनसी (कोई कैरी नहीं) |
1 | 0x0002 | — | आरक्षित, हमेशा ईफ्लैग्स में 1 | — | ||
2 | 0x0004 | पीएफ | समता फ्लैग | स्थति | पीई(समता सम) | पीओ (समता विषम) |
3 | 0x0008 | — | आरक्षित | — | ||
4 | 0x0010 | ए एफ | सहायक फ्लैगवाहक फ्लैग | स्थति | एसी (सहायक कैरी) | एनए (कोई सहायक कैरी नहीं) |
5 | 0x0020 | — | आरक्षित | — | ||
6 | 0x0040 | जेडएफ | शून्य फ्लैग | स्थति | ज़ेडआर (शून्य) | न्यूजीलैंड(शून्य नहीं) |
7 | 0x0080 | एस एफ | फ्लैग पर हस्ताक्षर करें | स्थति | एनजी(नकारात्मक) | पीएल(सकारात्मक) |
8 | 0x0100 | टी.एफ | ट्रैप फ़्लैग (एकल चरण) | नियंत्रण | ||
9 | 0x0200 | अगर | व्यवधान सक्षम फ्लैग | नियंत्रण | ईआई (इंटरप्ट सक्षम करें) | डीआई (इंटरप्ट अक्षम करें) |
10 | 0x0400 | डीएफ | दिशा फ्लैग | नियंत्रण | डीएन(नीचे) | ऊपर ऊपर) |
11 | 0x0800 | का | अतिप्रवाह फ्लैग | स्थति | ओवी(अतिप्रवाह) | एनवी (अतिप्रवाह नहीं) |
12-13 | 0x3000 | आईओपीएल | I/O विशेषाधिकार स्तर (केवल 286+),
हमेशा 8086 और 186 पर सभी-1 |
प्रणाली | ||
14 | 0x4000 | एनटी | नेस्टेड कार्य फ्लैग (केवल 286+),
हमेशा 8086 और 186 पर 1 |
प्रणाली | ||
15 | 0x8000 | एमडी | मोड फ़्लैग ( केवल एनईसी वी-सीरीज़ ),
सभी इंटेल सीपीयू पर आरक्षित। हमेशा 8086/186 पर 1, 286 पर 0 और बाद में। || नियंत्रण || (केवल एनईसी) नेटिव मोड ( 186 संगत) || (केवल एनईसी) अनुकरण मोड ( 8080 संगत) | |||
ईफ्लैग्स | ||||||
16 | 0x0001 0000 | आरएफ | बायोडाटा फ्लैग (केवल 386+) | प्रणाली | ||
17 | 0x0002 0000 | वीएम | वर्चुअल 8086 मोड फ़्लैग (केवल 386+) | प्रणाली | ||
18 | 0x0004 0000 | एसी | संरेखण जांच (486+, रिंग 3),
एसएमएपी एक्सेस जांच ( ब्रॉडवेल +, रिंग 0-2) |
प्रणाली | ||
19 | 0x0008 0000 | वीआईएफ | वर्चुअल इंटरप्ट फ़्लैग (पेंटियम+) | प्रणाली | ||
20 | 0x0010 0000 | वीआईपी | वर्चुअल व्यवधान लंबित (पेंटियम+) | प्रणाली | ||
21 | 0x0020 0000 | पहचान | सीपीयूआईडी निर्देश (पेंटियम+) का उपयोग करने में सक्षम | प्रणाली | ||
22-29 | 0x3FC0 0000 | — | सुरक्षित | — | ||
30 | 0x4000 0000 | (कोई नहीं) | एईएस कुंजी शेड्यूल लोडेड फ़्लैग
( केवल वीआईए पैडलॉक वाले सीपीयू) |
प्रणाली | ||
31 | 0x8000 0000 | ऐ | वैकल्पिक निर्देश सेट सक्षम
( केवल VIA C5XL प्रोसेसर) |
प्रणाली | ||
आरफ्लैग्स | ||||||
32‑63 | 0xFFFF FFFF…
…0000 0000 |
— | सुरक्षित | — |
नोट: फ्लैग्स रजिस्टर मान के भीतर फ्लैग (ओं) को क्वेरी करने के लिए तालिका में मास्क कॉलम AND बिटमास्क (हेक्साडेसिमल मान के रूप में) है।
उपयोग
सभी फ्लैग्स रजिस्टरों में स्थिति कोड रजिस्टर, फ्लैग बिट्स होते हैं जो एक मशीन- लैंग्वेज के परिणाम देते हैंl मशीन-लैंग्वेज निर्देश दूसरे निर्देश को प्रभावित करते हैं। अंकगणित और तार्किक निर्देश कुछ या सभी फ्लैग सेट करते हैं, और प्रतिबंधी झंप अनुदेश कुछ फ्लैग के मूल्य के आधार पर चर कार्रवाई करते हैं। उदाहरण के लिए, jz
(जम्प इफ जीरो / यदि शून्य हो तो कूदो), jc
(जंप इफ कैरी), और jo
(जम्प इफ ओवरफ्लो) विशिष्ट फ्लैग्स पर निर्भर करते हैं। अन्य प्रतिबंधी झंप कई फ्लैग्स के संयोजन का परीक्षण करते हैं।
फ्लैग्स रजिस्टरों को स्टैक से या स्टैक पर ले जाया जा सकता है। यह सीपीयू संदर्भ को बचाने और बहाल करने के काम का हिस्सा है, एक रूटीन के खिलाफ जैसे एक इंटरप्ट सर्विस रूटीन जिसके रजिस्टरों में परिवर्तन कॉलिंग कोड द्वारा नहीं देखा जाना चाहिए। यहाँ प्रासंगिक निर्देश हैं:
- PUSHF और POPF निर्देश 16-बिट फ्लैग्स रजिस्टर को स्थानांतरित करते हैं।
- PUSHFD/POPFD (i386 आर्किटेक्चर के साथ पेश किया गया) 32-बिट डबल रजिस्टर ईफ्लैग्स को ट्रांसफर करता है।
- PUSHFQ/POPFQ (x64 आर्किटेक्चर के साथ पेश किया गया) 64-बिट क्वाडवर्ड रजिस्टर आरफ्लैग्स को ट्रांसफर करता है।
64-बिट मोड में, पुश/पीओपीएफ और पुशफक्यू/पीओपीएफक्यू उपलब्ध हैं लेकिन पुशफडी/पीओपीएफडी नहीं हैं।[2]: 4–349, 4–432
फ्लैग्स रजिस्टर के निचले 8 बिट्स SAHF और LAHF द्वारा सीधे लोड/स्टोर मैनिपुलेशन (प्रकलन) के लिए भी खुले हैं (लोड/स्टोर AH को फ्लैग में)।
उदाहरण
फ्लैग्स रजिस्टरों को पुश और पॉप करने की क्षमता एक प्रोग्राम को फ्लैग्स में सूचनाओं को हेरफेर करने देती है जिसके लिए मशीन-लैंग्वेज निर्देश उपलब्ध नहीं हैं। उदाहरण के लिए, 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
फ्लैग्स रजिस्टर में हेरफेर करके, एक प्रोग्राम स्थापित प्रोसेसर के मॉडल को निर्धारित कर सकता है। उदाहरण के लिए, संरेखण फ्लैग को केवल 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. 2B. May 2012.