यह बहुत बुरा है कि आप एक गन्दा वास्तुकला के साथ एक माइक्रोप्रोसेसर के लिए असेंबलर सीख रहे हैं। आपको एलईएस निर्देश जैसे भ्रमित अवधारणाएं मिलती हैं।
परंपरागत माइक्रोप्रोसेसर के पास पूर्ण स्मृति पता रखने के लिए काफी बड़े रजिस्ट्रार हैं। आप बस एक मेमोरी लोकेशन के पते को रजिस्टर में लोड कर सकते हैं, और फिर रजिस्टर के माध्यम से उस स्थान (और आमतौर पर इंडेक्सिंग के साथ पास) तक पहुंच सकते हैं।
कुछ मशीनें (विशेष रूप से इंटेल 286 जो आप प्रोग्रामिंग कर रहे हैं), केवल 16 बिट रजिस्ट्रार थे लेकिन 1 एमबी मेमोरी को संबोधित कर सकते थे। इस मामले में, एक रजिस्टर में पर्याप्त बिट्स नहीं होते हैं: आपको 20 बिट्स की आवश्यकता होती है, लेकिन रजिस्ट्रार केवल 16 बिट होते हैं।
समाधान एक दूसरा रजिस्टर है जिसमें लापता बिट्स शामिल हैं। 32 बिट पते का उत्पादन करने के लिए एक साधारण योजना के लिए 2 रजिस्टरों की आवश्यकता होती थी, जिनमें से एक में 16 बिट्स थे, जिनमें से एक ऊपरी 16 बिट्स था। फिर दो रजिस्ट्रारों का संदर्भ देने वाला निर्देश समझ में आता है: आपको पूर्ण स्मृति पता पाने के लिए दोनों की आवश्यकता है।
इंटेल ने एक मैसियर योजना का चयन किया: इंडेक्स रजिस्टर (आपके मामले में बीएक्स) में कम 16 बिट्स हैं, और अन्य रजिस्टर (ईएस कहा जाता है) में 16 बिट्स हैं जो 4 बिट्स को छोड़ दिया गया है, और इंडेक्स रजिस्टर में जोड़ा गया है परिणामस्वरूप पता पाने के लिए। ईएस को "सेगमेंट" रजिस्टर कहा जाता है, लेकिन जब तक आप Multics operating system लगभग 1 9 68 के बारे में पढ़ते हैं, तो इसका कोई मतलब नहीं होगा।
[सेगमेंट और सेगमेंट रजिस्ट्रार वास्तव में मल्टीक्स तरीके को लागू करते समय एक दिलचस्प विचार हैं। यदि आपको नहीं पता कि यह क्या है, और आपके पास कोई कंप्यूटर और/या सूचना आर्किटेक्चर में रूचि है, तो मल्टीक्स पर इलियट ऑर्गेनिक पुस्तक ढूंढें और इसे कवर करने के लिए कवर पढ़ें। आप 60 के दशक के उत्तरार्ध में जो कुछ भी कर चुके थे, उससे डरेंगे और लगता है कि "प्रगति" के 50 वर्षों में खो गया है।]
x86 में विचार का क्या छोड़ दिया गया है यह बहुत मजाक है, कम से कम जिस तरह से "आधुनिक" ऑपरेटिंग सिस्टम में प्रयोग किया जाता है। आप वास्तव में परवाह नहीं करते हैं; जब कुछ हार्डवेयर डिजाइनर आपको मशीन के साथ प्रस्तुत करते हैं, तो आपको इसके साथ रहना होगा।
इंटेल 286 के लिए, आपको बस एक पूर्ण पता पाने के लिए एक सेगमेंट रजिस्टर और एक इंडेक्स रजिस्टर लोड करना होगा। एक पूर्ण पता बनाने के लिए प्रत्येक मशीन इंस्ट्रुक्शन को एक इंडेक्स रजिस्टर और एक सेगमेंट रजिस्टर का संदर्भ देना होता है। इंटेल 286 के लिए, 4 ऐसे सेगमेंट रीगस्टर हैं: डीएस, एसएस, ईएस, और सीएस। प्रत्येक निर्देश प्रकार स्पष्ट रूप से एक इंडेक्स रजिस्टर को निर्दिष्ट करता है और 4 सेगमेंट रजिस्टरों में से एक को स्पष्ट रूप से चुनता है जब तक कि आप एक स्पष्ट ओवरराइड प्रदान न करें जो कहता है कि किस का उपयोग करना है। जेएमपी निर्देश सीएस का उपयोग करते हैं जबतक कि आप अन्यथा नहीं कहें। एमओवी निर्देश डीएस का उपयोग करते हैं जबतक कि आप अन्यथा नहीं कहें। पुश निर्देश एसएस का उपयोग करते हैं जबतक कि आप अन्यथा नहीं कहें (इस मामले में आप बेहतर नहीं हैं)। ईएस "अतिरिक्त" खंड है; आप इसे केवल निर्देश में स्पष्ट रूप से संदर्भित करके इसका उपयोग कर सकते हैं (ब्लॉक चाल [MOVB} निर्देश को छोड़कर, जो डीएस और ईएस दोनों का उपयोग करता है)।
आशा है कि मदद करता है।
अधिक आधुनिक माइक्रोप्रोसेसर के साथ काम करने के लिए सबसे अच्छा, जहां सेगमेंट रजिस्टर silliness एक मुद्दा नहीं है।
आपका उत्तर * अधिकतर * सही है। हालांकि, सभी आधुनिक x86 प्रोसेसर सेगमेंट रजिस्टरों का उपयोग करते हैं। यहां तक कि 64-बिट मोड में जो अधिकतर फ्लैट है, आपके पास अभी भी जीएस और एफएस है जो फ्लैट नहीं हैं। यदि कुछ भी हो, तो इस सेगमेंट रजिस्टर में आपकी पोस्ट में वर्णन करने की तुलना में आजकल अधिक जटिलता है। –
हां, वे करते हैं, लेकिन ओपी को इस जटिलता को सुनने की आवश्यकता नहीं थी। न ही वर्तमान उपयोग (x64) कुछ भी है लेकिन असली सेगमेंट रजिस्टरों का सबसे बेस्ट वेस्टिज है। इतनी शर्म की बात है, मल्टीक्स संदर्भ देखें। (एंडी ग्रोव 80 के दशक के मध्य में एक बातचीत में उठ गए और अपने ढेर को उड़ा दिया ... इंटेल ने वास्तव में मल्टीक्स करने के लिए 386 सेगमेंट रजिस्टरों को डिजाइन किया, और उन्हें यूनिक्स वीनीज़ द्वारा अनदेखा कर दिया गया। हम जो स्वीकार करते हैं उसके लायक हैं)। –
बहुत बहुत धन्यवाद! "* आपको 20 बिट्स चाहिए, लेकिन रजिस्ट्रार केवल 16 बिट्स हैं।* "मैं पूरी तरह से मैं के साथ 16 बिट सीपीयू काम कर रहा था भूल गया –