एड्रेसिंग मोड
This article needs additional citations for verification. (May 2009) (Learn how and when to remove this template message) |
एड्रेसिंग मोड अधिकांश सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) डिजाइनों में इंस्ट्रक्शन सेट आर्किटेक्चर का एक पहलू है। किसी दिए गए निर्देश सेट आर्किटेक्चर में परिभाषित विभिन्न एड्रेसिंग मोड परिभाषित करते हैं कि उस आर्किटेक्चर में मशीन कोड निर्देश (कंप्यूटर विज्ञान) प्रत्येक निर्देश के ऑपरेंड की पहचान कैसे करता है। एक एड्रेसिंग मोड निर्दिष्ट करता है कि एक मशीन निर्देश या अन्य जगहों में निहित प्रोसेसर रजिस्टरों और / या स्थिरांक में रखी गई जानकारी का उपयोग करके एक ऑपरेंड के प्रभावी मेमोरी एड्रेस की गणना कैसे करें।
कंप्यूटर प्रोग्रामिंग में, एड्रेसिंग मोड मुख्य रूप से उन लोगों के लिए रुचि रखते हैं जो असेंबली लैंग्वेज में लिखते हैं और कंपाइलर लेखकों के लिए। संबंधित अवधारणा के लिए ऑर्थोगोनल इंस्ट्रक्शन सेट देखें जो किसी भी एड्रेसिंग मोड का उपयोग करने के लिए किसी भी निर्देश की क्षमता से संबंधित है।
चेतावनी
This section does not cite any sources. (May 2012) (Learn how and when to remove this template message) |
ध्यान दें कि विभिन्न एड्रेसिंग मोड के नामकरण का कोई आम तौर पर स्वीकृत तरीका नहीं है। विशेष रूप से, अलग-अलग लेखक और कंप्यूटर निर्माता एक ही एड्रेसिंग मोड को अलग-अलग नाम दे सकते हैं, या अलग-अलग एड्रेसिंग मोड को एक ही नाम दे सकते हैं। इसके अलावा, एक एड्रेसिंग मोड, जिसे एक दिए गए आर्किटेक्चर में, सिंगल एड्रेसिंग मोड के रूप में माना जाता है, कार्यक्षमता का प्रतिनिधित्व कर सकता है, जो कि दूसरे आर्किटेक्चर में, दो या दो से अधिक एड्रेसिंग मोड द्वारा कवर किया जाता है। उदाहरण के लिए, कुछ जटिल निर्देश सेट कंप्यूटर (सीआईएससी) आर्किटेक्चर, जैसे डिजिटल उपकरण निगम | डिजिटल उपकरण निगम (डीईसी) वैक्स, रजिस्टरों और मूल्य (कंप्यूटर विज्ञान) को सिर्फ एक अन्य एड्रेसिंग मोड के रूप में मानते हैं। अन्य, जैसे आईबीएम सिस्टम/360 और उसके उत्तराधिकारी, और सबसे कम निर्देश सेट कंप्यूटर (आरआईएससी) डिज़ाइन, इस जानकारी को निर्देश के भीतर एन्कोड करते हैं। इस प्रकार, बाद वाली मशीनों में एक रजिस्टर को दूसरे में कॉपी करने, एक रजिस्टर में एक शाब्दिक स्थिरांक की प्रतिलिपि बनाने और एक मेमोरी लोकेशन की सामग्री को एक रजिस्टर में कॉपी करने के लिए तीन अलग-अलग निर्देश कोड होते हैं, जबकि VAX में केवल एक MOV निर्देश होता है।
एड्रेसिंग मोड शब्द स्वयं विभिन्न व्याख्याओं के अधीन है: या तो मेमोरी एड्रेस कैलकुलेशन मोड या ऑपरेंड एक्सेसिंग मोड। पहली व्याख्या के तहत, निर्देश जो मेमोरी से नहीं पढ़ते हैं या मेमोरी में नहीं लिखते हैं (जैसे कि रजिस्टर में शाब्दिक जोड़ें) को एड्रेसिंग मोड नहीं माना जाता है। दूसरी व्याख्या VAX जैसी मशीनों के लिए अनुमति देती है जो एक रजिस्टर या एक शाब्दिक ऑपरेंड के लिए अनुमति देने के लिए ऑपरेंड मोड बिट्स का उपयोग करती हैं। लोड प्रभावी पता जैसे निर्देशों पर केवल पहली व्याख्या लागू होती है, जो ऑपरेंड के पते को लोड करती है, न कि ऑपरेंड को ही।
नीचे सूचीबद्ध एड्रेसिंग मोड को कोड एड्रेसिंग और डेटा एड्रेसिंग में विभाजित किया गया है। अधिकांश कंप्यूटर आर्किटेक्चर इस अंतर को बनाए रखते हैं, लेकिन कुछ आर्किटेक्चर हैं (या रहे हैं) जो किसी भी संदर्भ में सभी एड्रेसिंग मोड का उपयोग करने की अनुमति देते हैं।
नीचे दिखाए गए निर्देश एड्रेसिंग मोड को स्पष्ट करने के लिए विशुद्ध रूप से प्रतिनिधि हैं, और जरूरी नहीं कि किसी विशेष कंप्यूटर द्वारा उपयोग किए जाने वाले निमोनिक्स को प्रतिबिंबित करें।
एड्रेसिंग मोड की संख्या
कंप्यूटर आर्किटेक्चर हार्डवेयर में प्रदान किए जाने वाले एड्रेसिंग मोड की संख्या के अनुसार बहुत भिन्न होते हैं। जटिल एड्रेसिंग मोड को खत्म करने और केवल एक या कुछ सरल एड्रेसिंग मोड का उपयोग करने के कुछ लाभ हैं, भले ही इसके लिए कुछ अतिरिक्त निर्देशों और शायद एक अतिरिक्त रजिस्टर की आवश्यकता हो।[1][2] यह साबित किया है[3][4][5] निर्देश पाइपलाइन सीपीयू को डिजाइन करना बहुत आसान है यदि उपलब्ध एकमात्र एड्रेसिंग मोड सरल हैं।
अधिकांश आरआईएससी आर्किटेक्चर में केवल पांच सरल एड्रेसिंग मोड होते हैं, जबकि सीआईएससी आर्किटेक्चर जैसे डीईसी वैक्स में एक दर्जन से अधिक एड्रेसिंग मोड होते हैं, जिनमें से कुछ काफी जटिल होते हैं। IBM सिस्टम/360 आर्किटेक्चर में केवल तीन एड्रेसिंग मोड थे; सिस्टम/390 के लिए कुछ और जोड़े गए हैं।
जब केवल कुछ एड्रेसिंग मोड होते हैं, तो आवश्यक विशेष एड्रेसिंग मोड आमतौर पर निर्देश कोड के भीतर एन्कोड किया जाता है (जैसे आईबीएम सिस्टम/360 और उत्तराधिकारी, अधिकांश आरआईएससी)। लेकिन जब कई एड्रेसिंग मोड होते हैं, तो एड्रेसिंग मोड को निर्दिष्ट करने के लिए एक विशिष्ट फ़ील्ड को अक्सर निर्देश में अलग रखा जाता है। DEC VAX ने लगभग सभी निर्देशों के लिए कई मेमोरी ऑपरेंड की अनुमति दी, और इसलिए उस विशेष ऑपरेंड के लिए एड्रेसिंग मोड को इंगित करने के लिए प्रत्येक ऑपरेंड विनिर्देशक के पहले कुछ बिट्स आरक्षित किए। एड्रेसिंग मोड स्पेसिफायर बिट्स को ओपकोड ऑपरेशन बिट्स से अलग रखते हुए एक ऑर्थोगोनल इंस्ट्रक्शन सेट तैयार करता है।
कई एड्रेसिंग मोड वाले कंप्यूटर पर भी, वास्तविक कार्यक्रमों का मापन[6] इंगित करता है कि नीचे सूचीबद्ध सरल एड्रेसिंग मोड में उपयोग किए गए सभी एड्रेसिंग मोड में से कुछ 90% या अधिक के लिए खाते हैं। चूंकि इस तरह के अधिकांश माप संकलक द्वारा उच्च-स्तरीय भाषाओं से उत्पन्न कोड पर आधारित होते हैं, यह कुछ हद तक उपयोग किए जा रहे संकलक की सीमाओं को दर्शाता है।[7][6][8]
उपयोगी दुष्प्रभाव
कुछ निर्देश सेट आर्किटेक्चर, जैसे कि x86 और IBM/360 और इसके उत्तराधिकारी, में लोड प्रभावी पता निर्देश होता है।[9][10] यह प्रभावी ऑपरेंड पते की गणना करता है, लेकिन उस स्मृति स्थान पर कार्य करने के बजाय, यह उस पते को लोड करता है जिसे एक रजिस्टर में एक्सेस किया गया होता। किसी सरणी तत्व के पते को सबरूटीन में पास करते समय यह उपयोगी हो सकता है। यह एक निर्देश में सामान्य से अधिक गणना करने का एक चतुर तरीका भी हो सकता है; उदाहरण के लिए, एड्रेसिंग मोड बेस + इंडेक्स + ऑफ़सेट (नीचे विस्तृत) के साथ इस तरह के निर्देश का उपयोग करने से एक निर्देश में दो रजिस्टर और एक स्थिरांक को एक साथ जोड़ने की अनुमति मिलती है।
कोड के लिए सरल एड्रेसिंग मोड
कोड के लिए कुछ सरल एड्रेसिंग मोड नीचे दिखाए गए हैं। नामकरण मंच के आधार पर भिन्न हो सकता है।
पूर्ण या प्रत्यक्ष
+-----+----------------------------+ |कूद| पता | +-----+----------------------------+ (प्रभावी पीसी पता = पता)
एक पूर्ण निर्देश पते के लिए प्रभावी पता पता पैरामीटर ही है जिसमें कोई संशोधन नहीं है।
पीसी-रिश्तेदार
+-----+----------------------------+ |कूद| ऑफसेट | कूद रिश्तेदार +-----+----------------------------+ (प्रभावी पीसी पता = अगला निर्देश पता + ऑफ़सेट, ऑफ़सेट नकारात्मक हो सकता है)
प्रोग्राम काउंटर-रिलेटिव इंस्ट्रक्शन एड्रेस के लिए प्रभावी पता अगले निर्देश के पते में जोड़ा गया ऑफसेट पैरामीटर है। यह ऑफ़सेट आमतौर पर निर्देश से पहले और बाद में कोड के संदर्भ की अनुमति देने के लिए हस्ताक्षरित होता है।[11] यह छलांग के संबंध में विशेष रूप से उपयोगी है, क्योंकि विशिष्ट छलांग पास के निर्देशों के लिए होती है (उच्च-स्तरीय भाषा में सबसे अधिक या जबकि बयान काफी कम होते हैं)। वास्तविक कार्यक्रमों के मापन से पता चलता है कि 8 या 10 बिट ऑफ़सेट कुछ 90% सशर्त छलांग (लगभग ± 128 या ± 512 बाइट्स) के लिए पर्याप्त है।[12] पीसी-रिलेटिव एड्रेसिंग का एक अन्य लाभ यह है कि कोड स्थिति-स्वतंत्र कोड | स्थिति-स्वतंत्र हो सकता है, यानी इसे किसी भी पते को समायोजित करने की आवश्यकता के बिना स्मृति में कहीं भी लोड किया जा सकता है।
इस एड्रेसिंग मोड के कुछ संस्करण सशर्त हो सकते हैं जो दो रजिस्टरों (जंप अगर reg1=reg2 ), एक रजिस्टर (जंप जब तक reg1=0 ) या कोई रजिस्टर नहीं है, जो स्थिति रजिस्टर में कुछ पहले से निर्धारित बिट का उल्लेख करता है। नीचे #सशर्त निष्पादन भी देखें।
अप्रत्यक्ष पंजीकृत करें
+----------+-----+ |जंपविया| रेग | +----------+-----+ (प्रभावी पीसी पता = रजिस्टर 'reg' की सामग्री)
एक रजिस्टर अप्रत्यक्ष निर्देश के लिए प्रभावी पता निर्दिष्ट रजिस्टर में पता है। उदाहरण के लिए, (ए 7) पता रजिस्टर ए 7 की सामग्री तक पहुंचने के लिए।
प्रभाव उस निर्देश पर नियंत्रण स्थानांतरित करना है जिसका पता निर्दिष्ट रजिस्टर में है।
कई आरआईएससी मशीनों के साथ-साथ सीआईएससी आईबीएम सिस्टम/360 और उत्तराधिकारी के पास सबरूटीन कॉल निर्देश हैं जो रिटर्न स्टेटमेंट को एड्रेस रजिस्टर में रखते हैं- रजिस्टर-इनडायरेक्ट एड्रेसिंग मोड का इस्तेमाल उस सबरूटीन कॉल से वापस आने के लिए किया जाता है।
अनुक्रमिक एड्रेसिंग मोड
अनुक्रमिक निष्पादन
+----------+ | नहीं | निम्नलिखित निर्देश निष्पादित करें: +----------+ (प्रभावी पीसी पता = अगला निर्देश पता)
सीपीयू, अनुक्रमिक निर्देश को निष्पादित करने के बाद, निम्नलिखित निर्देश को तुरंत निष्पादित करता है।
कुछ कंप्यूटरों पर अनुक्रमिक निष्पादन को एड्रेसिंग मोड नहीं माना जाता है।
अधिकांश सीपीयू आर्किटेक्चर पर अधिकांश निर्देश अनुक्रमिक निर्देश हैं। चूंकि अधिकांश निर्देश अनुक्रमिक निर्देश होते हैं, सीपीयू डिजाइनर अक्सर ऐसी विशेषताएं जोड़ते हैं जो इन अनुक्रमिक निर्देशों को तेजी से चलाने के लिए जानबूझकर अन्य निर्देशों-शाखा निर्देशों पर प्रदर्शन का त्याग करते हैं।
सशर्त शाखाएं पीसी को 2 संभावित परिणामों में से एक के साथ लोड करती हैं, स्थिति के आधार पर- अधिकांश सीपीयू आर्किटेक्चर ली गई शाखा के लिए कुछ अन्य एड्रेसिंग मोड का उपयोग करते हैं, और नहीं ली गई शाखा के लिए अनुक्रमिक निष्पादन।
आधुनिक सीपीयू में कई विशेषताएं- निर्देश प्रीफेच और अधिक जटिल पाइपलाइन (कंप्यूटिंग) आईएनजी, आउट-ऑफ-ऑर्डर निष्पादन, आदि-इस भ्रम को बनाए रखते हैं कि प्रत्येक निर्देश अगले एक के शुरू होने से पहले समाप्त हो जाता है, वही अंतिम परिणाम देता है, भले ही वह नहीं है वास्तव में आंतरिक रूप से क्या होता है।
इस तरह के अनुक्रमिक निर्देशों का प्रत्येक मूल खंड संदर्भ के अस्थायी और स्थानिक इलाके दोनों को प्रदर्शित करता है।
सीपीयू जो अनुक्रमिक निष्पादन का उपयोग नहीं करते हैं
सीपीयू जो प्रोग्राम काउंटर के साथ अनुक्रमिक निष्पादन का उपयोग नहीं करते हैं वे अत्यंत दुर्लभ हैं। कुछ सीपीयू में, प्रत्येक निर्देश हमेशा अगले निर्देश का पता निर्दिष्ट करता है। ऐसे सीपीयू में एक निर्देश सूचक होता है जो उस निर्दिष्ट पते को रखता है; यह कोई प्रोग्राम काउंटर नहीं है क्योंकि इसे बढ़ाने का कोई प्रावधान नहीं है। ऐसे 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 बिट) थी। इसलिए मेमोरी का उपयोग अप्रत्यक्ष एड्रेसिंग किसी भी महत्वपूर्ण मात्रा में मेमोरी को संदर्भित करने का लगभग एकमात्र तरीका था।
पीसी-रिश्तेदार
+----------+----------+--------------+---------------------+ | लोड | reg1 | आधार = पीसी | ऑफसेट | +----------+----------+--------------+---------------------+ reg1: = RAM [पीसी + ऑफ़सेट] (प्रभावी पता = पीसी + ऑफसेट)
पीसी-रिश्तेदार एड्रेसिंग मोड का उपयोग वर्तमान निर्देश से थोड़ी दूरी पर प्रोग्राम मेमोरी में संग्रहीत मूल्य के साथ एक रजिस्टर लोड करने के लिए किया जा सकता है। इसे बेस प्लस ऑफ़सेट एड्रेसिंग मोड के एक विशेष मामले के रूप में देखा जा सकता है, जो प्रोग्राम काउंटर (पीसी) को बेस रजिस्टर के रूप में चुनता है।
कुछ सीपीयू ऐसे हैं जो पीसी-सापेक्ष डेटा संदर्भों का समर्थन करते हैं। ऐसे सीपीयू में शामिल हैं:
एमओएस 6502 और इसके डेरिवेटिव ने सभी शाखाओं (कंप्यूटर विज्ञान) के लिए सापेक्ष पते का इस्तेमाल किया। केवल इन निर्देशों ने इस मोड का इस्तेमाल किया, जंप ने कई अन्य एड्रेसिंग मोड का इस्तेमाल किया।
x86-64 आर्किटेक्चर और 64-बिट ARMv8-A आर्किटेक्चर[14] पीसी-रिश्तेदार एड्रेसिंग मोड हैं, जिन्हें x86-64 में आरआईपी-रिश्तेदार और एआरएमवी 8-ए में शाब्दिक कहा जाता है। मोटोरोला 6809 एक पीसी-रिश्तेदार एड्रेसिंग मोड का भी समर्थन करता है।
PDP-11 आर्किटेक्चर, VAX आर्किटेक्चर और 32-बिट ARM आर्किटेक्चर पीसी को रजिस्टर फाइल में रखते हुए पीसी-रिश्तेदार एड्रेसिंग का समर्थन करते हैं।
आईबीएम जेड/आर्किटेक्चर में विशिष्ट निर्देश शामिल हैं, उदाहरण के लिए, लोड रिलेटिव लॉन्ग, पीसी-रिलेटिव एड्रेसिंग के साथ यदि सामान्य-निर्देश-एक्सटेंशन सुविधा सक्रिय है।
जब इस एड्रेसिंग मोड का उपयोग किया जाता है, तो संकलक आमतौर पर उन स्थिरांक को निर्देशों के रूप में गलती से निष्पादित करने से रोकने के लिए, सबरूटीन के तुरंत पहले या तुरंत बाद एक शाब्दिक पूल में स्थिरांक रखता है।
यह एड्रेसिंग मोड, जो हमेशा मेमोरी से डेटा प्राप्त करता है या डेटा को मेमोरी में स्टोर करता है और फिर क्रमिक रूप से अगले निर्देश को निष्पादित करने के लिए गिरता है (डेटा को प्रभावी पता इंगित करता है), पीसी-रिश्तेदार शाखा के साथ भ्रमित नहीं होना चाहिए जो डेटा प्राप्त नहीं करता है या मेमोरी में डेटा स्टोर करें, लेकिन इसके बजाय दिए गए ऑफ़सेट पर किसी अन्य निर्देश की शाखाएं (प्रभावी पता निष्पादन योग्य निर्देश को इंगित करता है)।
अप्रचलित एड्रेसिंग मोड
यहां सूचीबद्ध एड्रेसिंग मोड का उपयोग 1950-1980 की अवधि में किया गया था, लेकिन अब अधिकांश वर्तमान कंप्यूटरों पर उपलब्ध नहीं हैं। यह सूची किसी भी तरह से पूर्ण नहीं है; समय-समय पर कई अन्य दिलचस्प और अजीबोगरीब एड्रेसिंग मोड का इस्तेमाल किया गया है, उदा। निरपेक्ष-ऋण-तार्किक-या दो या तीन सूचकांक रजिस्टर।[15][16]
बहु स्तरीय स्मृति अप्रत्यक्ष
यदि शब्द का आकार पते से बड़ा है, तो स्मृति-अप्रत्यक्ष संबोधन के लिए संदर्भित शब्द में एक अन्य स्मृति अप्रत्यक्ष चक्र को इंगित करने के लिए एक अप्रत्यक्ष ध्वज सेट हो सकता है। इस ध्वज को एक अप्रत्यक्ष बिट के रूप में संदर्भित किया जाता है, और परिणामी सूचक एक टैग किया हुआ सूचक होता है, अप्रत्यक्ष बिट टैगिंग चाहे वह प्रत्यक्ष सूचक हो या अप्रत्यक्ष सूचक। यह सुनिश्चित करने के लिए देखभाल की आवश्यकता है कि अप्रत्यक्ष पतों की श्रृंखला स्वयं को संदर्भित नहीं करती है; यदि ऐसा होता है, तो किसी पते को हल करने का प्रयास करते समय एक अनंत लूप प्राप्त कर सकता है।
आईबीएम 1620, डेटा जनरल नोवा, एचपी 2100 श्रृंखला, और एनएआर 2 प्रत्येक में ऐसी बहु-स्तरीय मेमोरी अप्रत्यक्ष है, और इस तरह के एक अनंत पता गणना लूप में प्रवेश कर सकती है। नोवा पर मेमोरी इनडायरेक्ट एड्रेसिंग मोड ने थ्रेडेड कोड के आविष्कार को प्रभावित किया#थ्रेडेड कोड का विकास।
18-बिट कंप्यूटिंग के साथ डीईसी पीडीपी -10 कंप्यूटर | 18-बिट पते और 36-बिट कंप्यूटिंग | 36-बिट शब्दों ने प्रत्येक चरण में एक इंडेक्स रजिस्टर का उपयोग करने की संभावना के साथ बहु-स्तरीय अप्रत्यक्ष पते की अनुमति दी। प्रत्येक एड्रेस वर्ड को डिकोड करने से पहले प्रायोरिटी इंटरप्ट सिस्टम से पूछताछ की गई।[17] इसलिए, एक इनडायरेक्ट एड्रेस लूप डिवाइस सर्विस रूटीन के निष्पादन को नहीं रोकेगा, जिसमें कोई भी प्रीमेशन (कंप्यूटिंग) # प्रीमेप्टिव मल्टीटास्किंग शेड्यूलर का टाइम-स्लाइस एक्सपायरी हैंडलर शामिल है। एक लूपिंग निर्देश को किसी अन्य कंप्यूट-बाउंड जॉब की तरह माना जाएगा।
मेमोरी-मैप्ड रजिस्टर
कुछ कंप्यूटरों पर ऐसे पते थे जो प्राथमिक भंडारण के बजाय रजिस्टरों को संदर्भित करते थे, या उन रजिस्टरों को लागू करने के लिए उपयोग की जाने वाली प्राथमिक मेमोरी के लिए। हालांकि कुछ शुरुआती कंप्यूटरों पर पता श्रेणी के उच्च अंत में रजिस्टर पते थे, उदाहरण के लिए, आईबीएम 650[18][lower-alpha 1], आईबीएम 7070[19][lower-alpha 3], प्रवृत्ति केवल निचले सिरे पर रजिस्टर पते का उपयोग करने और स्मृति के केवल पहले 8 या 16 शब्दों (जैसे आईसीटी 1900 श्रृंखला, डीईसी पीडीपी -10) का उपयोग करने की रही है। इसका मतलब यह था कि निर्देश को पंजीकृत करने के लिए एक अलग ऐड रजिस्टर की कोई आवश्यकता नहीं थी - कोई केवल निर्देश को पंजीकृत करने के लिए ऐड मेमोरी का उपयोग कर सकता था।
पीडीपी -10 के शुरुआती मॉडल के मामले में, जिसमें कोई कैश मेमोरी नहीं थी, मेमोरी के पहले कुछ शब्दों में लोड किया गया एक तंग आंतरिक लूप (जहां स्थापित होने पर तेज़ रजिस्टरों को संबोधित किया जा सकता था) इससे कहीं ज्यादा तेजी से चलता था चुंबकीय कोर मेमोरी
DEC PDP-11 श्रृंखला के बाद के मॉडल ने इनपुट/आउटपुट क्षेत्र में पतों पर रजिस्टरों को मैप किया, लेकिन यह मुख्य रूप से दूरस्थ निदान की अनुमति देने के लिए था। भ्रामक रूप से, 16-बिट रजिस्टरों को लगातार 8-बिट बाइट पते पर मैप किया गया था।
मेमोरी इनडायरेक्ट और ऑटोइनक्रिकमेंट
DEC PDP-8 मिनीकंप्यूटर में आठ विशेष स्थान थे (8 से 15 के पते पर)। जब मेमोरी इनडायरेक्ट एड्रेसिंग के माध्यम से एक्सेस किया जाता है, तो ये स्थान उपयोग से पहले स्वचालित रूप से बढ़ जाएंगे।[20] इसने पते को बढ़ाने के लिए संचयक का उपयोग किए बिना लूप में मेमोरी के माध्यम से कदम उठाना आसान बना दिया।
डेटा जनरल नोवा मिनीकंप्यूटर में 16 से 31 पते पर 16 विशेष मेमोरी स्थान थे।[21] जब मेमोरी इनडायरेक्ट एड्रेसिंग के माध्यम से एक्सेस किया जाता है, तो 16 से 23 स्वचालित रूप से उपयोग से पहले वृद्धि होगी, और 24 से 31 स्वचालित रूप से उपयोग से पहले घट जाएगी।
शून्य पृष्ठ
डाटा जनरल नोवा, मोटोरोला 6800 परिवार, और एमओएस टेक्नोलॉजी 6502 प्रोसेसर के परिवार में बहुत कम आंतरिक रजिस्टर थे। आंतरिक रजिस्टरों के विपरीत अंकगणित और तार्किक निर्देश ज्यादातर स्मृति में मूल्यों के खिलाफ किए गए थे। नतीजतन, कई निर्देशों को स्मृति के लिए दो-बाइट (16-बिट) स्थान की आवश्यकता होती है। यह देखते हुए कि इन प्रोसेसर पर ऑपकोड केवल एक बाइट (8 बिट) लंबाई के थे, मेमोरी एड्रेस कोड आकार का एक महत्वपूर्ण हिस्सा बना सकते हैं।
इन प्रोसेसर के डिजाइनरों में एक आंशिक उपाय शामिल था जिसे शून्य पृष्ठ एड्रेसिंग के रूप में जाना जाता है। मेमोरी के शुरुआती 256 बाइट्स ($0000 - $00FF; a.k.a., पेज 0) को एक-बाइट पूर्ण या अनुक्रमित मेमोरी एड्रेस का उपयोग करके एक्सेस किया जा सकता है। इसने निर्देश निष्पादन समय को एक घड़ी चक्र और निर्देश लंबाई को एक बाइट से कम कर दिया। इस क्षेत्र में अक्सर उपयोग किए जाने वाले डेटा को संग्रहीत करके, कार्यक्रमों को छोटा और तेज़ बनाया जा सकता है।
नतीजतन, शून्य पृष्ठ का उपयोग रजिस्टर फ़ाइल के समान ही किया गया था। हालांकि, कई प्रणालियों पर, इसके परिणामस्वरूप ऑपरेटिंग सिस्टम और उपयोगकर्ता प्रोग्राम द्वारा शून्य पृष्ठ मेमोरी क्षेत्र का उच्च उपयोग किया गया, जिसने इसके उपयोग को सीमित कर दिया क्योंकि खाली स्थान सीमित था।
सीधा पृष्ठ
WDC 65816, CSG 65CE02, और Motorola 6809 सहित कई लेट मॉडल 8-बिट प्रोसेसर में शून्य पेज एड्रेस मोड को बढ़ाया गया था। नया मोड, जिसे डायरेक्ट पेज एड्रेसिंग के रूप में जाना जाता है, ने 256-बाइट शून्य को स्थानांतरित करने की क्षमता को जोड़ा। मेमोरी की शुरुआत से पेज मेमोरी विंडो (ऑफ़सेट पता $0000) मेमोरी के पहले 64 KB के भीतर एक नए स्थान पर।
CSG 65CE02 ने नए बेस पेज (B) रजिस्टर में 8-बिट ऑफ़सेट मान को स्टोर करके मेमोरी के पहले 64 KB के भीतर किसी भी 256-बाइट सीमा में सीधे पृष्ठ को स्थानांतरित करने की अनुमति दी। मोटोरोला 6809 अपने डायरेक्ट पेज (डीपी) रजिस्टर के साथ भी ऐसा ही कर सकता है। WDC 65816 एक कदम और आगे बढ़ गया और नए डायरेक्ट (D) रजिस्टर में 16-बिट ऑफ़सेट मान को स्टोर करके मेमोरी के पहले 64 KB के भीतर डायरेक्ट पेज को किसी भी स्थान पर ले जाने की अनुमति दी।
परिणामस्वरूप, अधिक संख्या में प्रोग्राम उन्नत प्रत्यक्ष पृष्ठ एड्रेसिंग मोड बनाम लीगेसी प्रोसेसर का उपयोग करने में सक्षम थे जिसमें केवल शून्य पृष्ठ एड्रेसिंग मोड शामिल था।
सीमा जांच के साथ स्केल इंडेक्स
यह स्केल किए गए इंडेक्स एड्रेसिंग के समान है, सिवाय इसके कि निर्देश में दो अतिरिक्त ऑपरेंड (आमतौर पर स्थिरांक) होते हैं, और हार्डवेयर जांचता है कि इंडेक्स वैल्यू इन सीमाओं के बीच है।
एक अन्य भिन्नता वेक्टर डिस्क्रिप्टर का उपयोग सीमा को बनाए रखने के लिए करती है; इससे गतिशील रूप से आवंटित सरणी को कार्यान्वित करना आसान हो जाता है और अभी भी पूर्ण सीमा जांच होती है।
शब्द के भीतर बिट फ़ील्ड के लिए अप्रत्यक्ष
कुछ कंप्यूटरों में शब्दों के भीतर सबफ़ील्ड के लिए विशेष अप्रत्यक्ष एड्रेसिंग मोड थे।
जीई-600 श्रृंखला|जीई/हनीवेल 600 श्रृंखला वर्ण अप्रत्यक्ष शब्द को संबोधित करते हुए इसके 36-बिट कंप्यूटिंग|36-बिट शब्द के भीतर या तो 6-बिट या 9-बिट वर्ण फ़ील्ड निर्दिष्ट करता है।
डीईसी पीडीपी -10, 36-बिट में भी विशेष निर्देश थे, जो स्मृति को 1 बिट से 36 बिट तक किसी भी आकार के निश्चित आकार के बिट फ़ील्ड या बाइट्स के अनुक्रम के रूप में माना जा सकता था। मेमोरी में एक-शब्द अनुक्रम डिस्क्रिप्टर, जिसे बाइट पॉइंटर कहा जाता है, अनुक्रम के भीतर वर्तमान शब्द पता, एक शब्द के भीतर एक बिट स्थिति और प्रत्येक बाइट का आकार रखता है।
इस डिस्क्रिप्टर के माध्यम से बाइट्स को लोड और स्टोर करने के लिए निर्देश मौजूद थे, और डिस्क्रिप्टर को अगले बाइट पर इंगित करने के लिए बढ़ाने के लिए (बाइट्स शब्द सीमाओं में विभाजित नहीं थे)। अधिकांश डीईसी सॉफ़्टवेयर ने प्रति शब्द पांच 7-बिट बाइट्स (सादे ASCII वर्ण) का उपयोग किया, जिसमें एक बिट प्रति शब्द अप्रयुक्त था। सी (प्रोग्रामिंग भाषा) के कार्यान्वयन को प्रति शब्द चार 9-बिट बाइट्स का उपयोग करना पड़ा, क्योंकि सी में 'मॉलोक' फ़ंक्शन मानता है कि एक इंट का आकार चार के आकार का कुछ गुणक है;[22] वास्तविक गुणक सिस्टम-निर्भर संकलन-समय ऑपरेटर आकार द्वारा निर्धारित किया जाता है।
सूचकांक अगला निर्देश
इलियट 503,[23] इलियट 803,[23][24] और अपोलो गाइडेंस कंप्यूटर ने केवल एब्सोल्यूट एड्रेसिंग का इस्तेमाल किया, और उसके पास कोई इंडेक्स रजिस्टर नहीं था।
इस प्रकार, अप्रत्यक्ष कूद, या रजिस्टरों के माध्यम से कूदना, निर्देश सेट में समर्थित नहीं थे। इसके बजाय, वर्तमान मेमोरी शब्द की सामग्री को अगले निर्देश में जोड़ने का निर्देश दिया जा सकता है। निष्पादित किए जाने वाले अगले निर्देश में एक छोटा मान जोड़ना, उदाहरण के लिए, a change को बदल सकता है JUMP 0
में JUMP 20
, इस प्रकार एक अनुक्रमित छलांग का प्रभाव पैदा करता है। ध्यान दें कि निर्देश ऑन-द-फ्लाई संशोधित किया गया है और स्मृति में अपरिवर्तित रहता है, यानी यह स्वयं-संशोधित कोड नहीं है। यदि अगले निर्देश में जोड़ा जा रहा मूल्य काफी बड़ा था, तो यह उस निर्देश के साथ-साथ पते के ऑपकोड को भी संशोधित कर सकता था।
शब्दावली
- Indirect
- Data referred to through a pointer or address.
- Immediate
- Data embedded directly in an instruction or command list.
- Index
- A dynamic offset, typically held in an index register, possibly scaled by an object size.
- Offset
- An immediate value added to an address; e.g., corresponding to structure field access in the C programming language.
- Relative
- An address formed relative to another address.
- Post increment
- The stepping of an address past data used, similar to
*p++
in the C programming language, used for stack pop operations. - Pre decrement
- The decrementing of an address prior to use, similar to
*--p
in the C programming language, used for stack push operations.
यह भी देखें
- निर्देश सेट वास्तुकला
- पता बस
टिप्पणियाँ
- ↑ Condensor storage units for 650:
- 8000 Console switches
- 8001 Distributor
- 8002 Lower accumulator
- 8003 Upper accumulator
- ↑ 2.0 2.1 Only valid from console
- ↑ For 5K or 10K 7070
- 00xx Index register xx
- 9991 Accumulator 1
- 9992 Accumulator 2
- 9993 Accumulator 3
- 9995 Program register[lower-alpha 2]
- 9999 Instruction counter[lower-alpha 2]
संदर्भ
- ↑ F. Chow; S. Correll; M. Himelstein; E. Killian; L. Weber (1987). "How many addressing modes are enough?". ACM Sigarch Computer Architecture News. 15 (5): 117–121. doi:10.1145/36177.36193.
- ↑ John L. Hennessy; Mark A. Horowitz (1986). "An Overview of the MIPS-X-MP Project" (PDF).
... MIPS-X uses a single addressing mode: base register plus offset. This simple addressing mode allows the computation of the effective address to begin very early ...
- ↑ Dr. Jon Squire. "Lecture 19, Pipelining Data Forwarding". CS411 Selected Lecture Notes.
- ↑ "High Performance Computing, Notes of Class 11 (Sept. 15 and 20, 2000) - Pipelining". Archived from the original on 2013-12-27. Retrieved 2014-02-08.
- ↑ John Paul Shen, Mikko H. Lipasti (2004). Modern Processor Design. McGraw-Hill Professional. ISBN 9780070570641.
- ↑ 6.0 6.1 John L. Hennessy; David A. Patterson (2002-05-29). Computer Architecture: A Quantitative Approach. p. 104. ISBN 9780080502526.
The C54x has 17 data addressing modes, not counting register access, but the four found in MIPS account for 70% of the modes. Autoincrement and autodecrement, found in some RISC architectures, account for another 25% of the usage. This data was collected form a measurement of static instructions for the C-callable library of 54 DSP routines coded in assembly language.
- ↑ Dr. Sofiène Tahar. "Instruction Set Principles: Addressing Mode Usage (Summary)" (PDF). Archived from the original (PDF) on 2011-09-30.
3 programs measured on machine with all address modes (VAX) ... 75% displacement and immediate
- ↑ Ali-Reza Adl-Tabatabai; Geoff Langdale; Steven Lucco; Robert Wahbe (1995). "Efficient and Language-Independent Mobile Programs". Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation - PLDI '96. pp. 127–136. doi:10.1145/231379.231402. ISBN 0897917952. S2CID 2534344.
79% of all instructions executed could be replaced by RISC instructions or synthesized into RISC instructions using only basic block instruction combination.
- ↑ IBM System/360 Principles of Operation (PDF). IBM. September 1968. p. 135. A22-6821-7. Retrieved 12 July 2019.
- ↑ z/Architecture Principles of Operation (PDF). IBM. September 2017. pp. 7–266. SA22-7832-11. Retrieved 12 July 2019.
- ↑ Max Maxfield. "Building a 4-Bit Computer: Assembly Language and Assembler". Section "Addressing modes". 2019.
- ↑ Kong, Shing; Patterson, David (1995). "Instruction set design". Slide 27.
- ↑ Koopman, Philip (1989). "Architecture of the RTX 32P". Stack Computers.
- ↑ "Introduction to ARMv8 64-bit Architecture". UIC Academy. quequero.org. 9 April 2014.
- ↑ 704 Electronic Data-Processing Machine Manual of Operation (PDF). IBM. 1955. pp. 10–11.
- ↑ Reference Manual IBM 7090 Data Processing System (PDF). IBM. 1962. pp. 9–10.
- ↑ DEC-10-HMAA-D: PDP-10 KA10 Central Processor Maintenance Manual (PDF) (1st Printing ed.). Maynard, Massachusetts: Digital Equipment Corporation. December 1968. p. 2-11. Retrieved 15 May 2021.
Figure 2-9: Effective Address Calculation: test "PI RQ ?"
- ↑ "Storage" (PDF). 650 magnetic drum data-processing machine - manual of operation (PDF). June 1955. p. 9. 22-6060-2. Retrieved March 14, 2022.
- ↑ "Core Storage and Register Addresses" (PDF). Reference Manual - IBM 7070 Data Processing System (PDF). January 1960. p. 252. A22-7003-0. Retrieved March 14, 2022.
- ↑ Jones, Douglas, Reference Instructions on the PDP-8, retrieved 1 July 2013
- ↑ Friend, Carl, Data General NOVA Instruction Set Summary, retrieved 1 July 2013
- ↑ "C Reference: function malloc()"
- ↑ 23.0 23.1 Dave Brooks. "Some Old Computers".
- ↑ Bill Purvis. "Some details of the Elliott 803B hardware"