एड्रेसिंग मोड: Difference between revisions
| Line 101: | Line 101: | ||
कुछ कंप्यूटरों पर अनुक्रमिक निष्पादन को एड्रेसिंग मोड नहीं माना जाता है। | कुछ कंप्यूटरों पर अनुक्रमिक निष्पादन को एड्रेसिंग मोड नहीं माना जाता है। | ||
अधिकांश सीपीयू आर्किटेक्चर पर अधिकांश निर्देश अनुक्रमिक निर्देश हैं। चूंकि अधिकांश निर्देश अनुक्रमिक निर्देश होते हैं, सीपीयू डिजाइनर अक्सर ऐसी विशेषताएं जोड़ते हैं जो इन अनुक्रमिक निर्देशों को तेजी से चलाने के लिए जानबूझकर अन्य निर्देशों-शाखा निर्देशों पर प्रदर्शन का त्याग करते हैं। | अधिकांश CPU(सीपीयू) आर्किटेक्चर पर अधिकांश निर्देश अनुक्रमिक निर्देश हैं। चूंकि अधिकांश निर्देश अनुक्रमिक निर्देश होते हैं, CPU(सीपीयू) डिजाइनर अक्सर ऐसी विशेषताएं जोड़ते हैं जो इन अनुक्रमिक निर्देशों को तेजी से चलाने के लिए जानबूझकर अन्य निर्देशों-शाखा निर्देशों पर प्रदर्शन का त्याग करते हैं। | ||
सशर्त शाखाएं पीसी को 2 संभावित परिणामों में से एक के साथ लोड करती हैं, स्थिति के आधार पर- अधिकांश सीपीयू आर्किटेक्चर ली गई शाखा के लिए कुछ अन्य एड्रेसिंग मोड का उपयोग करते हैं, और नहीं ली गई शाखा के लिए अनुक्रमिक निष्पादन। | सशर्त शाखाएं PC(पीसी) को 2 संभावित परिणामों में से एक के साथ लोड करती हैं, स्थिति के आधार पर- अधिकांश CPU(सीपीयू) आर्किटेक्चर "ली गई" शाखा के लिए कुछ अन्य एड्रेसिंग मोड का उपयोग करते हैं, और "नहीं ली गई" शाखा के लिए अनुक्रमिक निष्पादन। | ||
आधुनिक सीपीयू में कई विशेषताएं- निर्देश प्रीफेच और अधिक जटिल पाइपलाइन (कंप्यूटिंग) आईएनजी, आउट-ऑफ-ऑर्डर निष्पादन, आदि-इस भ्रम को बनाए रखते हैं कि प्रत्येक निर्देश अगले | आधुनिक सीपीयू में कई विशेषताएं- निर्देश प्रीफेच और अधिक जटिल पाइपलाइन (कंप्यूटिंग) आईएनजी, आउट-ऑफ-ऑर्डर निष्पादन, आदि-इस भ्रम को बनाए रखते हैं कि प्रत्येक निर्देश अगले के शुरू होने से पहले समाप्त हो जाता है, वही अंतिम परिणाम देता है, भले ही आंतरिक रूप से ऐसा नहीं होता है। | ||
इस तरह के अनुक्रमिक निर्देशों का प्रत्येक मूल खंड संदर्भ के अस्थायी और स्थानिक इलाके दोनों को प्रदर्शित करता है। | इस तरह के अनुक्रमिक निर्देशों का प्रत्येक "मूल खंड" संदर्भ के अस्थायी और स्थानिक इलाके दोनों को प्रदर्शित करता है। | ||
==== सीपीयू जो अनुक्रमिक निष्पादन का उपयोग नहीं करते हैं ==== | ==== सीपीयू जो अनुक्रमिक निष्पादन का उपयोग नहीं करते हैं ==== | ||
Revision as of 19:43, 14 September 2022
This article needs additional citations for verification. (May 2009) (Learn how and when to remove this template message) |
एड्रेसिंग मोड अधिकांश सेंट्रल प्रोसेसिंग यूनिट (CPU) डिजाइनों में इंस्ट्रक्शन सेट आर्किटेक्चर का एक पहलू है। किसी दिए गए निर्देश सेट आर्किटेक्चर में परिभाषित विभिन्न एड्रेसिंग मोड परिभाषित करते हैं कि उस आर्किटेक्चर में मशीन कोड निर्देश (कंप्यूटर विज्ञान) प्रत्येक निर्देश के ऑपरेंड की पहचान कैसे करता है। एड्रेसिंग मोड निर्दिष्ट करता है कि मशीन निर्देश या अन्य जगहों में निहित रजिस्टरों और/या स्थिरांक में रखी गई जानकारी का उपयोग करके ऑपरेंड के प्रभावी मेमोरी एड्रेस की गणना कैसे करें।
कंप्यूटर प्रोग्रामिंग में, एड्रेसिंग मोड मुख्य रूप से उन लोगों के लिए रुचि रखते हैं जो असेंबली लैंग्वेज में लिखते हैं और कंपाइलर लेखकों के लिए। संबंधित अवधारणा के लिए ऑर्थोगोनल इंस्ट्रक्शन सेट देखें जो किसी भी एड्रेसिंग मोड का उपयोग करने के लिए किसी भी निर्देश की क्षमता से संबंधित है।
चेतावनी
This section does not cite any sources. (May 2012) (Learn how and when to remove this template message) |
ध्यान दें कि विभिन्न एड्रेसिंग मोड के नामकरण का कोई सामान्यतः स्वीकृत तरीका नहीं है। विशेष रूप से, अलग-अलग लेखक और कंप्यूटर निर्माता एक ही एड्रेसिंग मोड को अलग-अलग नाम दे सकते हैं, या अलग-अलग एड्रेसिंग मोड को एक ही नाम दे सकते हैं। इसके अलावा, एक एड्रेसिंग मोड, जिसे दिए गए आर्किटेक्चर में, सिंगल एड्रेसिंग मोड के रूप में माना जाता है, कार्यक्षमता का प्रतिनिधित्व कर सकता है, जो कि अन्य आर्किटेक्चर में, दो या दो से अधिक एड्रेसिंग मोड द्वारा कवर किया जाता है। उदाहरण के लिए, कुछ जटिल निर्देश सेट कंप्यूटर CISC(सीआईएससी) आर्किटेक्चर, जैसे डिजिटल उपकरण निगम। डिजिटल उपकरण निगम DEC(डीईसी) वैक्स, रजिस्टरों और शाब्दिक या तत्काल स्थिरांक (कंप्यूटर विज्ञान) को सिर्फ एक अन्य एड्रेसिंग मोड के रूप में मानते हैं। अन्य, जैसे IBM सिस्टम/360 और उसके उत्तराधिकारी, और सबसे कम निर्देश सेट कंप्यूटर RISC(आरआईएससी) डिज़ाइन, इस जानकारी को निर्देश के भीतर एन्कोड करते हैं। इस प्रकार, बाद वाली मशीनों में एक रजिस्टर को दूसरे में कॉपी करने, रजिस्टर में शाब्दिक स्थिरांक की प्रतिलिपि बनाने और मेमोरी स्थान की सामग्री को एक रजिस्टर में कॉपी करने के लिए तीन अलग-अलग निर्देश कोड होते हैं, जबकि VAX में केवल "MOV" निर्देश होता है।
"एड्रेसिंग मोड" शब्द स्वयं विभिन्न व्याख्याओं के अधीन है या तो "मेमोरी एड्रेस कैलकुलेशन मोड" या "ऑपरेंड एक्सेसिंग मोड"। पहली व्याख्या के तहत, निर्देश जो मेमोरी से नहीं पढ़ते हैं या मेमोरी में नहीं लिखते हैं (जैसे कि "रजिस्टर में शाब्दिक जोड़ें") को "एड्रेसिंग मोड" नहीं माना जाता है। दूसरी व्याख्या VAX जैसी मशीनों के लिए अनुमति देती है जो रजिस्टर या शाब्दिक ऑपरेंड के लिए अनुमति देने के लिए ऑपरेंड मोड बिट्स का उपयोग करती हैं। "लोड प्रभावी पता" जैसे निर्देशों पर केवल पहली व्याख्या लागू होती है, जो ऑपरेंड के पते को लोड करती है, न कि ऑपरेंड को ही।
नीचे सूचीबद्ध एड्रेसिंग मोड को कोड एड्रेसिंग और डेटा एड्रेसिंग में विभाजित किया गया है। अधिकांश कंप्यूटर आर्किटेक्चर इस अंतर को बनाए रखते हैं, लेकिन कुछ आर्किटेक्चर हैं (या रहे हैं) जो किसी भी संदर्भ में सभी एड्रेसिंग मोड का उपयोग करने की अनुमति देते हैं।
नीचे दिखाए गए निर्देश एड्रेसिंग मोड को स्पष्ट करने के लिए विशुद्ध रूप से प्रतिनिधि हैं, और जरूरी नहीं कि किसी विशेष कंप्यूटर द्वारा उपयोग किए जाने वाले निमोनिक्स को प्रतिबिंबित करें।
एड्रेसिंग मोड की संख्या
कंप्यूटर आर्किटेक्चर हार्डवेयर में प्रदान किए जाने वाले एड्रेसिंग मोड की संख्या के अनुसार बहुत भिन्न होते हैं। जटिल एड्रेसिंग मोड को खत्म करने और केवल एक या कुछ सरल एड्रेसिंग मोड का उपयोग करने के कुछ लाभ हैं, भले ही इसके लिए कुछ अतिरिक्त निर्देशों और शायद अतिरिक्त रजिस्टर की आवश्यकता हो।[1][2] यह साबित हुआ है[3][4][5] निर्देश पाइपलाइन सीपीयू को डिजाइन करना बहुत आसान है यदि केवल उपलब्ध एकमात्र एड्रेसिंग मोड सरल हैं।
अधिकांश RISC(आरआईएससी) आर्किटेक्चर में केवल पांच सरल एड्रेसिंग मोड होते हैं, जबकि CISC(सीआईएससी) आर्किटेक्चर जैसे DEC(डीईसी) वैक्स में एक दर्जन से अधिक एड्रेसिंग मोड होते हैं, जिनमें से कुछ काफी जटिल होते हैं। IBM सिस्टम/360 आर्किटेक्चर में केवल तीन एड्रेसिंग मोड थे सिस्टम/390 के लिए कुछ और जोड़े गए हैं।
जब केवल कुछ एड्रेसिंग मोड होते हैं, तो आवश्यक विशेष एड्रेसिंग मोड सामान्यतः निर्देश कोड के भीतर एन्कोड किया जाता है (जैसे IBM(आईबीएम) सिस्टम/360 और उत्तराधिकारी, अधिकांश RISC (आरआईएससी))। लेकिन जब कई एड्रेसिंग मोड होते हैं, तो एड्रेसिंग मोड को निर्दिष्ट करने के लिए एक विशिष्ट फ़ील्ड को अक्सर निर्देश में अलग रखा जाता है। DEC VAX ने लगभग सभी निर्देशों के लिए कई मेमोरी ऑपरेंड की अनुमति दी, और इसलिए उस विशेष ऑपरेंड के लिए एड्रेसिंग मोड को इंगित करने के लिए प्रत्येक ऑपरेंड विनिर्देशक के पहले कुछ बिट्स आरक्षित किए। एड्रेसिंग मोड स्पेसिफायर बिट्स को ओपकोड ऑपरेशन बिट्स से अलग रखते हुए ऑर्थोगोनल इंस्ट्रक्शन सेट तैयार करता है।
कई एड्रेसिंग मोड वाले कंप्यूटर पर भी, वास्तविक कार्यक्रमों का मापन[6] इंगित करता है कि नीचे सूचीबद्ध सरल एड्रेसिंग मोड में उपयोग किए गए सभी एड्रेसिंग मोड में से कुछ 90% या अधिक के लिए खाते हैं। चूंकि इस तरह के अधिकांश माप संकलक द्वारा उच्च-स्तरीय भाषाओं से उत्पन्न कोड पर आधारित होते हैं, यह कुछ हद तक उपयोग किए जा रहे संकलक की सीमाओं को दर्शाता है।[7][6][8]
उपयोगी दुष्प्रभाव
कुछ निर्देश सेट आर्किटेक्चर, जैसे कि Intel x86 और IBM/360 और इसके उत्तराधिकारी, में लोड प्रभावी पता निर्देश होता है।[9][10] यह प्रभावी ऑपरेंड पते की गणना करता है, लेकिन उस मेमोरी स्थान पर कार्य करने के बजाय, यह उस पते को लोड करता है जिसे रजिस्टर में एक्सेस किया गया होता। किसी सरणी तत्व के पते को सबरूटीन में पास करते समय यह उपयोगी हो सकता है। यह निर्देश में सामान्य से अधिक गणना करने का चतुर तरीका भी हो सकता है, उदाहरण के लिए एड्रेसिंग मोड "बेस + इंडेक्स + ऑफ़सेट" (नीचे विस्तृत) के साथ इस तरह के निर्देश का उपयोग करने से एक निर्देश में दो रजिस्टर और स्थिरांक को एक साथ जोड़ने की अनुमति मिलती है।
कोड के लिए सरल एड्रेसिंग मोड
कोड के लिए कुछ सरल एड्रेसिंग मोड नीचे दिखाए गए हैं। नामकरण मंच के आधार पर भिन्न हो सकता है।
निरपेक्ष या प्रत्यक्ष
+-----+----------------------------+ |कूद| पता | +-----+----------------------------+ (प्रभावी पीसी पता = पता)
पूर्ण निर्देश पते के लिए प्रभावी पता पैरामीटर ही है जिसमें कोई संशोधन नहीं है।
पीसी-सापेक्ष
+-----+----------------------------+ |कूद| ऑफसेट | कूद रिश्तेदार +-----+----------------------------+ (प्रभावी पीसी पता = अगला निर्देश पता + ऑफ़सेट, ऑफ़सेट नकारात्मक हो सकता है)
पीसी-सापेक्ष निर्देश एड्रेस के लिए प्रभावी पता अगले निर्देश के पते में जोड़ा गया ऑफसेट पैरामीटर है। यह ऑफ़सेट सामान्यतः निर्देश से पहले और बाद में कोड के संदर्भ की अनुमति देने के लिए हस्ताक्षरित होता है।[11] यह छलांग के संबंध में विशेष रूप से उपयोगी है, क्योंकि विशिष्ट छलांग पास के निर्देशों के लिए होती है (उच्च-स्तरीय भाषा में सबसे अधिक या जबकि बयान काफी कम होते हैं)। वास्तविक कार्यक्रमों के मापन से पता चलता है कि 8 या 10 बिट ऑफ़सेट कुछ 90% सशर्त छलांग (लगभग ± 128 या ± 512 बाइट्स) के लिए पर्याप्त है।[12] पीसी-सापेक्ष एड्रेसिंग का अन्य लाभ यह है कि कोड स्थिति-स्वतंत्र कोड। स्थिति-स्वतंत्र हो सकता है, अर्थात इसे किसी भी पते को समायोजित करने की आवश्यकता के बिना मेमोरी में कहीं भी लोड किया जा सकता है।
इस एड्रेसिंग मोड के कुछ संस्करण सशर्त हो सकते हैं जो दो रजिस्टरों ("जंप अगर reg1=reg2"), रजिस्टर ("जंप जब तक reg1=0") या कोई रजिस्टर नहीं है, तो स्थिति रजिस्टर में कुछ पहले से निर्धारित बिट का उल्लेख करता है। नीचे सशर्त निष्पादन भी देखें।
अप्रत्यक्ष पंजीकृत करें
+----------+-----+ |जंपविया| रेग | +----------+-----+ (प्रभावी पीसी पता = रजिस्टर 'reg' की सामग्री)
रजिस्टर अप्रत्यक्ष निर्देश के लिए प्रभावी पता निर्दिष्ट रजिस्टर में पता है। उदाहरण के लिए, (A7) पता रजिस्टर A7 की सामग्री तक पहुंचने के लिए।
प्रभाव उस निर्देश पर नियंत्रण स्थानांतरित करना है जिसका पता निर्दिष्ट रजिस्टर में है।
कई RISC(आरआईएससी) मशीनों, के साथ-साथ IBM(आईबीएम) सिस्टम/360 और उत्तराधिकारियों के पास सबरूटीन कॉल निर्देश हैं जो रिटर्न स्टेटमेंट को एड्रेस रजिस्टर में रखते हैं रजिस्टर-इनडायरेक्ट एड्रेसिंग मोड का इस्तेमाल उस सबरूटीन कॉल से वापस आने के लिए किया जाता है।
अनुक्रमिक एड्रेसिंग मोड
अनुक्रमिक निष्पादन
+----------+ | नहीं | निम्नलिखित निर्देश निष्पादित करें: +----------+ (प्रभावी पीसी पता = अगला निर्देश पता)
सीपीयू, अनुक्रमिक निर्देश को निष्पादित करने के बाद, निम्नलिखित निर्देश को तुरंत निष्पादित करता है।
कुछ कंप्यूटरों पर अनुक्रमिक निष्पादन को एड्रेसिंग मोड नहीं माना जाता है।
अधिकांश CPU(सीपीयू) आर्किटेक्चर पर अधिकांश निर्देश अनुक्रमिक निर्देश हैं। चूंकि अधिकांश निर्देश अनुक्रमिक निर्देश होते हैं, CPU(सीपीयू) डिजाइनर अक्सर ऐसी विशेषताएं जोड़ते हैं जो इन अनुक्रमिक निर्देशों को तेजी से चलाने के लिए जानबूझकर अन्य निर्देशों-शाखा निर्देशों पर प्रदर्शन का त्याग करते हैं।
सशर्त शाखाएं PC(पीसी) को 2 संभावित परिणामों में से एक के साथ लोड करती हैं, स्थिति के आधार पर- अधिकांश CPU(सीपीयू) आर्किटेक्चर "ली गई" शाखा के लिए कुछ अन्य एड्रेसिंग मोड का उपयोग करते हैं, और "नहीं ली गई" शाखा के लिए अनुक्रमिक निष्पादन।
आधुनिक सीपीयू में कई विशेषताएं- निर्देश प्रीफेच और अधिक जटिल पाइपलाइन (कंप्यूटिंग) आईएनजी, आउट-ऑफ-ऑर्डर निष्पादन, आदि-इस भ्रम को बनाए रखते हैं कि प्रत्येक निर्देश अगले के शुरू होने से पहले समाप्त हो जाता है, वही अंतिम परिणाम देता है, भले ही आंतरिक रूप से ऐसा नहीं होता है।
इस तरह के अनुक्रमिक निर्देशों का प्रत्येक "मूल खंड" संदर्भ के अस्थायी और स्थानिक इलाके दोनों को प्रदर्शित करता है।
सीपीयू जो अनुक्रमिक निष्पादन का उपयोग नहीं करते हैं
सीपीयू जो प्रोग्राम काउंटर के साथ अनुक्रमिक निष्पादन का उपयोग नहीं करते हैं वे अत्यंत दुर्लभ हैं। कुछ सीपीयू में, प्रत्येक निर्देश हमेशा अगले निर्देश का पता निर्दिष्ट करता है। ऐसे सीपीयू में एक निर्देश सूचक होता है जो उस निर्दिष्ट पते को रखता है; यह कोई प्रोग्राम काउंटर नहीं है क्योंकि इसे बढ़ाने का कोई प्रावधान नहीं है। ऐसे CPU में कुछ ड्रम मेमोरी कंप्यूटर शामिल हैं जैसे IBM 650, SECD मशीन, LGP-30|Librascope LGP-30, और RTX 32P।[13] अन्य कंप्यूटिंग आर्किटेक्चर बहुत आगे जाते हैं, वॉन न्यूमैन आर्किटेक्चर को बायपास करने का प्रयास करते हैं # वॉन न्यूमैन टोंटी विभिन्न प्रकार के प्रोग्राम काउंटर का उपयोग करके # मशीन आर्किटेक्चर में परिणाम।
सशर्त निष्पादन
कुछ कंप्यूटर आर्किटेक्चर में सशर्त निर्देश होते हैं (जैसे एआरएम आर्किटेक्चर, लेकिन अब 64-बिट मोड में सभी निर्देशों के लिए नहीं) या सशर्त लोड निर्देश (जैसे x86) जो कुछ मामलों में सशर्त शाखाओं को अनावश्यक बना सकते हैं और निर्देश पाइपलाइन को फ्लश करने से बच सकते हैं। एक स्थिति रजिस्टर सेट करने के लिए 'तुलना' जैसे निर्देश का उपयोग किया जाता है, और बाद के निर्देशों में उस स्थिति कोड पर एक परीक्षण शामिल होता है ताकि यह देखा जा सके कि उनका पालन किया जाता है या अनदेखा किया जाता है।
छोड़ें
+----------+-----+-----+ |स्किपईक्यू| reg1| reg2| अगला निर्देश छोड़ें यदि reg1=reg2 +----------+-----+-----+ (प्रभावी पीसी पता = अगला निर्देश पता + 1)
स्किप एड्रेसिंग को एक निश्चित +1 ऑफसेट के साथ एक विशेष प्रकार का पीसी-रिश्तेदार एड्रेसिंग मोड माना जा सकता है। पीसी-रिश्तेदार एड्रेसिंग की तरह, कुछ सीपीयू में इस एड्रेसिंग मोड के संस्करण होते हैं जो केवल एक रजिस्टर (स्किप if reg1=0 ) या कोई रजिस्टर नहीं होते हैं, जो स्थिति रजिस्टर में कुछ पहले से सेट बिट का उल्लेख करते हैं। अन्य सीपीयू में एक संस्करण होता है जो परीक्षण के लिए एक विशिष्ट बाइट में एक विशिष्ट बिट का चयन करता है (छोड़ें अगर reg12 का बिट 7 0 है)।
अन्य सभी सशर्त शाखाओं के विपरीत, एक स्किप निर्देश को निर्देश पाइपलाइन को फ्लश करने की आवश्यकता नहीं होती है, हालांकि इसे अगले निर्देश को अनदेखा करने की आवश्यकता हो सकती है।
डेटा के लिए सरल एड्रेसिंग मोड
डेटा के लिए कुछ सरल एड्रेसिंग मोड नीचे दिखाए गए हैं। नामकरण मंच के आधार पर भिन्न हो सकता है।
रजिस्टर करें (या सीधे रजिस्टर करें)
+----------+-----+-----+-----+ | मूल | reg1| reg2| reg3| reg1 := reg2 * reg3; +----------+-----+-----+-----+
इस एड्रेसिंग मोड में एक प्रभावी पता नहीं होता है और इसे कुछ कंप्यूटरों पर एड्रेसिंग मोड नहीं माना जाता है।
इस उदाहरण में, सभी ऑपरेंड रजिस्टरों में हैं, और परिणाम एक रजिस्टर में रखा गया है।
बेस प्लस ऑफ़सेट, और विविधताएं
इसे कभी-कभी 'आधार प्लस विस्थापन' के रूप में जाना जाता है
+----------+-----+--------------------------+ | लोड | रेग | आधार| ऑफसेट | रेग: = रैम [आधार + ऑफसेट] +----------+-----+--------------------------+ (प्रभावी पता = ऑफसेट + निर्दिष्ट आधार रजिस्टर की सामग्री)
ऑफ़सेट (कंप्यूटर विज्ञान) आमतौर पर एक हस्ताक्षरित 16-बिट मान होता है (हालांकि 80386 ने इसे 32 बिट्स तक विस्तारित किया)।
यदि ऑफ़सेट शून्य है, तो यह रजिस्टर इनडायरेक्ट एड्रेसिंग का एक उदाहरण बन जाता है; प्रभावी पता आधार रजिस्टर में सिर्फ मूल्य है।
कई आरआईएससी मशीनों पर, शून्य मान पर रजिस्टर 0 तय किया जाता है। यदि रजिस्टर 0 का उपयोग आधार रजिस्टर के रूप में किया जाता है, तो यह एब्सोल्यूट एड्रेसिंग का एक उदाहरण बन जाता है। हालाँकि, मेमोरी के केवल एक छोटे से हिस्से तक पहुँचा जा सकता है (64 किलोबाइट, यदि ऑफ़सेट 16 बिट है)।
वर्तमान कंप्यूटर मेमोरी के आकार के संबंध में 16-बिट ऑफ़सेट बहुत छोटा लग सकता है (यही कारण है कि 80386 ने इसे 32-बिट तक विस्तारित किया)। यह और भी बुरा हो सकता है: आईबीएम सिस्टम/360 मेनफ्रेम में केवल एक अहस्ताक्षरित 12-बिट ऑफसेट होता है। हालाँकि, संदर्भ की स्थानीयता का सिद्धांत लागू होता है: थोड़े समय के अंतराल में, अधिकांश डेटा आइटम जो एक प्रोग्राम एक्सेस करना चाहता है, एक दूसरे के काफी करीब होते हैं।
यह एड्रेसिंग मोड इंडेक्सेड एब्सोल्यूट एड्रेसिंग मोड से काफी निकटता से संबंधित है।
उदाहरण 1: एक सबरूटीन के भीतर एक प्रोग्रामर मुख्य रूप से मापदंडों और स्थानीय चर में रुचि रखता है, जो शायद ही कभी 64 किलोबाइट से अधिक होगा, जिसके लिए एक बेस रजिस्टर (फ्रेम पॉइंटर) पर्याप्त है। यदि यह रूटीन किसी वस्तु-उन्मुख भाषा में एक वर्ग विधि है, तो एक दूसरे आधार रजिस्टर की आवश्यकता होती है जो वर्तमान वस्तु (कुछ उच्च स्तरीय भाषाओं में 'यह' या 'स्व') के गुणों पर इंगित करता है।
उदाहरण 2: यदि आधार रजिस्टर में एक मिश्रित प्रकार (एक रिकॉर्ड या संरचना) का पता होता है, तो ऑफ़सेट का उपयोग उस रिकॉर्ड से एक फ़ील्ड का चयन करने के लिए किया जा सकता है (अधिकांश रिकॉर्ड/संरचनाएं आकार में 32 केबी से कम हैं)।
तत्काल/शाब्दिक
+----------+-----+--------------------------+ | जोड़ें | reg1| reg2| स्थिर | reg1 := reg2 + स्थिरांक; +----------+-----+--------------------------+
इस एड्रेसिंग मोड में एक प्रभावी पता नहीं है, और इसे कुछ कंप्यूटरों पर एड्रेसिंग मोड नहीं माना जाता है।
स्थिरांक हस्ताक्षरित या अहस्ताक्षरित हो सकता है। उदाहरण के लिए, move.l #$FEEDABBA, D0 FEEDABBA के तत्काल हेक्स मान को रजिस्टर D0 में स्थानांतरित करने के लिए।
मेमोरी से ऑपरेंड का उपयोग करने के बजाय, ऑपरेंड का मान निर्देश के भीतर ही होता है। DEC VAX मशीन पर, शाब्दिक ऑपरेंड आकार 6, 8, 16 या 32 बिट लंबा हो सकता है।
एंड्रयू एस। तानेनबाम ने दिखाया कि एक कार्यक्रम में सभी स्थिरांक का 98% 13 बिट्स में फिट होगा (देखें कम किए गए निर्देश सेट कंप्यूटर # निर्देश सेट दर्शन)।
लागू
+-----------------+ | क्लियर कैरी बिट | +-----------------+ +---------------------+ | स्पष्ट संचायक | +---------------------+
निहित एड्रेसिंग मोड, जिसे निहित एड्रेसिंग मोड (x86 असेंबली भाषा) भी कहा जाता है, स्पष्ट रूप से स्रोत या गंतव्य (या कभी-कभी दोनों) के लिए एक प्रभावी पता निर्दिष्ट नहीं करता है।
या तो स्रोत (यदि कोई हो) या गंतव्य प्रभावी पता (या कभी-कभी दोनों) opcode द्वारा निहित है।
पुराने कंप्यूटरों (1970 के दशक के मध्य तक) में इंप्लाइड एड्रेसिंग काफी आम थी। ऐसे कंप्यूटरों में आमतौर पर केवल एक ही रजिस्टर होता था जिसमें अंकगणित किया जा सकता था-संचयक। ऐसी संचायक मशीनें लगभग हर निर्देश में उस संचायक को परोक्ष रूप से संदर्भित करती हैं। उदाहरण के लिए, ऑपरेशन <a := b + c; > अनुक्रम का उपयोग करके किया जा सकता है <लोड बी; ग जोड़ें; स्टोर ए; > - गंतव्य (संचयक) प्रत्येक भार में निहित है और निर्देश जोड़ें; स्रोत (संचयक) प्रत्येक स्टोर निर्देश में निहित है।
बाद के कंप्यूटरों में आम तौर पर एक से अधिक सामान्य-उद्देश्य रजिस्टर या रैम स्थान होते थे जो अंकगणित के लिए स्रोत या गंतव्य या दोनों हो सकते हैं- और इसलिए बाद में कंप्यूटर को अंकगणित के स्रोत और गंतव्य को निर्दिष्ट करने के लिए किसी अन्य एड्रेसिंग मोड की आवश्यकता होती है।
x86 निर्देशों में, कुछ ऑपरेंड या परिणामों में से एक के लिए निहित रजिस्टरों का उपयोग करते हैं (गुणा, विभाजन, सशर्त कूद की गिनती)।
कई कंप्यूटरों (जैसे x86 और AVR) में एक विशेष-उद्देश्य रजिस्टर होता है जिसे स्टैक पॉइंटर कहा जाता है जो स्टैक से डेटा को पुश या पॉप करते समय निहित रूप से बढ़ा हुआ या घटा हुआ होता है, और स्रोत या गंतव्य प्रभावी पता (निहित रूप से) उसमें संग्रहीत पता होता है। स्टेक सूचक।
कई 32-बिट कंप्यूटर (जैसे 68000, एआरएम, या पावरपीसी) में एक से अधिक रजिस्टर होते हैं जिनका उपयोग स्टैक पॉइंटर के रूप में किया जा सकता है - और इसलिए रजिस्टर ऑटोइनक्रिकमेंट इनडायरेक्ट एड्रेसिंग मोड का उपयोग यह निर्दिष्ट करने के लिए करें कि इनमें से कौन सा रजिस्टर पुश करते समय या उपयोग किया जाना चाहिए। एक ढेर से डेटा पॉपिंग।
कुछ मौजूदा कंप्यूटर आर्किटेक्चर (जैसे आईबीएम/390 और इंटेल पेंटियम) में पहले के डिजाइनों के साथ पश्चगामी संगतता बनाए रखने के लिए निहित ऑपरेंड के साथ कुछ निर्देश शामिल हैं।
कई कंप्यूटरों पर, निर्देश जो उपयोगकर्ता/सिस्टम मोड बिट, इंटरप्ट-सक्षम बिट इत्यादि को फ्लिप करते हैं, उन बिट्स को रखने वाले विशेष रजिस्टर को स्पष्ट रूप से निर्दिष्ट करते हैं। यह पोपेक और गोल्डबर्ग वर्चुअलाइजेशन आवश्यकताओं को पूरा करने के लिए उन निर्देशों को फंसाने के लिए आवश्यक हार्डवेयर को सरल बनाता है-ऐसी प्रणाली पर, ट्रैप लॉजिक को किसी भी ऑपरेंड (या अंतिम प्रभावी पते पर) को देखने की आवश्यकता नहीं है, लेकिन केवल ओपकोड पर .
कुछ सीपीयू ऐसे डिजाइन किए गए हैं जहां प्रत्येक ऑपरेंड हमेशा प्रत्येक निर्देश में निहित रूप से निर्दिष्ट होता है - निर्देश सेट # ऑपरेंड की संख्या | शून्य-ऑपरेंड सीपीयू।
कोड या डेटा के लिए अन्य एड्रेसिंग मोड
पूर्ण/प्रत्यक्ष
+----------+-----+------------------------------------------ ---+ | लोड | रेग | पता | +----------+-----+------------------------------------------ ---+ (प्रभावी पता = निर्देश में दिया गया पता)
इसके लिए काफी बड़े पते के लिए निर्देश में जगह की आवश्यकता होती है। यह अक्सर सीआईएससी मशीनों पर उपलब्ध होता है जिसमें चर-लंबाई के निर्देश होते हैं, जैसे कि x86।
कुछ आरआईएससी मशीनों में एक विशेष लोड अपर लिटरल निर्देश होता है जो एक रजिस्टर के शीर्ष भाग में 16- या 20-बिट स्थिरांक रखता है। इसके बाद बेस-प्लस-ऑफ़सेट एड्रेसिंग मोड में बेस रजिस्टर के रूप में इस्तेमाल किया जा सकता है जो कम-ऑर्डर 16 या 12 बिट्स की आपूर्ति करता है। संयोजन एक पूर्ण 32-बिट पते की अनुमति देता है।
अनुक्रमित निरपेक्ष
+----------+-----+------------------------------------------ ---+ | लोड | reg |सूचकांक| पता | +----------+-----+------------------------------------------ ---+ (प्रभावी पता = पता + निर्दिष्ट सूचकांक रजिस्टर की सामग्री)
इसके लिए काफी बड़े पते के लिए निर्देश में जगह की भी आवश्यकता होती है। पता एक सरणी या वेक्टर की शुरुआत हो सकता है, और सूचकांक आवश्यक विशेष सरणी तत्व का चयन कर सकता है। एक सरणी के स्ट्राइड की अनुमति देने के लिए प्रोसेसर इंडेक्स रजिस्टर को स्केल कर सकता है।
ध्यान दें कि यह कमोबेश बेस-प्लस-ऑफ़सेट एड्रेसिंग मोड जैसा ही है, सिवाय इसके कि इस मामले में ऑफ़सेट किसी भी मेमोरी लोकेशन को संबोधित करने के लिए पर्याप्त है।
उदाहरण 1: एक सबरूटीन के भीतर, एक प्रोग्रामर एक स्ट्रिंग को स्थानीय स्थिरांक या स्थिर चर के रूप में परिभाषित कर सकता है। स्ट्रिंग का पता निर्देश में शाब्दिक पते में संग्रहीत किया जाता है। ऑफ़सेट - लूप के इस पुनरावृत्ति पर स्ट्रिंग के किस वर्ण का उपयोग करना है - इंडेक्स रजिस्टर में संग्रहीत किया जाता है।
उदाहरण 2: एक प्रोग्रामर कई बड़े सरणियों को ग्लोबल्स या फील्ड (कंप्यूटर साइंस) के रूप में परिभाषित कर सकता है। सरणी की शुरुआत को संदर्भित करने वाले निर्देश के शाब्दिक पते (शायद प्रोग्राम-लोड समय पर एक स्थानांतरित लोडर द्वारा संशोधित) में संग्रहीत किया जाता है। ऑफ़सेट - लूप के इस पुनरावृत्ति पर उपयोग करने के लिए सरणी से कौन सा आइटम - इंडेक्स रजिस्टर में संग्रहीत किया जाता है। अक्सर लूप में निर्देश लूप काउंटर और कई सरणियों के ऑफसेट के लिए एक ही रजिस्टर का पुन: उपयोग करते हैं।
बेस प्लस इंडेक्स
+----------+-----+-----+-----+ | लोड | रेग | आधार|सूचकांक| +----------+-----+-----+-----+ (प्रभावी पता = निर्दिष्ट आधार रजिस्टर की सामग्री + निर्दिष्ट सूचकांक रजिस्टर की सामग्री)
आधार रजिस्टर में एक सरणी या वेक्टर का प्रारंभ पता हो सकता है, और सूचकांक आवश्यक विशेष सरणी तत्व का चयन कर सकता है। एक सरणी के स्ट्राइड की अनुमति देने के लिए प्रोसेसर इंडेक्स रजिस्टर को स्केल कर सकता है। इसका उपयोग पैरामीटर के रूप में पारित सरणी के तत्वों तक पहुंचने के लिए किया जा सकता है।
बेस प्लस इंडेक्स प्लस ऑफ़सेट
+----------+-----+-----+-----+---------------------+ | लोड | रेग | आधार|सूचकांक| ऑफसेट | +----------+-----+-----+-----+---------------------+ (प्रभावी पता = ऑफसेट + निर्दिष्ट आधार रजिस्टर की सामग्री + निर्दिष्ट सूचकांक रजिस्टर की सामग्री)
आधार रजिस्टर में एक सरणी या रिकॉर्ड के वेक्टर का प्रारंभ पता हो सकता है, सूचकांक आवश्यक विशेष रिकॉर्ड का चयन कर सकता है, और ऑफ़सेट उस रिकॉर्ड के भीतर एक फ़ील्ड का चयन कर सकता है। एक सरणी के स्ट्राइड की अनुमति देने के लिए प्रोसेसर इंडेक्स रजिस्टर को स्केल कर सकता है।
स्केल किया गया
+----------+-----+-----+-----+ | लोड | रेग | आधार|सूचकांक| +----------+-----+-----+-----+ (प्रभावी पता = निर्दिष्ट आधार रजिस्टर की सामग्री + निर्दिष्ट सूचकांक रजिस्टर की स्केल की गई सामग्री)
आधार रजिस्टर में एक सरणी या वेक्टर डेटा संरचना का प्रारंभ पता हो सकता है, और सूचकांक में आवश्यक एक विशेष सरणी तत्व की ऑफसेट हो सकती है।
यह एड्रेसिंग मोड प्रत्येक सरणी तत्व के आकार की अनुमति देने के लिए इंडेक्स रजिस्टर में मान को गतिशील रूप से मापता है, उदा। यदि सरणी तत्व डबल परिशुद्धता फ़्लोटिंग-पॉइंट संख्याएं हैं जो प्रत्येक 8 बाइट्स पर कब्जा कर रही हैं तो प्रभावी पता गणना में उपयोग किए जाने से पहले इंडेक्स रजिस्टर में मान 8 से गुणा किया जाता है। स्केल फैक्टर आम तौर पर दो की शक्ति होने तक ही सीमित होता है, ताकि गुणन के बजाय बिट शिफ्ट का उपयोग किया जा सके।
अप्रत्यक्ष पंजीकृत करें
+----------+----------+-----+ | लोड | reg1 | आधार| +----------+----------+-----+ (प्रभावी पता = आधार रजिस्टर की सामग्री)
कुछ कंप्यूटरों में यह एक विशिष्ट एड्रेसिंग मोड के रूप में होता है। कई कंप्यूटर 0 के ऑफ़सेट मान के साथ बस बेस प्लस ऑफ़सेट का उपयोग करते हैं। उदाहरण के लिए, (A7)
ऑटोइनक्रिकमेंट अप्रत्यक्ष पंजीकृत करें
+----------+-----+----------+ | लोड | रेग | आधार | +----------+-----+----------+ (प्रभावी पता = आधार रजिस्टर की सामग्री)
प्रभावी पता निर्धारित करने के बाद, आधार रजिस्टर में मूल्य उस डेटा आइटम के आकार से बढ़ जाता है जिसे एक्सेस किया जाना है। उदाहरण के लिए, (A7)+ एड्रेस रजिस्टर A7 की सामग्री को एक्सेस करेगा, फिर A7 के एड्रेस पॉइंटर को 1 (आमतौर पर 1 शब्द) से बढ़ा देगा। एक लूप के भीतर, इस एड्रेसिंग मोड का उपयोग किसी सरणी या वेक्टर के सभी तत्वों के माध्यम से कदम उठाने के लिए किया जा सकता है।
उच्च-स्तरीय भाषाओं में अक्सर यह एक अच्छा विचार माना जाता है कि जो कार्य परिणाम लौटाते हैं उनका कोई साइड इफेक्ट नहीं होना चाहिए (कंप्यूटर विज्ञान) (दुष्प्रभावों की कमी प्रोग्राम को समझने और सत्यापन को बहुत आसान बनाती है)। इस एड्रेसिंग मोड का एक साइड इफेक्ट है कि आधार रजिस्टर बदल दिया जाता है। यदि बाद की मेमोरी एक्सेस एक त्रुटि का कारण बनती है (उदाहरण के लिए पृष्ठ दोष, बस त्रुटि, पता त्रुटि) जिससे रुकावट आती है, तो निर्देश को फिर से शुरू करना अधिक समस्याग्रस्त हो जाता है क्योंकि एक या अधिक रजिस्टरों को उस स्थिति में वापस सेट करने की आवश्यकता हो सकती है जहां वे पहले थे। निर्देश मूल रूप से शुरू हुआ।
कम से कम दो कंप्यूटर आर्किटेक्चर रहे हैं जिनमें इस एड्रेसिंग मोड का उपयोग करने पर इंटरप्ट से पुनर्प्राप्ति के संबंध में कार्यान्वयन की समस्याएं हैं:
- मोटोरोला 68000 (पता 24 बिट्स में दर्शाया गया है)। एक या दो ऑटोइनक्रिकमेंट रजिस्टर ऑपरेंड हो सकते हैं। 68010+ ने बस त्रुटि या पता त्रुटियों पर प्रोसेसर की आंतरिक स्थिति को सहेजकर समस्या का समाधान किया।
- दिसंबर वैक्स। 6 ऑटोइनक्रिकमेंट रजिस्टर ऑपरेंड तक हो सकते हैं। प्रत्येक ऑपरेंड एक्सेस दो पेज फॉल्ट का कारण बन सकता है (यदि ऑपरेंड एक पेज बाउंड्री को स्ट्रैडल करने के लिए होता है)। बेशक निर्देश 50 बाइट से अधिक लंबा हो सकता है और एक पृष्ठ सीमा को भी फैला सकता है!
ऑटोडेक्रिमेंट अप्रत्यक्ष पंजीकृत करें
+----------+-----+-----+ | लोड | रेग | आधार| +----------+-----+-----+ (प्रभावी पता = आधार रजिस्टर की नई सामग्री)
प्रभावी पता निर्धारित करने से पहले, आधार रजिस्टर में मूल्य उस डेटा आइटम के आकार से घटाया जाता है जिसे एक्सेस किया जाना है।
लूप के भीतर, इस एड्रेसिंग मोड का उपयोग किसी सरणी या वेक्टर के सभी तत्वों के माध्यम से पीछे की ओर जाने के लिए किया जा सकता है। पिछले एड्रेसिंग मोड (ऑटोइनक्रिकमेंट) के संयोजन के साथ इस मोड का उपयोग करके एक स्टैक को लागू किया जा सकता है।
- Register autoincrement indirect के अंतर्गत दुष्प्रभावों की चर्चा देखें।
स्मृति अप्रत्यक्ष
इस आलेख में उल्लिखित किसी भी एड्रेसिंग मोड में अप्रत्यक्ष एड्रेसिंग को इंगित करने के लिए एक अतिरिक्त बिट हो सकता है, यानी कुछ मोड का उपयोग करके गणना की गई पता वास्तव में एक स्थान का पता है (आमतौर पर एक पूर्ण शब्द (डेटा प्रकार)) जिसमें वास्तविक प्रभावी पता होता है .
कोड या डेटा के लिए इनडायरेक्ट एड्रेसिंग का इस्तेमाल किया जा सकता है। यह पॉइंटर्स, संदर्भों, या हैंडल (कंप्यूटिंग) के कार्यान्वयन को बहुत आसान बना सकता है, और उन सबरूटीन्स को कॉल करना भी आसान बना सकता है जो अन्यथा संबोधित नहीं हैं। इनडायरेक्ट एड्रेसिंग में अतिरिक्त मेमोरी एक्सेस शामिल होने के कारण परफॉर्मेंस पेनल्टी लगती है।
कुछ शुरुआती मिनीकंप्यूटर (जैसे DEC PDP-8, डेटा जनरल नोवा) में केवल कुछ ही रजिस्टर थे और केवल एक सीमित डायरेक्ट एड्रेसिंग रेंज (8 बिट) थी। इसलिए मेमोरी का उपयोग अप्रत