Intel x86 Assembly Language & Microarchitecture
फंडामेंटल रजिस्टर करें
खोज…
16-बिट रजिस्टर
जब इंटेल ने मूल 8086 को परिभाषित किया, तो यह 16-बिट प्रोसेसर था जिसमें 20-बिट एड्रेस बस (नीचे देखें) था। उन्होंने 8 सामान्य-उद्देश्य 16-बिट रजिस्टरों को परिभाषित किया - लेकिन उन्हें कुछ निर्देशों के लिए विशिष्ट भूमिकाएं दीं:
-
AXसंचयकर्ता रजिस्टर।
कई ओपकोडों ने या तो इस रजिस्टर को ग्रहण किया, या यदि इसे निर्दिष्ट किया गया था तो वे तेज थे। -
DXडेटा रजिस्टर।
इसे कभी-कभीAXसाथ 32-बिट मान के उच्च 16 बिट्स के रूप में जोड़ा गया था - उदाहरण के लिए, एक गुणा के परिणाम के रूप में। -
CXगिनती रजिस्टर।
इसका उपयोग उन लूपों के लिए निहित काउंटर के रूप में कई लूप-उन्मुख निर्देशों में किया गया था - उदाहरण के लिएLOOPNE(लूप यदि नहीं के बराबर है) औरREP(दोहराया चाल / तुलना) -
BXआधार पंजी।
इसका उपयोग मेमोरी में एक संरचना के आधार को अनुक्रमित करने के लिए किया जा सकता है - उपरोक्त रजिस्टरों में से कोई भी सीधे मेमोरी में इंडेक्स करने के लिए उपयोग नहीं किया जा सकता है। -
SIस्रोत सूचकांक रजिस्टर।
यह निश्चित चाल के लिए स्मृति में निहित स्रोत सूचकांक था और संचालन की तुलना करता है। -
DIडेस्टिनेशन इंडेक्स रजिस्टर।
यह निश्चित चाल और संचालन की तुलना के लिए स्मृति में निहित गंतव्य सूचकांक था। -
SPस्टैक पॉइंटर रजिस्टर।
यह सेट में सबसे कम सामान्य प्रयोजन रजिस्टर है! इसने स्टैक में वर्तमान स्थिति की ओर इशारा किया, जिसका उपयोग स्पष्ट रूप सेPUSHऔरPOPसंचालन के लिए किया गया था, जो किRETसाथCALLऔरRETलिए निहित है, और बहुत ही व्यवधान के दौरान। जैसे, इसे किसी और चीज के लिए इस्तेमाल करना आपके कार्यक्रम के लिए खतरनाक था! -
BPआधार सूचक रजिस्टर।
जब सबरूटीन अन्य सबरूटीन्स को कॉल करते हैं, तो स्टैक कई "स्टैक फ्रेम" रखता है।BPको वर्तमान स्टैक फ्रेम को धारण करने के लिए इस्तेमाल किया जा सकता है, और फिर जब एक नया सबरूटीन कहा जाता था, तो इसे स्टैक पर बचाया जाता है, नए स्टैक फ्रेम को बनाया और इस्तेमाल किया जाता है, और आंतरिक सबरूटीन से लौटने पर पुराने स्टैक फ्रेम मान को बहाल किया जा सकता है ।
टिप्पणियाँ:
स्मृति में अनुक्रमण के लिए पहले तीन रजिस्टरों का उपयोग नहीं किया जा सकता है।
वर्तमान डेटा सेगमेंट में डिफ़ॉल्ट सूचकांक द्वारा
BX,SIऔरDI(नीचे देखें)।MOV AX, [BX+5] ; Point into Data Segment MOV AX, ES:[DI+5] ; Override into Extra SegmentDI, जबMOVSऔरCMPSजैसे मेमोरी-टू-मेमोरी ऑपरेशन में उपयोग किया जाता है, केवल अतिरिक्त सेगमेंट (नीचे देखें) का उपयोग करता है। इसे ओवरराइड नहीं किया जा सकता।SPऔरBPडिफ़ॉल्ट रूप से स्टैक सेगमेंट (नीचे देखें) का उपयोग करते हैं।
32-बिट रजिस्टर
जब इंटेल ने 80386 का उत्पादन किया, तो उन्होंने 16-बिट प्रोसेसर से 32-बिट तक उन्नत किया। 32-बिट प्रोसेसिंग का मतलब दो चीजें हैं: दोनों डेटा को हेर-फेर किया जा रहा था 32-बिट, और एक्सेस किए जा रहे मेमोरी एड्रेस 32-बिट थे। ऐसा करने के लिए, लेकिन अभी भी अपने पहले प्रोसेसर के साथ संगत हैं, उन्होंने प्रोसेसर के लिए पूरे नए मोड पेश किए। यह या तो 16-बिट मोड या 32-बिट मोड में था - लेकिन आप इस मोड को किसी भी डेटा, एड्रेसिंग या दोनों के लिए एक निर्देश-दर-निर्देश के आधार पर ओवरराइड कर सकते हैं!
सबसे पहले, उन्हें 32-बिट रजिस्टरों को परिभाषित करना था। उन्होंने इसे केवल 16 बिट्स से 32 बिट्स में मौजूदा आठ को विस्तारित करके और एक E उपसर्ग के साथ "विस्तारित" नाम दिया: EAX , EBX , ECX , EDX , ESI , EDI , EBP और ESP । इन रजिस्टरों के निचले 16 बिट्स पहले की तरह ही थे, लेकिन रजिस्टरों के ऊपरी हिस्से 32-बिट ऑपरेशन जैसे ADD और CMP लिए उपलब्ध थे। ऊपरी हिस्सों को अलग से सुलभ नहीं किया गया था क्योंकि वे 8-बिट रजिस्टरों के साथ किए गए थे।
प्रोसेसर के पास 16-बिट और 32-बिट मोड अलग करने के लिए था क्योंकि इंटेल ने कई ऑपरेशन के लिए एक ही ऑपकोड का उपयोग किया था: CMP AX,DX 16-बिट मोड में CMP AX,DX और 32-बिट मोड में CMP EAX,EDX में बिल्कुल एक ही ओपोड था ! इसका मतलब है कि समान कोड को किसी भी मोड में नहीं चलाया जा सकता है:
"में तत्काल ले जाएँ के लिए opcode
AX" है0xB8, तत्काल मूल्य के दो बाइट्स द्वारा पीछा किया:0xB8 0x12 0x34
"
EAXमें तत्काल ले जाएँ" का0xB8, इसके बाद तत्काल मूल्य के चार बाइट्स हैं:0xB8 0x12 0x34 0x56 0x78
इसलिए कोड को निष्पादित करते समय प्रोसेसर को पता होना चाहिए कि प्रोसेसर किस मोड पर है, ताकि यह बाइट्स की सही संख्या का उत्सर्जन करना जानता हो।
8-बिट रजिस्टर
पहले चार 16-बिट रजिस्टरों में उनके ऊपरी और निचले-आधे बाइट्स सीधे अपने रजिस्टरों के रूप में पहुंच सकते हैं:
-
AHऔरALAXरजिस्टर के उच्च और निम्न हिस्से हैं। -
BHऔरBLBXरजिस्टर के उच्च और निम्न हिस्से हैं। -
CHऔरCLCXरजिस्टर के उच्च और निम्न हिस्से हैं। -
DHऔरDLDXरजिस्टर के उच्च और निम्न हिस्से हैं।
ध्यान दें कि इसका मतलब है कि AH या AL को बदलने से तुरंत AX बदल जाएगा! यह भी ध्यान दें कि 8-बिट रजिस्टर पर कोई भी ऑपरेशन उसके "पार्टनर" को प्रभावित नहीं कर सकता है - AL बढ़ाता है कि यह 0xFF से 0x00 तक ओवरफ्लो हो गया AH नहीं बदलेगा।
64-बिट रजिस्टरों में उनके निचले बाइट्स का प्रतिनिधित्व करने वाले 8-बिट संस्करण भी हैं:
-
RSIलिएSIL -
RDIलिएDIL -
BPLके लिएRBP -
RSPलिएSPL
R15 माध्यम से R8 को पंजीकृत करने के लिए यही लागू होता है: उनके संबंधित निचले बाइट भागों को R8B - R15B नाम दिया गया है।
खंड रजिस्टर
विभाजन
जब इंटेल 8086 मूल डिजाइन कर रहा था, तो पहले से ही 8-बिट प्रोसेसर की संख्या थी जिसमें 16-बिट क्षमताएं थीं - लेकिन वे एक सच्चे 16-बिट प्रोसेसर का उत्पादन करना चाहते थे। वे पहले से ही जो कुछ भी था उससे बेहतर और अधिक सक्षम उत्पादन करना चाहते थे, इसलिए वे 16-बिट एड्रेसिंग रजिस्टरों द्वारा निहित 65,536 बाइट्स की अधिकतम मेमोरी तक पहुंचने में सक्षम होना चाहते थे।
मूल खंड रजिस्टर
तो उन्होंने "सेगमेंट" के विचार को लागू किया - 16-बिट एड्रेस रजिस्टरों द्वारा अनुक्रमित मेमोरी का 64 किलोबाइट ब्लॉक - जो कि कुल मेमोरी के विभिन्न क्षेत्रों को संबोधित करने के लिए फिर से आधारित हो सकता है। इन सेगमेंट बेस को रखने के लिए, उन्होंने सेगमेंट रजिस्टर को शामिल किया:
-
CSकोड सेगमेंट रजिस्टर।
यह उस कोड के खंड को रखता है जिसे वर्तमान में क्रियान्वित किया जा रहा है, जो निहितIP(निर्देश सूचक) रजिस्टर द्वारा अनुक्रमित किया गया है। -
DSडेटा सेगमेंट रजिस्टर।
यह प्रोग्राम द्वारा डेटा में हेरफेर के लिए डिफ़ॉल्ट सेगमेंट रखता है। -
ESअतिरिक्त सेगमेंट रजिस्टर।
यह कुल मेमोरी में एक साथ डेटा संचालन के लिए एक दूसरा डेटा खंड रखता है। -
SSस्टैक सेगमेंट रजिस्टर।
यह मेमोरी का सेगमेंट रखता है जो वर्तमान स्टैक को धारण करता है।
खंड का आकार?
खंड रजिस्टर किसी भी आकार का हो सकता है, लेकिन उन्हें 16 बिट्स चौड़ा करने से अन्य रजिस्टरों के साथ हस्तक्षेप करना आसान हो गया। अगला सवाल था: क्या खंडों का ओवरलैप होना चाहिए, और यदि हां, तो कितना? उस प्रश्न का उत्तर कुल स्मृति आकार को निर्देशित करेगा जिसे एक्सेस किया जा सकता है।
यदि कोई ओवरलैप नहीं था, तो पता स्थान 32 बिट्स होगा - 4 गीगाबाइट - उस समय पूरी तरह से अनसुना आकार! 8 बिट्स का एक अधिक "प्राकृतिक" ओवरलैप 24-बिट एड्रेस स्पेस या 16 मेगाबाइट का उत्पादन करेगा। अंत में इंटेल ने 12-बिट ओवरलैप के साथ पता स्थान 1 मेगाबाइट बनाकर प्रोसेसर पर चार और एड्रेस पिंस को बचाने का फैसला किया - उन्होंने इसे समय के लिए पर्याप्त रूप से बड़ा माना!
अधिक सेगमेंट रजिस्टर!
जब इंटेल 80386 डिजाइन कर रहा था, तो उन्होंने माना कि 4 सेगमेंट रजिस्टरों के मौजूदा सूट उन कार्यक्रमों की जटिलता के लिए पर्याप्त नहीं थे जो वे चाहते थे कि वे समर्थन करने में सक्षम हों। इसलिए उन्होंने दो और जोड़े:
-
FSद सेग्मेंट रजिस्टर -
GSग्लोबल सेगमेंट रजिस्टर
इन नए सेगमेंट रजिस्टरों में कोई प्रोसेसर-लागू उपयोग नहीं था: वे केवल उस प्रोग्रामर के लिए उपलब्ध थे जो प्रोग्रामर चाहता था।
कुछ का कहना है कि मौजूदा सेट के
C,D,Eथीम को जारी रखने के लिए नामों को चुना गया था ...
64-बिट रजिस्टर
AMD एक प्रोसेसर निर्माता है जिसने 80386 के डिजाइन को इंटेल से संगत - लेकिन प्रतिस्पर्धी - संस्करणों का उत्पादन करने के लिए लाइसेंस दिया था। उन्होंने डिजाइन में आंतरिक परिवर्तन किए ताकि वे डिजाइन में थ्रूपुट या अन्य संवर्द्धन में सुधार कर सकें, जबकि अभी भी उन्हीं कार्यक्रमों को निष्पादित करने में सक्षम हैं।
एक-अप इंटेल के लिए, वे इंटेल 32-बिट डिज़ाइन के लिए 64-बिट एक्सटेंशन के साथ आए और पहले 64-बिट चिप का उत्पादन किया जो अभी भी 32-बिट x86 कोड चला सकता है। इंटेल 64-बिट वास्तुकला के अपने संस्करणों में एएमडी के डिजाइन के बाद समाप्त हो गया।
64-बिट डिज़ाइन ने रजिस्टर सेट में कई बदलाव किए, जबकि अभी भी पिछड़े हुए संगत हैं:
- मौजूदा सामान्य-उद्देश्य रजिस्टर को 64 बिट तक विस्तारित किया गया था, और एक
Rउपसर्ग के साथ नामित किया गया था:RAX,RBX,RCX,RDX,RSI,RDI,RBPऔरRSP।फिर, इन रजिस्टरों के निचले हिस्सों में पहले की तरह ही
E-prefix रजिस्टर थे, और शीर्ष हिस्सों को स्वतंत्र रूप से एक्सेस नहीं किया जा सकता था। - 8 और 64-बिट रजिस्टर जोड़े गए, और नाम नहीं दिए गए लेकिन केवल गिने गए:
R8,R9,R10,R11,R12,R13,R14, औरR15।- 32-बिट इन रजिस्टरों की कम आधा कर रहे हैं
R8Dके माध्यम सेR15D(हमेशा की तरह DWORD के लिए डी)। - इन रजिस्टरों के सबसे कम 16 बिट्स को
Wसे रजिस्टर नाम तकR8W:R8Wमाध्यम सेR15Wमाध्यम से पहुँचा जा सकता है।
- 32-बिट इन रजिस्टरों की कम आधा कर रहे हैं
- सभी 16 रजिस्टरों में से सबसे कम 8 बिट्स को अब एक्सेस किया जा सकता है:
- पारंपरिक
AL,BL,CL, औरDL; - (पारंपरिक रूप से) सूचक रजिस्टरों के निम्न बाइट्स:
SIL,DIL,BPL, औरSPL; - और 8 नए रजिस्टरों के निम्न बाइट्स:
R8Bमाध्यम सेR15B8R15B। - हालांकि,
AH,BH,CH, औरDHएक आरईएक्स प्रीफ़िक्स (64 बिट ऑपरेंड साइज़ के लिए, या आर 8-आर 15 का उपयोग करने के लिए, याSIL,DIL,BPL, याSPL) निर्देश में दुर्गम हैं। एक REX उपसर्ग के साथ, मशीन-कोड बिट-पैटर्न जोAHबजाय इसका मतलबSPL, और इसी तरह। इंटेल के निर्देश संदर्भ मैनुअल की तालिका 3-1 देखें (खंड 2)।
- पारंपरिक
32-बिट रजिस्टर में लिखना हमेशा पूर्ण-चौड़ाई वाले रजिस्टर के ऊपरी 32 बिट्स को शून्य करता है, 8 या 16-बिट रजिस्टर के लेखन के विपरीत (जो पुराने मूल्य के साथ विलय होता है, जो आउट-ऑफ-ऑर्डर निष्पादन के लिए एक अतिरिक्त निर्भरता है )।
झंडे रजिस्टर
जब x86 अरिथमेटिक लॉजिक यूनिट (ALU) NOT और ADD जैसे ऑपरेशन करता है, तो यह एक विशेष 16-बिट FLAGS रजिस्टर में इन ऑपरेशन ("शून्य हो गया", "अतिप्रवाह", "नकारात्मक हो गया") के परिणामों को FLAGS । 32-बिट प्रोसेसर ने इसे 32 बिट्स में अपग्रेड किया और इसे EFLAGS कहा, जबकि 64-बिट प्रोसेसर ने इसे 64 बिट्स में अपग्रेड किया और इसे RFLAGS कहा।
हालत कोड
लेकिन नाम कोई बात नहीं, रजिस्टर सीधे पहुंच योग्य नहीं है (कुछ निर्देशों को छोड़कर - नीचे देखें)। इसके बजाय, व्यक्तिगत झंडों को कुछ निर्देशों में संदर्भित किया जाता है, जैसे सशर्त कूद या सशर्त सेट, जिसे Jcc और SETcc रूप में जाना जाता है, जहाँ cc अर्थ "कंडीशन कोड" होता है और निम्नलिखित तालिका को संदर्भित करता है:
| शर्त कोड | नाम | परिभाषा |
|---|---|---|
E , Z | बराबर, शून्य | ZF == 1 |
NE , NZ | न के बराबर, न जीरो | ZF == 0 |
O | बाढ़ | OF == 1 |
NO | कोई अतिप्रवाह नहीं | OF == ० |
S | पर हस्ताक्षर किए | SF == 1 |
NS | हस्ताक्षर नहीं किए हैं | SF == 0 |
P | समानता | PF == 1 |
NP | कोई समानता नहीं | PF == 0 |
| -------------- | ---- | ---------- |
C , B , NAE | कैरी, नीचे, ऊपर या बराबर नहीं | CF == १ |
NC , NB , AE | नो कैरी, नॉट डाउन, एबव या इक्वल | CF == ० |
A , NBE | ऊपर, नीचे या बराबर नहीं | CF == 0 और ZF == 0 |
NA , BE | ऊपर नहीं, नीचे या बराबर | CF == 1 या ZF == 1 |
| --------------- | ---- | ---------- |
GE , NL | ग्रेटर या इक्वल, कम नहीं | SF == OF |
NGE , L | ग्रेटर या इक्वल नहीं, कम | SF ! = OF |
G , NLE | ग्रेटर, कम या बराबर नहीं | ZF == 0 और SF == OF |
NG , LE | ग्रेटर नहीं, कम या बराबर | ZF == 1 या SF ! = OF |
16 बिट्स में, 0 से 1 घटाना या तो 65,535 या -1 इस पर निर्भर करता है कि अहस्ताक्षरित या हस्ताक्षरित अंकगणित का उपयोग किया जाता है - लेकिन गंतव्य 0xFFFF दोनों तरह से रखता है। यह केवल स्थिति कोड की व्याख्या करके है कि अर्थ स्पष्ट है। यह और भी बता रही है, तो 1 से घटाया जाता है 0x8000 : अहस्ताक्षरित गणित में, कि केवल बदलता है 32,768 में 32,767 ; जबकि हस्ताक्षरित अंकगणित में यह -32,768 को 32,767 में बदलता है - एक बहुत अधिक उल्लेखनीय अतिप्रवाह!
हालत कोड तालिका में तीन ब्लॉकों में बांटे गए हैं: साइन-अप्रासंगिक, अहस्ताक्षरित और हस्ताक्षरित। बाद वाले दो ब्लॉक के अंदर नामांकित "ऊपर" और "नीचे" का उपयोग करता है, बिना हस्ताक्षर किए, और "ग्रेटर" या हस्ताक्षर के लिए "कम"। तो JB "जंप इफ नीचे" (अहस्ताक्षरित) होगा, जबकि JL "जंप इफ लेस" (हस्ताक्षरित) होगा।
सीधे FLAGS एक्सेस करना
उपर्युक्त शर्त कोड पूर्वनिर्धारित अवधारणाओं की व्याख्या करने के लिए उपयोगी हैं, लेकिन वास्तविक ध्वज बिट्स भी निम्नलिखित दो निर्देशों के साथ सीधे उपलब्ध हैं:
- फ्लैग के साथ
LAHFलोडAHरजिस्टर -
SAHFस्टोरAHफ़्लैग में पंजीकृत है
इन निर्देशों के साथ केवल कुछ झंडे की नकल की जाती है। पूरे FLAGS / EFLAGS / RFLAGS रजिस्टर बचाया या ढेरों पर बहाल किया जा सकता:
-
PUSHF/POPFपुश / 16-बिट पॉपFLAGSढेर से / पर -
PUSHFD/POPFDपुश / पॉप 32-बिटEFLAGSपर / स्टैक से -
PUSHFQ/POPFQपुश / 64-बिट पॉपRFLAGSढेर से / पर
ध्यान दें कि वर्तमान [R/E]FLAGS रजिस्टर को स्वचालित रूप से सहेजने और पुनर्स्थापित करने में बाधा उत्पन्न होती है।
अन्य झंडे
साथ ही ऊपर वर्णित ALU झंडे, FLAGS रजिस्टर अन्य प्रणाली-राज्य झंडे को परिभाषित करता है:
-
IFबाधित झंडा।
यह विश्व स्तर पर इंटरप्ट को सक्षम करने के लिएSTIनिर्देश के साथ सेट किया गया है, औरCLIनिर्देश के साथ वैश्विक रूप से अक्षम इंटरप्ट को साफ किया गया है। -
DFदिशा ध्वज।
मेमोरी-टू-मेमोरी ऑपरेशन जैसे किCMPSऔरMOVS(मेमोरी स्थानों के बीच तुलना और स्थानांतरित करने के लिए) स्वचालित रूप से निर्देश के भाग के रूप में इंडेक्स रजिस्टरों कोCMPSयाMOVS।DFफ्लैग तय करता है कि कौन सा होता है: यदिCLDअनुदेश के साथ मंजूरी दे दी जाती है, तो वेCLDजाते हैं; अगरSTDनिर्देश के साथ सेट किया गया है, तो वे कम हो जाते हैं। -
TFजाल करें। यह एक डिबग ध्वज है। इसे सेट करने से प्रोसेसर "सिंगल-स्टेप" मोड में आ जाएगा: प्रत्येक निर्देश के निष्पादित होने के बाद इसे "सिंगल स्टेप इंटरप्ट हैंडलर" कहा जाएगा, जिसे डिबगर द्वारा नियंत्रित किए जाने की उम्मीद है। इस ध्वज को सेट या साफ़ करने के लिए कोई निर्देश नहीं हैं: आपको मेमोरी में रहते हुए थोड़ा हेरफेर करने की आवश्यकता है।
80286 झंडे
80286 में नई मल्टीटास्किंग सुविधाओं का समर्थन करने के लिए, इंटेल ने FLAGS रजिस्टर में अतिरिक्त झंडे जोड़े:
-
IOPLI / O विशेषाधिकार स्तर।
मल्टीटास्किंग कोड की सुरक्षा के लिए, कुछ कार्यों के लिए I / O पोर्ट तक पहुँचने के लिए विशेषाधिकारों की आवश्यकता थी, जबकि अन्य को उन्हें एक्सेस करने से रोकना था। इंटेल ने चार-स्तरीय विशेषाधिकार पैमाने पेश किए, जिसमें002 को सबसे अधिक विशेषाधिकार प्राप्त किया गया और112 को कम से कम। यदिIOPLमौजूदा विशेषाधिकार स्तर से कम था, तो I / O पोर्ट तक पहुँचने, याIOPLको सक्षम या अक्षम करने का कोई भी प्रयास, इसके बजाय सामान्य सुरक्षा दोष का कारण होगा। -
NTनेस्ट टास्क ध्वज।
यह ध्वज सेट किया गया था यदि एक कार्यCALLदूसरे कार्य को संपादित करता है, जो एक संदर्भ स्विच का कारण बनता है। सेट फ्लैग ने प्रोसेसर कोRETनिष्पादित होने पर एक संदर्भ स्विच करने के लिए कहा।
80386 झंडे
प्रोसेसर में डिज़ाइन की गई अतिरिक्त सुविधाओं का समर्थन करने के लिए '386 अतिरिक्त झंडे की जरूरत थी।
-
RFफिर से शुरू झंडा।
`386 ने डिबग रजिस्टरों को जोड़ा, जो एक निश्चित मेमरी स्थान को पढ़ने, लिखने या निष्पादित करने जैसे विभिन्न हार्डवेयर एक्सेस पर डिबगर को आमंत्रित कर सकते थे। हालाँकि, जब डिबग हैंडलर निर्देश को निष्पादित करने के लिए लौटा, तो एक्सेस तुरंत डिबग हैंडलर को फिर से लागू करेगा! या कम से कम यह अगर यह फिर से शुरू होने वाले झंडे के लिए नहीं था, जो स्वचालित रूप से डिबग हैंडलर में प्रवेश पर सेट है, और हर निर्देश के बाद स्वचालित रूप से साफ़ हो जाता है। यदि रिज्यूम फ़्लैग सेट किया जाता है, तो डिबग हैंडलर को आमंत्रित नहीं किया जाता है। -
VMद वर्चुअल 8086 फ्लैग।
पुराने 16-बिट कोड के साथ-साथ नए 32-बिट कोड का समर्थन करने के लिए, 80386 एक वर्चुअल 8086 कार्यकारी की सहायता से "वर्चुअल 8086" मोड में 16-बिट टास्क चला सकता है।VMध्वज ने संकेत दिया कि यह कार्य एक आभासी 8086 कार्य था।
80486 झंडे
जैसे ही इंटेल आर्किटेक्चर में सुधार हुआ, यह कैश और सुपर-स्केलर निष्पादन जैसी तकनीक के माध्यम से तेज हो गया। जिसे धारणा बनाकर सिस्टम तक पहुंच को अनुकूलित करना था। उन मान्यताओं को नियंत्रित करने के लिए, अधिक झंडे की आवश्यकता थी:
-
ACसंरेखण चेक ध्वज x86 आर्किटेक्चर हमेशा किसी भी बाइट सीमा पर मल्टी-बाइट मेमोरी वैल्यू तक पहुंच सकता है, कुछ आर्किटेक्चर के विपरीत जो उन्हें आकार-संरेखित करने की आवश्यकता थी (4-बाइट मान 4-बाइट सीमाओं पर होने की आवश्यकता थी)। हालाँकि, ऐसा करने के लिए यह कम कुशल था, क्योंकि कई मेमोरी एक्सेस की जरूरत नहीं थी। यदिACध्वज सेट किया गया था, तो कोड को निष्पादित करने के बजाए एक अविशिष्ट पहुंच एक अपवाद को बढ़ाएगा। इस तरह,ACसेट के साथ विकास के दौरान कोड में सुधार किया जा सकता है, लेकिन उत्पादन कोड के लिए बंद कर दिया गया है।
पेंटियम झंडे
पेंटियम ने वर्चुअलाइज़िंग के लिए अधिक समर्थन जोड़ा, CPUID अनुदेश के लिए समर्थन का समर्थन किया:
-
VIFवर्चुअल इंटरप्ट फ्लैग।
यह इस कार्य कीIFकी एक आभासी प्रति है - चाहे यह टास्क इंटरप्ट को अक्षम करना चाहता हो या नहीं, वास्तव में Global Interrupts को प्रभावित किए बिना। -
VIPवर्चुअल इंटरप्ट लंबित ध्वज।
यह इंगित करता है किVIFद्वारा एक अवरोध को लगभग अवरुद्ध कर दिया गया था, इसलिए जब टास्क एकSTIकरता है तो इसके लिए एक आभासी अवरोध खड़ा किया जा सकता है। -
IDCPUID-allowed फ्लैग।
CPUIDअनुदेश को निष्पादित करने के लिए इस कार्य को अनुमति दें या नहीं। एक वर्चुअल मॉनीटर इसे अस्वीकार कर सकता है, और अनुरोध को टास्क में "झूठ" बोल सकता है यदि यह निर्देश निष्पादित करता है।