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

From Vigyanwiki
Line 12: Line 12:
|-
|-
! बिट # !! मास्क !!संक्षेपण
! बिट # !! मास्क !!संक्षेपण
! Description !! Category !! =1 !! =0
! विवरण !! Category !! =1 !! =0


|-
|-
! colspan="7" style="background:#efefef" | FLAGS
! colspan="7" style="background:#efefef" | FLAGS/'''फ्लैग्स'''
|-
|-
| 0 || 0x0001 || CF || [[Carry flag]] || Status || CY(Carry) || NC(No Carry)
| 0 || 0x0001 || सीएफ़ || [[Carry flag|कैरी फ्लैग]] || स्टेटस || CY(Carry) || NC(No Carry)
|-
|-
| 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 || {{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}}
|-
|-
| 2 || 0x0004 || PF || [[Parity flag]] || Status || PE(Parity Even) || PO(Parity Odd)
| 2 || 0x0004 || PF || [[Parity flag|Parity]][[Carry flag|फ्लैग]]|| स्टेटस || PE(Parity Even) || PO(Parity Odd)
|-
|-
| 3 || 0x0008 || {{sdash}} || Reserved<ref name=r8085/> || {{sdash}}
| 3 || 0x0008 || {{sdash}} || Reserved<ref name=r8085/> || {{sdash}}
|-
|-
| 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 || AF || [[Half-carry_flag#The_Auxiliary_Carry_Flag_in_x86|Auxiliary Carry फ्लैग]]<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> || स्टेटस || AC(Auxiliary Carry) || NA(No Auxiliary Carry)
|-
|-
| 5 || 0x0020 || {{sdash}} || Reserved<ref name=r8085/> || {{sdash}}
| 5 || 0x0020 || {{sdash}} || Reserved<ref name=r8085/> || {{sdash}}
|-
|-
| 6 || 0x0040 || ZF || [[Zero flag]] || Status || ZR(Zero) || NZ(Not Zero)
| 6 || 0x0040 || ZF || [[Zero flag|Zero फ्लैग]] || स्टेटस || ZR(Zero) || NZ(Not Zero)
|-
|-
| 7 || 0x0080 || SF || [[Sign flag]] || Status || NG(Negative) || PL(Positive)
| 7 || 0x0080 || SF || [[Sign flag|Sign फ्लैग]] || स्टेटस || NG(Negative) || PL(Positive)
|-
|-
| 8 || 0x0100 || TF || [[Trap flag]] (single step) || Control
| 8 || 0x0100 || TF || [[Trap flag|Trap]] [[Carry flag|फ्लैग]] (single step) || नियंत्रण
|
|-
|-
| 9 || 0x0200 || IF || [[IF (x86 flag)|Interrupt enable flag]] || Control || EI(Enable Interrupt) || DI(Disable Interrupt)
| 9 || 0x0200 || IF || [[IF (x86 flag)|अगर इंटरप्ट सक्षम]] [[Carry flag|फ्लैग]]|| नियंत्रण || EI(Enable Interrupt) || DI(Disable Interrupt)
|-
|-
| 10 || 0x0400 || DF || [[Direction flag]] || Control || DN(Down) || UP(Up)
| 10 || 0x0400 || DF || [[Direction flag|Direction]] [[Carry flag|फ्लैग]]|| नियंत्रण || DN(Down) || UP(Up)
|-
|-
| 11 || 0x0800 || OF || [[Overflow flag]] || Status || OV(Overflow) || NV(Not Overflow)
| 11 || 0x0800 || OF || [[Overflow flag|Overflow]] [[Carry flag|फ्लैग]]|| स्टेटस || OV(Overflow) || NV(Not Overflow)
|-
|-
| 12-13 || 0x3000 || IOPL || [[IOPL|I/O privilege level]] (286+ only), <br>always all-1s on 8086 and 186 || System
| 12-13 || 0x3000 || IOPL || [[IOPL|I/O privilege level]] (286+ only), <br>always all-1s on 8086 and 186 || System
|
|-
|-
| 14 || 0x4000 || NT || Nested task flag (286+ only), <br>always 1 on 8086 and 186 || System
| 14 || 0x4000 || NT || Nested task [[Carry flag|फ्लैग]] (286+ only), <br>always 1 on 8086 and 186 || System
|
|-
|-
| 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 || MD || Mode [[Carry 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. || नियंत्रण || (NEC only)<br>Native Mode<br>([[Intel 80186|186]] compatible) || (NEC only)<br>Emulation Mode<br>([[Intel 8080|8080]] compatible)
|-
|-
! colspan="7" style="background:#efefef" | EFLAGS
! colspan="7" style="background:#efefef" | EFLAGS
|-
|-
| 16 || 0x0001&nbsp;0000 || RF || [[Resume flag]] (386+ only) || System
| 16 || 0x0001&nbsp;0000 || RF || [[Resume flag|Resume]] [[Carry flag|फ्लैग]] (386+ only) || System
|-
|-
| 17 || 0x0002&nbsp;0000 || VM || [[Virtual 8086 mode]] flag (386+ only) || System
| 17 || 0x0002&nbsp;0000 || VM || [[Virtual 8086 mode]] [[Carry flag|फ्लैग]] (386+ only) || System
|-
|-
| 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&nbsp;0000 || AC || Alignment Check (486+, ring 3),<br>[[Supervisor_Mode_Access_Prevention|SMAP]] Access Check ([[Broadwell_(microarchitecture)|Broadwell]]+, ring 0-2) || System
|-
|-
| 19 || 0x0008&nbsp;0000 || VIF || [[Virtual_8086_mode#VME|Virtual interrupt flag]] (Pentium+) || System
| 19 || 0x0008&nbsp;0000 || VIF || [[Virtual_8086_mode#VME|Virtual interrupt]] [[Carry flag|फ्लैग]] (Pentium+) || System
|
|-
|-
| 20 || 0x0010&nbsp;0000 || VIP || [[Virtual_8086_mode#VME|Virtual interrupt pending]] (Pentium+) || System
| 20 || 0x0010&nbsp;0000 || VIP || [[Virtual_8086_mode#VME|Virtual interrupt pending]] (Pentium+) || System

Revision as of 21:24, 14 June 2023

FLAGS (फ्लैग्स) प्रोसेसर रजिस्टर स्थिति रजिस्टर है जिसमें x86 CPU की वर्तमान स्थिति होती है। फ्लैग बिट्स का आकार और अर्थ आर्किटेक्चर निर्भर हैं। यह सामान्यतः अंकगणितीय संचालन के परिणाम के साथ-साथ वर्तमान समय में सीपीयू संचालन पर लगाए गए प्रतिबंधों की जानकारी को दर्शाता है। उनमें से कुछ प्रतिबंधों में कुछ व्यवधानों को ट्रिगर होने से रोकना, विशेषाधिकार प्राप्त निर्देशों के वर्ग के निष्पादन पर रोक लगाना सम्मिलित हो सकता है। अतिरिक्त स्थिति फ़्लैग मेमोरी मैपिंग को बायपास कर सकते हैं और परिभाषित कर सकते हैं कि सीपीयू को अंकगणितीय अतिप्रवाह पर क्या कार्रवाई करनी चाहिए।

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

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

FLAGS

इंटेल x86 FLAGS रजिस्टर[1]
बिट # मास्क संक्षेपण विवरण Category =1 =0
FLAGS/फ्लैग्स
0 0x0001 सीएफ़ कैरी फ्लैग स्टेटस CY(Carry) NC(No Carry)
1 0x0002 Reserved, always 1 in EFLAGS [2][3]
2 0x0004 PF Parityफ्लैग स्टेटस PE(Parity Even) PO(Parity Odd)
3 0x0008 Reserved[3]
4 0x0010 AF Auxiliary Carry फ्लैग[4] स्टेटस AC(Auxiliary Carry) NA(No Auxiliary Carry)
5 0x0020 Reserved[3]
6 0x0040 ZF Zero फ्लैग स्टेटस ZR(Zero) NZ(Not Zero)
7 0x0080 SF Sign फ्लैग स्टेटस NG(Negative) PL(Positive)
8 0x0100 TF Trap फ्लैग (single step) नियंत्रण
9 0x0200 IF अगर इंटरप्ट सक्षम फ्लैग नियंत्रण EI(Enable Interrupt) DI(Disable Interrupt)
10 0x0400 DF Direction फ्लैग नियंत्रण DN(Down) UP(Up)
11 0x0800 OF Overflow फ्लैग स्टेटस 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 फ्लैग (286+ only),
always 1 on 8086 and 186
System
15 0x8000 MD Mode फ्लैग (NEC V-series only),[5]
reserved on all Intel CPUs.
Always 1 on 8086/186, 0 on 286 and later.
नियंत्रण (NEC only)
Native Mode
(186 compatible)
(NEC only)
Emulation Mode
(8080 compatible)
EFLAGS
16 0x0001 0000 RF Resume फ्लैग (386+ only) System
17 0x0002 0000 VM Virtual 8086 mode फ्लैग (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 फ्लैग (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 निर्देश प्रोसेसर मॉडल की रिपोर्ट करता है। हालाँकि, उपरोक्त विधि पहले के मॉडलों के बीच अंतर करने के लिए उपयोगी बनी हुई है।

यह भी देखें

संदर्भ

  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. 1. Dec 2016. p. 78.
  3. 3.0 3.1 3.2 "Silicon reverse engineering: The 8085's undocumented flags". www.righto.com. Retrieved 2018-10-21.
  4. Intel 64 and IA-32 Architectures Software Developer’s Manual, Vol. 1. Dec 2022. p. 3-16.
  5. NEC, 16-bit V-Series User's Manual, document no. U11301E, sep 2000, p. 186
  6. VIA, PadLock Programming Guide, v1.66, Aug 4, 2005, pp. 7-8. Archived from the original on May 26, 2010.
  7. 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.
  8. Intel 64 and IA-32 Architectures Software Developer’s Manual (PDF). Vol. 2B. May 2012.