फ्लैग रजिस्टर: Difference between revisions

From Vigyanwiki
No edit summary
 
(8 intermediate revisions by 5 users not shown)
Line 2: Line 2:
'''FLAGS (फ्लैग्स)''' [[प्रोसेसर रजिस्टर]] [[स्थिति रजिस्टर]] है जिसमें x86 [[CPU]] की वर्तमान स्थिति होती है। फ्लैग बिट्स का आकार और अर्थ आर्किटेक्चर निर्भर हैं। यह सामान्यतः अंकगणितीय संचालन के परिणाम के साथ-साथ वर्तमान समय में सीपीयू संचालन पर लगाए गए प्रतिबंधों की जानकारी को दर्शाता है। उनमें से कुछ प्रतिबंधों में कुछ व्यवधानों को ट्रिगर होने से रोकना, विशेषाधिकार प्राप्त निर्देशों के वर्ग के निष्पादन पर रोक लगाना सम्मिलित हो सकता है। अतिरिक्त स्थिति फ़्लैग मेमोरी मैपिंग को बायपास कर सकते हैं और परिभाषित कर सकते हैं कि सीपीयू को अंकगणितीय अतिप्रवाह पर क्या कार्रवाई करनी चाहिए।
'''FLAGS (फ्लैग्स)''' [[प्रोसेसर रजिस्टर]] [[स्थिति रजिस्टर]] है जिसमें x86 [[CPU]] की वर्तमान स्थिति होती है। फ्लैग बिट्स का आकार और अर्थ आर्किटेक्चर निर्भर हैं। यह सामान्यतः अंकगणितीय संचालन के परिणाम के साथ-साथ वर्तमान समय में सीपीयू संचालन पर लगाए गए प्रतिबंधों की जानकारी को दर्शाता है। उनमें से कुछ प्रतिबंधों में कुछ व्यवधानों को ट्रिगर होने से रोकना, विशेषाधिकार प्राप्त निर्देशों के वर्ग के निष्पादन पर रोक लगाना सम्मिलित हो सकता है। अतिरिक्त स्थिति फ़्लैग मेमोरी मैपिंग को बायपास कर सकते हैं और परिभाषित कर सकते हैं कि सीपीयू को अंकगणितीय अतिप्रवाह पर क्या कार्रवाई करनी चाहिए।


कैरी, पैरिटी, ऑक्सिलरी कैरी (या [[आधा ले जाने वाला झंडा]]), जीरो और साइन फ्लैग कई आर्किटेक्चर में सम्मिलित हैं।
कैरी, पैरिटी, ऑक्सिलरी कैरी (या [[आधा ले जाने वाला झंडा|आधा ले जाने वाला फ्लैग]]), जीरो और साइन फ्लैग कई आर्किटेक्चर में सम्मिलित हैं।


[[i286]] आर्किटेक्चर में, रजिस्टर 16-बिट16 बिट चौड़ा है। इसके उत्तराधिकारी, '''EFLAGS''' और '''RFLAGS''' रजिस्टर क्रमशः 32-बिट 32 बिट और 64-बिट 64 बिट चौड़े हैं। व्यापक रजिस्टर अपने छोटे पूर्ववर्तियों के साथ संगतता बनाए रखते हैं।
[[i286]] आर्किटेक्चर में, रजिस्टर 16-बिट16 बिट चौड़ा है। इसके उत्तराधिकारी, '''ईफ्लैग्स''' ('''EFLAGS)''' और '''आरफ्लैग्स''' रजिस्टर क्रमशः 32-बिट 32 बिट और 64-बिट 64 बिट चौड़े हैं। व्यापक रजिस्टर अपने छोटे पूर्ववर्तियों के साथ संगतता बनाए रखते हैं।


== FLAGS ==
== '''फ्लैग्स''' ==
{| class="wikitable" style="text-align:center"
{| class="wikitable" style="text-align:center"
|-
|-
! colspan="7" style="background:#cfcfcf;" | इंटेल x86 FLAGS रजिस्टर<ref>{{cite book|title=Intel 64 and IA-32 Architectures Software Developer's Manual|url=http://download.intel.com/products/processor/manual/253665.pdf#page=93|volume=1|date=May 2012|pages=3–21}}</ref>
! colspan="7" style="background:#cfcfcf;" | इंटेल x86 '''फ्लैग्स''' रजिस्टर<ref>{{cite book|title=Intel 64 and IA-32 Architectures Software Developer's Manual|url=http://download.intel.com/products/processor/manual/253665.pdf#page=93|volume=1|date=May 2012|pages=3–21}}</ref>
|-
|-
! बिट # !! मास्क !!संक्षेपण
! अंश # !! मास्क !!संक्षेपाक्षर
! Description !! Category !! =1 !! =0
! विवरण !! वर्ग !! =1 !! =0


|-
|-
! colspan="7" style="background:#efefef" | FLAGS
! colspan="7" style="background:#efefef" | फ्लैग
|-
|-
| 0 || 0x0001 || CF || [[Carry flag]] || Status || CY(Carry) || NC(No Carry)
| 0 || 0x0001 || सीएफ़ || फ्लैग लेकर चलो || स्थति || CY(कैरी) || एनसी (कोई कैरी नहीं)
|-
|-
| 1 || 0x0002 || {{sdash}} || Reserved, always 1 in '''EFLAGS''' <ref>{{cite book|title=Intel 64 and IA-32 Architectures Software Developer’s Manual|url=https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf#page=78|volume=1|date=Dec 2016|pages=78}}</ref><ref name=r8085>{{Cite web|url=http://www.righto.com/2013/02/looking-at-silicon-to-understanding.html|title=Silicon reverse engineering: The 8085's undocumented flags|website=www.righto.com|access-date=2018-10-21}}</ref> || {{sdash}}
| 1 || 0x0002  
||| '''आरक्षित, हमेशा ईफ्लैग्स''' में 1  
|
|-
|-
| 2 || 0x0004 || PF || [[Parity flag]] || Status || PE(Parity Even) || PO(Parity Odd)
| 2 || 0x0004 || पीएफ || समता फ्लैग|| स्थति || पीई(समता सम) || पीओ (समता विषम)
|-
|-
| 3 || 0x0008 || {{sdash}} || Reserved<ref name=r8085/> || {{sdash}}
| 3 || 0x0008  
||| आरक्षित
|
|-
|-
| 4 || 0x0010 || AF || [[Half-carry_flag#The_Auxiliary_Carry_Flag_in_x86|Auxiliary Carry flag]]<ref>{{cite book |title=Intel 64 and IA-32 Architectures Software Developer’s Manual, Vol. 1 |date=Dec 2022 |page=3-16|url=https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html}}</ref> || Status || AC(Auxiliary Carry) || NA(No Auxiliary Carry)
| 4 || 0x0010 || ए एफ || सहायक फ्लैगवाहक फ्लैग || स्थति || एसी (सहायक कैरी) || एनए (कोई सहायक कैरी नहीं)
|-
|-
| 5 || 0x0020 || {{sdash}} || Reserved<ref name=r8085/> || {{sdash}}
| 5 || 0x0020  
||| आरक्षित
|
|-
|-
| 6 || 0x0040 || ZF || [[Zero flag]] || Status || ZR(Zero) || NZ(Not Zero)
| 6 || 0x0040 || जेडएफ || शून्य फ्लैग || स्थति || ज़ेडआर (शून्य) || न्यूजीलैंड(शून्य नहीं)
|-
|-
| 7 || 0x0080 || SF || [[Sign flag]] || Status || NG(Negative) || PL(Positive)
| 7 || 0x0080 || एस एफ || फ्लैग पर हस्ताक्षर करें || स्थति || एनजी(नकारात्मक) || पीएल(सकारात्मक)
|-
|-
| 8 || 0x0100 || TF || [[Trap flag]] (single step) || Control
| 8 || 0x0100 || टी.एफ || ट्रैप फ़्लैग (एकल चरण) || नियंत्रण
|
|-
|-
| 9 || 0x0200 || IF || [[IF (x86 flag)|Interrupt enable flag]] || Control || EI(Enable Interrupt) || DI(Disable Interrupt)
| 9 || 0x0200 || अगर || व्यवधान सक्षम फ्लैग|| नियंत्रण || ईआई (इंटरप्ट सक्षम करें) || डीआई (इंटरप्ट अक्षम करें)
|-
|-
| 10 || 0x0400 || DF || [[Direction flag]] || Control || DN(Down) || UP(Up)
| 10 || 0x0400 || डीएफ || दिशा फ्लैग|| नियंत्रण || डीएन(नीचे) || ऊपर ऊपर)
|-
|-
| 11 || 0x0800 || OF || [[Overflow flag]] || Status || OV(Overflow) || NV(Not Overflow)
| 11 || 0x0800 || का || अतिप्रवाह फ्लैग|| स्थति || ओवी(अतिप्रवाह) || एनवी (अतिप्रवाह नहीं)
|-
|-
| 12-13 || 0x3000 || IOPL || [[IOPL|I/O privilege level]] (286+ only), <br>always all-1s on 8086 and 186 || System
| 12-13 || 0x3000 || आईओपीएल || I/O विशेषाधिकार स्तर (केवल 286+),  
हमेशा 8086 और 186 पर सभी-1
| प्रणाली
|
|-
|-
| 14 || 0x4000 || NT || Nested task flag (286+ only), <br>always 1 on 8086 and 186 || System
| 14 || 0x4000 || एनटी || नेस्टेड कार्य फ्लैग (केवल 286+),  
हमेशा 8086 और 186 पर 1
| प्रणाली
|
|-
|-
| 15 || 0x8000 || MD || Mode flag ([[NEC V20|NEC V-series]] only),<ref>NEC, [https://www.ardent-tool.com/CPU/docs/NEC/V20-V30/v_series.pdf 16-bit V-Series User's Manual], document no. U11301E, sep 2000, p. 186</ref><br>reserved on all Intel CPUs.<br>Always 1 on 8086/186, 0 on 286 and later. || Control || (NEC only)<br>Native Mode<br>([[Intel 80186|186]] compatible) || (NEC only)<br>Emulation Mode<br>([[Intel 8080|8080]] compatible)
| 15 || 0x8000 || एमडी || मोड फ़्लैग ( केवल एनईसी वी-सीरीज़ ),  
सभी इंटेल सीपीयू पर आरक्षित।
 
हमेशा 8086/186 पर 1, 286 पर 0 और बाद में। || नियंत्रण || (केवल एनईसी)  
नेटिव मोड
 
( 186 संगत) || (केवल एनईसी)  
अनुकरण मोड
( 8080 संगत)
|-
|-
! colspan="7" style="background:#efefef" | EFLAGS
! colspan="7" style="background:#efefef" | ईफ्लैग्स
|-
|-
| 16 || 0x0001&nbsp;0000 || RF || [[Resume flag]] (386+ only) || System
| 16 || 0x0001 0000 || आरएफ || बायोडाटा फ्लैग (केवल 386+) || प्रणाली
|-
|-
| 17 || 0x0002&nbsp;0000 || VM || [[Virtual 8086 mode]] flag (386+ only) || System
| 17 || 0x0002 0000 || वीएम || वर्चुअल 8086 मोड फ़्लैग (केवल 386+) || प्रणाली
|-
|-
| 18 || 0x0004&nbsp;0000 || AC || Alignment Check (486+, ring 3),<br>[[Supervisor_Mode_Access_Prevention|SMAP]] Access Check ([[Broadwell_(microarchitecture)|Broadwell]]+, ring 0-2) || System
| 18 || 0x0004 0000 || एसी || संरेखण जांच (486+, रिंग 3),  
एसएमएपी एक्सेस जांच ( ब्रॉडवेल +, रिंग 0-2)
| प्रणाली
|-
|-
| 19 || 0x0008&nbsp;0000 || VIF || [[Virtual_8086_mode#VME|Virtual interrupt flag]] (Pentium+) || System
| 19 || 0x0008 0000 || वीआईएफ || वर्चुअल इंटरप्ट फ़्लैग (पेंटियम+) || प्रणाली
|
|-
|-
| 20 || 0x0010&nbsp;0000 || VIP || [[Virtual_8086_mode#VME|Virtual interrupt pending]] (Pentium+) || System
| 20 || 0x0010 0000 || वीआईपी || वर्चुअल व्यवधान लंबित (पेंटियम+) || प्रणाली
|-
|-
| 21 || 0x0020&nbsp;0000 || ID || Able to use [[CPUID]] instruction (Pentium+) || System
| 21 || 0x0020 0000 || पहचान || सीपीयूआईडी निर्देश (पेंटियम+) का उपयोग करने में सक्षम || प्रणाली
|-
|-
| 22-29 || 0x3FC0&nbsp;0000 || {{sdash}} || Reserved || {{sdash}}
| 22-29 || 0x3FC0 0000  
||| सुरक्षित
|
|-
|-
| 30 || 0x4000&nbsp;0000 || (none) || AES key schedule loaded flag<ref>VIA, [https://web.archive.org/web/20100526054140/http://linux.via.com.tw/support/beginDownload.action?eleid=181&fid=261 PadLock Programming Guide], v1.66, Aug 4, 2005, pp. 7-8. Archived from [http://linux.via.com.tw/support/beginDownload.action?eleid=181&fid=261 the original] on May 26, 2010.</ref><br>(CPUs with [[VIA PadLock]] only) || System
| 30 || 0x4000 0000 || (कोई नहीं) || एईएस कुंजी शेड्यूल लोडेड फ़्लैग
( केवल वीआईए पैडलॉक वाले सीपीयू)
| प्रणाली
|-
|-
| 31 || 0x8000&nbsp;0000 || AI || [[Alternate Instruction Set]] enabled<br/>([[VIA C3|VIA C5XL]] processors only)<ref>VIA, [http://www.bitsavers.org/components/viaTechnologies/C3-ais-appnote.pdf 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.</ref>  || System
| 31 || 0x8000 0000 || || वैकल्पिक निर्देश सेट सक्षम
( केवल VIA C5XL प्रोसेसर)  
| प्रणाली
|-
|-
! colspan="7" style="background:#efefef" | RFLAGS
! colspan="7" style="background:#efefef" | आर'''फ्लैग्स'''
|-
|-
| 32‑63 || 0xFFFF&nbsp;FFFF…<br>  …0000&nbsp;0000|| {{sdash}} || Reserved || {{sdash}}
| 32‑63 || 0xFFFF FFFF…  
…0000 0000
||| सुरक्षित
|
|}
|}
नोट: FLAGS रजिस्टर मान के भीतर फ्लैग (ओं) को क्वेरी करने के लिए तालिका में मास्क कॉलम AND [[ bitmask | bitmask]] ([[हेक्साडेसिमल]] मान के रूप में) है।
नोट: '''फ्लैग्स''' रजिस्टर मान के भीतर फ्लैग (ओं) को क्वेरी करने के लिए तालिका में मास्क कॉलम AND [[ bitmask | बिटमास्क]] ([[हेक्साडेसिमल]] मान के रूप में) है।


== उपयोग ==
== उपयोग ==
सभी FLAGS रजिस्टरों में [[ स्थिति कोड रजिस्टर | स्थिति कोड रजिस्टर]], फ्लैग बिट्स होते हैं जो एक [[मशीन भाषा|मशीन- लैंग्वेज]] के परिणाम देते हैंl मशीन-लैंग्वेज निर्देश दूसरे निर्देश को प्रभावित करते हैं। अंकगणित और तार्किक निर्देश कुछ या सभी फ्लैग सेट करते हैं, और प्रतिबंधी झंप अनुदेश कुछ फ्लैग के मूल्य के आधार पर चर कार्रवाई करते हैं। उदाहरण के लिए, <code>jz</code> (जम्प इफ जीरो / यदि शून्य हो तो कूदो), <code>jc</code> (जंप इफ कैरी), और <code>jo</code> (जम्प इफ ओवरफ्लो / यदि अतिप्रवाह हो तो कूदें) विशिष्ट फ्लैग्स पर निर्भर करते हैं। अन्य सशर्त कूद कई फ्लैग्स के संयोजन का परीक्षण करते हैं।
सभी '''फ्लैग्स''' रजिस्टरों में [[ स्थिति कोड रजिस्टर | स्थिति कोड रजिस्टर]], फ्लैग बिट्स होते हैं जो एक [[मशीन भाषा|मशीन- लैंग्वेज]] के परिणाम देते हैंl मशीन-लैंग्वेज निर्देश दूसरे निर्देश को प्रभावित करते हैं। अंकगणित और तार्किक निर्देश कुछ या सभी फ्लैग सेट करते हैं, और प्रतिबंधी झंप अनुदेश कुछ फ्लैग के मूल्य के आधार पर चर कार्रवाई करते हैं। उदाहरण के लिए, <code>jz</code> (जम्प इफ जीरो / यदि शून्य हो तो कूदो), <code>jc</code> (जंप इफ कैरी), और <code>jo</code> (जम्प इफ ओवरफ्लो) विशिष्ट फ्लैग्स पर निर्भर करते हैं। अन्य प्रतिबंधी झंप कई फ्लैग्स के संयोजन का परीक्षण करते हैं।


FLAGS रजिस्टरों को स्टैक से या स्टैक पर ले जाया जा सकता है। यह सीपीयू संदर्भ को बचाने और बहाल करने के काम का हिस्सा है, एक रूटीन के खिलाफ जैसे एक इंटरप्ट सर्विस रूटीन जिसके रजिस्टरों में परिवर्तन कॉलिंग कोड द्वारा नहीं देखा जाना चाहिए। यहाँ प्रासंगिक निर्देश हैं:
'''फ्लैग्स''' रजिस्टरों को स्टैक से या स्टैक पर ले जाया जा सकता है। यह सीपीयू संदर्भ को बचाने और बहाल करने के काम का हिस्सा है, एक रूटीन के खिलाफ जैसे एक इंटरप्ट सर्विस रूटीन जिसके रजिस्टरों में परिवर्तन कॉलिंग कोड द्वारा नहीं देखा जाना चाहिए। यहाँ प्रासंगिक निर्देश हैं:
*PUSHF और POPF निर्देश 16-बिट FLAGS रजिस्टर को स्थानांतरित करते हैं।
*PUSHF और POPF निर्देश 16-बिट '''फ्लैग्स''' रजिस्टर को स्थानांतरित करते हैं।
*PUSHFD/POPFD ([[i386]] आर्किटेक्चर के साथ पेश किया गया) 32-बिट डबल रजिस्टर EFLAGS को ट्रांसफर करता है।
*PUSHFD/POPFD ([[i386]] आर्किटेक्चर के साथ पेश किया गया) 32-बिट डबल रजिस्टर '''ईफ्लैग्स''' को ट्रांसफर करता है।
*PUSHFQ/POPFQ ([[x64]] आर्किटेक्चर के साथ पेश किया गया) 64-बिट क्वाडवर्ड रजिस्टर RFLAGS को ट्रांसफर करता है।
*PUSHFQ/POPFQ ([[x64]] आर्किटेक्चर के साथ पेश किया गया) 64-बिट क्वाडवर्ड रजिस्टर '''आरफ्लैग्स''' को ट्रांसफर करता है।
64-बिट मोड में, पुश/पीओपीएफ और पुशफक्यू/पीओपीएफक्यू उपलब्ध हैं लेकिन पुशफडी/पीओपीएफडी नहीं हैं।<ref>{{cite book|title=Intel 64 and IA-32 Architectures Software Developer’s Manual|url=http://download.intel.com/products/processor/manual/253667.pdf#page=351|volume=2B|date=May 2012}}</ref>{{Rp|4-349,4-432}}
64-बिट मोड में, पुश/पीओपीएफ और पुशफक्यू/पीओपीएफक्यू उपलब्ध हैं लेकिन पुशफडी/पीओपीएफडी नहीं हैं।<ref>{{cite book|title=Intel 64 and IA-32 Architectures Software Developer’s Manual|url=http://download.intel.com/products/processor/manual/253667.pdf#page=351|volume=2B|date=May 2012}}</ref>{{Rp|4-349,4-432}}


FLAGS रजिस्टर के निचले 8 बिट्स SAHF और LAHF द्वारा सीधे लोड/स्टोर मैनिपुलेशन (प्रकलन) के लिए भी खुले हैं (लोड/स्टोर AH को फ्लैग में)।
'''फ्लैग्स''' रजिस्टर के निचले 8 बिट्स SAHF और LAHF द्वारा सीधे लोड/स्टोर मैनिपुलेशन (प्रकलन) के लिए भी खुले हैं (लोड/स्टोर AH को फ्लैग में)।


=== उदाहरण ===
=== उदाहरण ===
FLAGS रजिस्टरों को पुश और पॉप करने की क्षमता एक प्रोग्राम को FLAGS में सूचनाओं को हेरफेर करने देती है जिसके लिए मशीन-लैंग्वेज निर्देश उपलब्ध नहीं हैं। उदाहरण के लिए,  <code>cld</code> और <code>std</code> निर्देश स्पष्ट करें और दिशा फ्लैग (DF) क्रमशः सेट करें; लेकिन डीएफ के पूरक के लिए कोई निर्देश नहीं है। यह निम्नलिखित [[विधानसभा कोड]] के साथ प्राप्त किया जा सकता है:
'''फ्लैग्स''' रजिस्टरों को पुश और पॉप करने की क्षमता एक प्रोग्राम को '''फ्लैग्स''' में सूचनाओं को हेरफेर करने देती है जिसके लिए मशीन-लैंग्वेज निर्देश उपलब्ध नहीं हैं। उदाहरण के लिए,  <code>cld</code> और <code>std</code> निर्देश स्पष्ट करें और दिशा फ्लैग (DF) क्रमशः सेट करें; लेकिन डीएफ के पूरक के लिए कोई निर्देश नहीं है। यह निम्नलिखित [[विधानसभा कोड]] के साथ प्राप्त किया जा सकता है:


<syntaxhighlight lang="nasm">
<syntaxhighlight lang="nasm">
Line 97: Line 130:
popf          ; Restore the original value of the FLAGS
popf          ; Restore the original value of the FLAGS
</syntaxhighlight>
</syntaxhighlight>
FLAGS रजिस्टर में हेरफेर करके, एक प्रोग्राम स्थापित प्रोसेसर के मॉडल को निर्धारित कर सकता है। उदाहरण के लिए, संरेखण फ्लैग को केवल [[Intel 80486]] और इसके बाद के संस्करण पर बदला जा सकता है। यदि प्रोग्राम इस फ्लैग को संशोधित करने का प्रयास करता है और यह महसूस करता है कि संशोधन कायम नहीं रहा, तो प्रोसेसर 486 से पहले का है।
'''फ्लैग्स''' रजिस्टर में हेरफेर करके, एक प्रोग्राम स्थापित प्रोसेसर के मॉडल को निर्धारित कर सकता है। उदाहरण के लिए, संरेखण फ्लैग को केवल [[Intel 80486]] और इसके बाद के संस्करण पर बदला जा सकता है। यदि प्रोग्राम इस फ्लैग को संशोधित करने का प्रयास करता है और यह महसूस करता है कि संशोधन कायम नहीं रहा, तो प्रोसेसर 486 से पहले का है।


[[P5 (माइक्रोआर्किटेक्चर)]] से प्रारम्भ होकर, [[CPUID]] निर्देश प्रोसेसर मॉडल की रिपोर्ट करता है। हालाँकि, उपरोक्त विधि पहले के मॉडलों के बीच अंतर करने के लिए उपयोगी बनी हुई है।
[[P5 (माइक्रोआर्किटेक्चर)]] से प्रारम्भ होकर, [[CPUID]] निर्देश प्रोसेसर मॉडल की रिपोर्ट करता है। हालाँकि, उपरोक्त विधि पहले के मॉडलों के बीच अंतर करने के लिए उपयोगी बनी हुई है।
Line 112: Line 145:
==संदर्भ==
==संदर्भ==
{{Reflist}}
{{Reflist}}
[[Category: डिजिटल रजिस्टर]] [[Category: X86 आर्किटेक्चर]]


[[Category: Machine Translated Page]]
[[Category:Created On 10/06/2023]]
[[Category:Created On 10/06/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:X86 आर्किटेक्चर]]
[[Category:डिजिटल रजिस्टर]]

Latest revision as of 10:50, 14 July 2023

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 निर्देश प्रोसेसर मॉडल की रिपोर्ट करता है। हालाँकि, उपरोक्त विधि पहले के मॉडलों के बीच अंतर करने के लिए उपयोगी बनी हुई है।

यह भी देखें

संदर्भ

  1. Intel 64 and IA-32 Architectures Software Developer's Manual (PDF). Vol. 1. May 2012. pp. 3–21.
  2. Intel 64 and IA-32 Architectures Software Developer’s Manual (PDF). Vol. 2B. May 2012.