मशीन अनुदेश, संबोधन विधियाँ व आँकड़ा-पथ

डिजिटल लॉजिक की भाँति, यह कंप्यूटर विज्ञान पेपर का खंड 3 है और इसके लिए किसी अन्य सत्यापित पेपर का पाठ्यक्रम नहीं पढ़ा गया — कई पेपरों में अपनी वास्तुकला-सामग्री है, और उनकी प्रकाशित उप-सूचियाँ इन अध्यायों से नहीं मिलाई गई हैं, अतः यह खंड अपना मानने से पूर्व अपना पाठ्यक्रम पढ़ें। अनुदेश-समुच्चय एक अनुबंध है: वह नियत करता है कि प्रोग्रामर क्या कह सकता है और अतः हार्डवेयर को क्या करने योग्य होना चाहिए, और इस अध्याय का प्रत्येक प्रश्न उसी अनुबंध के किसी परिणाम के विषय में है। संबोधन विधियाँ ही वह भाग हैं जिनमें यथार्थ होना उपयोगी है, क्योंकि परीक्षा पूछती है कि अनुदेश कितनी स्मृति-पहुँच लेता है, और उत्तर पूर्णतः विधि से तय होता है। तात्कालिक, फ़ेच के अतिरिक्त कुछ नहीं लेती — प्रचालक अनुदेश में ही है। प्रत्यक्ष एक लेती है। अप्रत्यक्ष दो लेती है, क्योंकि प्रचालक से पूर्व पता लाना होता है। रजिस्टर कुछ नहीं, रजिस्टर-अप्रत्यक्ष एक। अनुक्रमित व आधार-सहित-विचलन एक लेती हैं, तथा एक योग जो ALU निःशुल्क करता है। इन गणनाओं का सही होना नाम जानने से अधिक अंक देता है। तत्पश्चात् आँकड़ा-पथ वह हार्डवेयर है जो अनुदेश को घटित करता है — रजिस्टर, ALU, बस — और नियंत्रण इकाई वह है जो उसे फ़ेच–विकोड–निष्पादन क्रम से चलाती है, दो प्रकारों में से किसी एक से जिनका सौदा परीक्षणीय है: तारित नियंत्रण नियत क्रमिक परिपथ है, तेज़ व अनम्य, जबकि सूक्ष्म-प्रोग्रामित नियंत्रण क्रम को नियंत्रण-स्मृति में सूक्ष्म-अनुदेशों के रूप में संचित करता है, धीमा व बिना पुनर्तारण परिवर्तनीय। सम्पूर्ण RISC-बनाम-CISC उसी चुनाव से निकलता है: छोटा नियमित अनुदेश-समुच्चय तारित व पाइपलाइनित हो सकता है, बड़ा अनियमित प्रायः नहीं।

संबोधन विधियाँ, स्मृति-पहुँचों से गिनी गईं

अनुदेश लाने के अतिरिक्त प्रत्येक विधि की लागत
विधिप्रचालक कहाँ हैअतिरिक्त स्मृति-पहुँच
तात्कालिकस्वयं अनुदेश में0
रजिस्टररजिस्टर में0
प्रत्यक्ष (निरपेक्ष)अनुदेश में दिए पते पर1
रजिस्टर अप्रत्यक्षरजिस्टर में रखे पते पर1
अप्रत्यक्षअनुदेश के पते पर संचित पते पर2
अनुक्रमित / आधार + विचलनरजिस्टर + विस्थापन पर1 (योग निःशुल्क)
PC-सापेक्षPC + विस्थापन पर1, और कोड स्थानांतरणीय
🎯 अप्रत्यक्ष दो क्यों लेती है, और वही सम्पूर्ण प्रश्न क्यों है
अप्रत्यक्ष विधि में अनुदेश किसी पते का पता रखता है। अतः CPU एक बार स्मृति पढ़कर जानता है कि प्रचालक कहाँ है और दुबारा पढ़कर उसे लेता है — फ़ेच के ऊपर दो पहुँच। स्मृति में अप्रत्यक्षता का स्तर रखने वाली वही एकमात्र विधि है, और अतः वही वह है जिसे प्रश्न तब प्रयोग करता है जब अभ्यर्थी से सावधानी से गिनवाना हो। रजिस्टर अप्रत्यक्ष समान दिखती है और नहीं है: संकेतक पहले ही रजिस्टर में है, अतः एक पहुँच, दो नहीं। ADD R1, @X जैसा अनुदेश देकर कुल स्मृति-संदर्भ पूछता प्रश्न तीन चाहता है — एक अनुदेश लाने हेतु, दो प्रचालक हेतु — और सर्वाधिक सामान्य गलत उत्तर फ़ेच गिनता है और भूल जाता है कि अप्रत्यक्षता दो बार होती है।

आँकड़ा-पथ तथा उसे नियंत्रित करने के दो तरीके

प्रत्येक अनुदेश वही बाह्य चक्र चलाता है — फ़ेच, विकोड, निष्पादन — और आँकड़ा-पथ वह हार्डवेयर है जिस पर वह चलता है: प्रोग्राम गणक, अनुदेश रजिस्टर, रजिस्टर संचिका, ALU, तथा उनके बीच बस। जो बदलता है वह यह है कि प्रत्येक चरण कितने घड़ी-चक्र लेता है और चरण किस क्रम में चलाए जाते हैं। एक-बस आँकड़ा-पथ को तीन-बस वाले से अधिक चक्र चाहिए क्योंकि एक समय में एक ही अंतरण हो सकता है, और इसीलिए "यह अनुदेश कितने चक्र लेता है" का उत्तर बस-संरचना दिए जाने पर ही संभव है।

तारित बनाम सूक्ष्म-प्रोग्रामित नियंत्रण
पक्षतारितसूक्ष्म-प्रोग्रामित
वह क्या हैनियत क्रमिक परिपथनियंत्रण-स्मृति में सूक्ष्म-अनुदेश
गतितेज़ — नियंत्रण-स्मृति पठन नहींधीमा — प्रत्येक चरण एक स्मृति-पठन
अनुदेश-समुच्चय बदलनापरिपथ का पुनः अभिकल्प आवश्यकसूक्ष्म-कोड पुनर्लेखन — पुनर्तारण नहीं
उपयुक्तछोटे, नियमित समुच्चय — RISCबड़े, अनियमित समुच्चय — CISC
⚠️ RISC व CISC "कम अनुदेश" व "अधिक अनुदेश" नहीं हैं
गणना लक्षण है, परिभाषा नहीं। उन्हें वस्तुतः नियमितता पृथक् करती है: RISC अनुदेश नियत-लंबाई के, अधिकांशतः रजिस्टर-से-रजिस्टर होते हैं, स्मृति को केवल स्पष्ट लोड व स्टोर अनुदेश स्पर्श करते हैं और प्रत्येक अनुदेश तुलनीय संख्या में चक्र लेता है। वही नियमितता तारित नियंत्रण व गहन पाइपलाइनन को संभव बनाती है, और प्रदर्शन पाइपलाइनन से आता है। CISC परिवर्ती-लंबाई अनुदेश व अंकगणित में स्मृति-प्रचालक की अनुमति देता है, जो संकलक-लेखक हेतु सुविधाजनक और पाइपलाइन हेतु शत्रुवत् है, क्योंकि अगले अनुदेश की लंबाई वर्तमान के विकोडित होने तक ज्ञात नहीं होती। उनका विरोध करता प्रश्न प्रायः वस्तुतः यही पूछ रहा है कि कौन-सा पाइपलाइन करना सरल है, और उत्तर संख्या के बजाय नियमितता से निकलता है।

मुख्य बिंदु

  • संबोधन विधि से स्मृति-पहुँच गिनें: तात्कालिक व रजिस्टर 0, प्रत्यक्ष व रजिस्टर-अप्रत्यक्ष 1, अप्रत्यक्ष 2।
  • अप्रत्यक्ष ही वह एकमात्र विधि है जिसमें स्मृति में अप्रत्यक्षता है, अतः प्रश्न गणना जाँचने हेतु उसे प्रयोग करते हैं।
  • कुल स्मृति-संदर्भों में अनुदेश-फ़ेच सम्मिलित है — अप्रत्यक्ष प्रचालक वाला अनुदेश तीन लेता है।
  • PC-सापेक्ष संबोधन ही कोड को स्थानांतरणीय बनाता है।
  • प्रति अनुदेश चक्र बस-संरचना पर निर्भर हैं — एक-बस आँकड़ा-पथ को तीन-बस से अधिक चाहिए।
  • तारित नियंत्रण तेज़ व नियत है; सूक्ष्म-प्रोग्रामित धीमा व बिना पुनर्तारण परिवर्तनीय।
  • RISC बनाम CISC नियमितता का विषय है, अनुदेश-संख्या का नहीं — नियमितता ही पाइपलाइनन देती है।

अभ्यास प्रश्न (8)

उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।

  1. अनुदेश ADD R1, @X अपने दूसरे प्रचालक हेतु अप्रत्यक्ष संबोधन प्रयोग करता है। अनुदेश-फ़ेच गिनते हुए, उसके निष्पादन में कुल कितने स्मृति-संदर्भ आवश्यक हैं?

    संख्यात्मक उत्तर — मान टाइप करें।

    उत्तर देखें

    उत्तर: 3

    एक संदर्भ अनुदेश लाता है। तत्पश्चात् अप्रत्यक्ष संबोधन को दो और चाहिए: पहला X पर संचित पता पढ़ता है, और दूसरा उस पते से प्रचालक। कुल तीन। दोनों गलत उत्तर शिक्षाप्रद हैं — 2 भूल जाता है कि अप्रत्यक्षता दुहरा निर्देशन है और @X को प्रत्यक्ष प्रचालक मानता है, और 1 केवल फ़ेच गिनता है। रजिस्टर अप्रत्यक्ष कुल दो देता, और वही लगभग समान विधि है जिसे प्रश्न वस्तुतः पृथक् कर रहा है।
  2. कौन-सी संबोधन विधि को अनुदेश-फ़ेच के अतिरिक्त कोई स्मृति-पहुँच नहीं चाहिए?

    1. प्रत्यक्ष
    2. तात्कालिक
    3. रजिस्टर अप्रत्यक्ष
    4. अनुक्रमित
    उत्तर देखें

    उत्तर: B — तात्कालिक

    तात्कालिक विधि में प्रचालक अनुदेश का एक क्षेत्र है, अतः अनुदेश लाने ने उसे पहले ही ला दिया — शून्य अतिरिक्त पहुँच। रजिस्टर विधि भी शून्य लेती है, और जब वह दी जाए तो वह इस प्रश्न का दूसरा सही उत्तर है। प्रत्यक्ष व अनुक्रमित प्रत्येक एक लेती है, और रजिस्टर अप्रत्यक्ष एक। आत्मसात् करने योग्य प्रतिरूप यह है कि विधि ठीक तब स्मृति-पहुँच लेती है जब प्रचालक स्मृति में रहता हो: तात्कालिक उसे अनुदेश में रखती है, रजिस्टर उसे रजिस्टर संचिका में, और शेष सब को जाकर लाना पड़ता है।
  3. तारित नियंत्रण की तुलना में सूक्ष्म-प्रोग्रामित नियंत्रण है:

    1. तेज़ व संशोधित करना कठिन
    2. धीमा व संशोधित करना सरल
    3. तेज़ व संशोधित करना सरल
    4. धीमा व संशोधित करना कठिन
    उत्तर देखें

    उत्तर: B — धीमा व संशोधित करना सरल

    सूक्ष्म-प्रोग्रामित नियंत्रण नियंत्रण-क्रम को नियंत्रण-स्मृति में सूक्ष्म-अनुदेशों के रूप में संचित करता है, अतः प्रत्येक चरण एक नियंत्रण-स्मृति पठन लेता है — वही मंदता है — और अनुदेश-समुच्चय बदलने का अर्थ परिपथ के पुनः अभिकल्प के बजाय सूक्ष्म-कोड पुनर्लेखन है, जो लचीलापन है। तारित नियंत्रण दर्पण-प्रतिबिंब है: नियत क्रमिक परिपथ, तेज़ क्योंकि पढ़ने योग्य कुछ नहीं, और बदलने हेतु पुनः अभिकल्प आवश्यक। विकल्प C वह उत्तर है जो अभ्यर्थी यह मानकर देता है कि नई या अधिक परिष्कृत तकनीक को दोनों अक्षों पर जीतना ही चाहिए; सम्पूर्ण अभिप्राय यह है कि वह एक सौदा है, और वही सौदा तय करता है कि मशीन किस शैली का अनुदेश-समुच्चय वहन कर सकती है।
  4. निम्नलिखित में कौन RISC अनुदेश-समुच्चय के अभिलक्षण हैं? (एक से अधिक सही हो सकते हैं।)

    1. नियत-लंबाई अनुदेश
    2. अंकगणित अनुदेशों में स्मृति-प्रचालक की अनुमति
    3. स्मृति तक पहुँच केवल स्पष्ट लोड व स्टोर अनुदेशों से
    4. नियंत्रण प्रायः सूक्ष्म-प्रोग्रामित होता है
    उत्तर देखें

    उत्तर: A — नियत-लंबाई अनुदेश; C — स्मृति तक पहुँच केवल स्पष्ट लोड व स्टोर अनुदेशों से

    A व C, और वे मिलकर व्यवहार में "नियमितता" का अर्थ हैं। नियत-लंबाई अनुदेश वर्तमान अनुदेश के विकोडित होने से पूर्व अगला फ़ेच आरंभ करने देते हैं, और स्मृति-यातायात को लोड व स्टोर तक सीमित रखना प्रत्येक अंकगणित अनुदेश को पूर्वानुमेय चक्र-संख्या में रखता है — दोनों गहन पाइपलाइन की पूर्वापेक्षाएँ। B, CISC गुण है: अंकगणित अनुदेश को स्मृति तक पहुँचने देना उसकी विलंबता अप्रत्याशित बना देता है। D भी CISC की ओर झुका है; छोटा नियमित समुच्चय ही तारित नियंत्रण को व्यावहारिक बनाता है, और तारित नियंत्रण दोनों में तेज़ है। ध्यान दें कि "कम अनुदेश" उत्तर में कहीं नहीं आता — गणना परिणाम है, परिभाषा नहीं।
  5. एक मशीन में 16-बिट अनुदेश, 8 संबोधन विधियाँ व 32 सामान्य-प्रयोजन रजिस्टर हैं। यदि किसी अनुदेश में एक रजिस्टर प्रचालक तथा मोड-क्षेत्र सहित एक स्मृति प्रचालक हो, तो ऑपकोड हेतु कितने बिट शेष रहते हैं?

    1. 3
    2. 8
    3. 5
    4. 11
    उत्तर देखें

    उत्तर: A — 3

    32 रजिस्टरों को log₂32 = 5 बिट चाहिए; 8 संबोधन विधियों को log₂8 = 3 बिट। 16-बिट अनुदेश के साथ, तथा स्मृति प्रचालक हेतु उस रजिस्टर का अपना 5-बिट क्षेत्र जिस पर मोड लागू है, यह 5 + 3 + 5 = 13 बिट प्रचालक-विनिर्देश है, जिससे ऑपकोड हेतु 16 − 13 = 3 बिट शेष — केवल आठ अनुदेशों हेतु पर्याप्त, और ठीक वही दबाव वास्तविक मशीनों को परिवर्ती-लंबाई कूटन की ओर ढकेलता है। अंकगणित सरल है और अंक व्यवस्था में खोए जाते हैं: प्रत्येक क्षेत्र किसी गणना का log₂ है, अतः 32 रजिस्टर 5 बिट हैं, 32 नहीं, और 8 विधियाँ 3 बिट, 8 नहीं। विकल्प B वही दूसरी चूक करता है।
  6. शाखा अनुदेशों हेतु PC-सापेक्ष संबोधन मुख्यतः इसलिए वरीय है कि:

    1. उसे कोई स्मृति-पहुँच ही नहीं चाहिए
    2. वह कोड को स्थानांतरणीय बनाता है
    3. वह प्रत्यक्ष संबोधन से बड़ा पता-परिसर देता है
    4. वही एकमात्र विधि है जिसे ALU निकाल सकता है
    उत्तर देखें

    उत्तर: B — वह कोड को स्थानांतरणीय बनाता है

    PC-सापेक्ष शाखा विस्थापन संचित करती है, निरपेक्ष पता नहीं, अतः कोड का सम्पूर्ण खंड स्मृति में कहीं भी लादा जा सकता है और उसके भीतर प्रत्येक शाखा फिर भी सही स्थान पर पहुँचती है — वही स्थानांतरणीयता है, और लोडर तथा साझा पुस्तकालय उसी पर निर्भर हैं। विकल्प C उलटा है: विस्थापन क्षेत्र प्रायः पूर्ण पते से छोटा होता है, अतः परिसर अधिक सीमित है, बड़ा नहीं — सीमा वास्तविक है और इसीलिए लंबी कूदों को भिन्न विधि चाहिए। विकल्प A असत्य है, क्योंकि शाखा-लक्ष्य अनुदेश फिर भी लाना पड़ता है।
  7. स्वतः-वृद्धि संबोधन विशेष रूप से किसके लिए उपयुक्त है:

    1. किसी एकल वैश्विक चर तक पहुँच
    2. सरणी के अवयवों से क्रमशः गुजरना
    3. उपप्रक्रम बुलाना
    4. रजिस्टर में अचर लादना
    उत्तर देखें

    उत्तर: B — सरणी के अवयवों से क्रमशः गुजरना

    स्वतः-वृद्धि रजिस्टर में रखे पते का प्रयोग करती है और तत्पश्चात् उस रजिस्टर को प्रचालक-आकार से आगे बढ़ाती है, जो ठीक क्रमिक सरणी-भ्रमण का चक्र-निकाय है: अवयव लाएँ, अगले पर जाएँ, बिना पृथक् वृद्धि अनुदेश। प्रति पुनरावृत्ति एक अनुदेश की वही बचत उस विधि के अस्तित्व का सम्पूर्ण कारण है। विकल्प D हेतु तात्कालिक विधि है, और विकल्प A हेतु प्रत्यक्ष। स्वतः-ह्रास, उसका दर्पण, वह है जिसे स्टैक पुश पर प्रयोग करता है, और वही दूसरा स्थान है जहाँ यह विधि अपना मूल्य चुकाती है।
  8. एक-बस आँकड़ा-पथ तीन-बस आँकड़ा-पथ से प्रति अनुदेश अधिक घड़ी-चक्र लेता है क्योंकि:

    1. उसकी घड़ी धीमी चलनी चाहिए
    2. एक समय में केवल एक रजिस्टर-अंतरण हो सकता है
    3. उसमें कम रजिस्टर होते हैं
    4. एक बस पर ALU धीमा होता है
    उत्तर देखें

    उत्तर: B — एक समय में केवल एक रजिस्टर-अंतरण हो सकता है

    बस एक समय में एक मान ले जा सकती है, अतः एक-बस पथ को उन अंतरणों को क्रमबद्ध करना पड़ता है जो संक्रिया को चाहिए: दोनों ALU प्रचालकों को भीतर लाना व परिणाम बाहर भेजना तीन पृथक् चक्र लेता है जहाँ तीन-बस पथ उसे एक में करता है। अतिरिक्त चक्र बस हेतु प्रतिस्पर्धा का परिणाम हैं, धीमी घड़ी या धीमे ALU का नहीं — घटक वही हैं। इसीलिए "यह अनुदेश कितने चक्र लेता है" बस-संरचना बताए जाने तक अनुत्तरणीय है, और इसीलिए इस खंड के प्रश्न उसे सदा बताते हैं।