माइक्रोप्रोसेसरों में हमारे पास अधिक रजिस्टर क्यों नहीं हैं?


18

रजिस्टरों को सैद्धांतिक रूप से आवश्यक नहीं है; सभी माइक्रोप्रोसेसर अभी भी रजिस्टरों के बिना काम करेंगे। लेकिन यह उचित रूप से मामूली जोड़ ने माइक्रोप्रोसेसरों को अधिक कुशल बनाने में मदद की है।

हमारे पास और अधिक रजिस्टर क्यों नहीं हो सकते हैं ताकि उन्हें इसका लाभ मिल सके? वे चिप पर सिर्फ मेमोरी हैं और कोई जोड़ नहीं सकता है? किस कारक ने रजिस्टरों की संख्या को प्रभावित किया कि वे अब क्या हैं और क्या नहीं, 10x अधिक कहें?


8
@ Alper91 कई आर्किटेक्चर, काल्पनिक और वास्तविक, रजिस्टर नहीं हैं, और यह बिल्कुल भी जरूरी नहीं है। यह बस एक उपयोगी अनुकूलन है।
पाइप

4
हम्म। किसी ने भी स्पार्क का उल्लेख नहीं किया है। सबसे बड़ा कार्यान्वयन इसमें 520 रजिस्टर हो सकता है (32 विंडोज़ 16 बार रजिस्टर, + 8 ग्लोबल्स।) मुझे यकीन है कि उन्हें याद रखना चाहिए।
जॉन्क

13
मुझे लगता है कि निर्देश में बिट्स की संख्या जो आपको रजिस्टर निर्दिष्ट करने की आवश्यकता है, एक बड़ी समस्या है। यदि आपके पास 1024 रजिस्टर हैं, तो आपको प्रत्येक अंकगणितीय अनुदेश के लिए कम से कम 30 बिट्स की आवश्यकता है - जब तक कि आप अन्य बाधाओं को नहीं जोड़ते हैं जैसे "सभी 3 रजिस्टर 32 के एक ही समूह से होने चाहिए (जिस स्थिति में आपको 20 बिट की आवश्यकता है)।
user2575751

8
@ पिप - वास्तव में किसी भी व्यावहारिक डिजाइन को योजनाबद्ध अर्थों में "रजिस्टरों" की आवश्यकता होती है, जैसे कि यदि आप स्टैक मशीन या ऐसा कुछ बनाते हैं, तो आपके पास ALU के लिए तर्क रखने के लिए एक जगह होनी चाहिए, या फिर आउटपुट - अधिकांश यादों में तीन एक्सेस पोर्ट नहीं होते हैं। और एक स्टैक मशीन को स्टैक पॉइंटर की आवश्यकता होती है जो ... एक रजिस्टर है! और पाइपलाइन रजिस्टर का उल्लेख नहीं करने देता है। आप प्रोग्रामर से ऐसे "रजिस्टरों" के उपयोग को छिपा सकते हैं, लेकिन आपको अभी भी कुछ की आवश्यकता है, और संभवतः लगभग एक आदिम रजिस्टर मशीन के रूप में है।
क्रिस स्ट्रैटन

4
@ क्रिसस्ट्रैटन ज़रूर, लेकिन जब तक वे आईएसए के माध्यम से उजागर नहीं होते हैं, यह केवल एक कार्यान्वयन विवरण है। कुछ हद तक निरर्थक तर्क, क्योंकि हम नहीं जानते कि रजिस्टर से ओपी का क्या मतलब है ।
पाइप

जवाबों:


33

कई कारक हैं:

  • उच्च प्रदर्शन माइक्रो-आर्किटेक्चर का नाम बदलकर रजिस्टर नामकरण होता है। यही है, भौतिक रजिस्टरों की संख्या वास्तुशिल्प रूप से दिखाई देने वाले रजिस्टरों की संख्या से अधिक है और वे उनमें से स्वतंत्र उपयोग को ट्रैक करने में सक्षम हैं।

  • रजिस्टरों की संख्या को दोगुना करने से प्रदर्शन दोगुना नहीं होता है। ISTR ( कंप्यूटर आर्किटेक्चर, ए क्वांटिटेटिव एप्रोच ) जो कि 16 से 32 रजिस्टरों में जा रहा है, 10% सुधार जैसा कुछ लाता है, यह मानते हुए कि वृद्धि का कोई प्रतिकूल प्रभाव नहीं है (जो कि एक बहुत ही आशावादी धारणा है)।

  • वास्तुशिल्प रूप से दृश्यमान रजिस्टरों की लागत होती है। उदाहरण के लिए:

    • उनकी संख्या में वृद्धि करने से अनुदेश प्रारूप में लिए गए बिट्स की संख्या में वृद्धि होती है, जिससे यह पता चलता है कि किस रजिस्टर पर कार्रवाई की जा रही है (रजिस्टर की संख्या दोगुनी होने का तात्पर्य प्रारूप में प्रति रजिस्टर एक और बिट है, इस प्रकार उन बिट्स को अन्य उपयोगों के लिए या मजबूर करने से रोकना है। एक लंबा निर्देश आकार)।
    • वास्तुशिल्प रजिस्टरों की संख्या बढ़ने से संदर्भ स्विचिंग लागत बढ़ जाती है (क्योंकि उन्हें संदर्भ स्विच पर सहेजा और पुनर्स्थापित किया जाना चाहिए)।

1
मैं चाहता हूं कि 16 से 32 रजिस्टरों का प्रदर्शन सुधार पूरी तरह से प्रश्न में कंपाइलर की अनुकूलन क्षमता पर निर्भर करता है। कोडांतरक में, रजिस्टर की संख्या दोगुनी करने के लिए (x64 वास्तुकला में) काफी हद तक प्रदर्शन में सुधार कर सकते हैं - लेकिन केवल आला भूमिकाओं के लिए, और केवल अगर वे वास्तव में उपयोग किए जाते हैं।
rdtsc

6
@rdtsc: 8 से 16 आर्किटेक्चरल रजिस्टरों में जाने से इस उत्तर से जुड़े एक पेपर में सिमुलेशन से प्राप्त आंकड़ों के अनुसार , विशिष्ट कोड के लिए स्पिल / रीलोड की मात्रा में बड़ा सुधार होता है । यह कोड आकार, निर्देश गणना और महत्वपूर्ण कम विलंबता स्टोर-अग्रेषण को प्रभावित करता है। 16-> 32 एक बहुत छोटा प्रभाव है। AFAICT, 16 आर्किटेक्चरल रजिस्टर WAR और WAW खतरों को दूर करने के लिए रजिस्टर नाम बदलने के साथ हार्डवेयर के लिए एक अच्छा विकल्प है।
पीटर कॉर्ड्स

2
हालाँकि, Intel का AVX512 कुल 32 के लिए 16 और वेक्टर रेज जोड़ता है। (साथ ही 64 बाइट्स में उनकी चौड़ाई दोगुनी हो गई है, एक पूर्ण कैश लाइन)। उच्च थ्रूपुट उच्च विलंबता एफपी परिचालनों से विलंबता को छिपाने से बहुत सारे रजिस्टर हो सकते हैं। जैसे इंटेल हैसवेल में 5 सी लैट है, प्रति 0.5 सीसी थ्रूपुट एफएमए एक है, इसलिए आपको कमी के लिए एफएमए निष्पादन इकाइयों को संतृप्त करने के लिए 10 वेक्टर संचायक की आवश्यकता होती है (उदाहरण के लिए डॉट उत्पाद, या एक सरणी को सिंक करें, जहां एफएमए लूप-आधारित निर्भरता का हिस्सा है। )। x86-64 में केवल 16 वेक्टर रेज हैं। लेकिन याद रखें, पूर्णांक ऑप्स, esp। जीपी रेज पर, शायद ही कभी 1 सी से अधिक विलंबता हो।
पीटर कॉर्ड्स

1
पूर्णांक, FP और वेक्टर रजिस्टरों के लिए व्यापार-बंद अलग है। उदाहरण के लिए, पूर्णांक रजिस्टरों को बचाने / बहाल करने का कोई मतलब नहीं है, वेक्टर के लिए ऐसा करना एक बेहतर दांव है। और वेक्टर ISA में अक्सर पूर्णांक एक से अधिक रजिस्टर होते हैं (AltiVec में कम से कम 128 तक होते हैं, ISTR Sparc के लिए 256 के बारे में पढ़ते हैं, लेकिन अब एक संदर्भ नहीं मिल सकता है)।
एपीग्रामग्राम

1
en.wikipedia.org/wiki/AltiVec में बत्तीस 128b वेक्टर रेज हैं। मैं स्पार्क के बारे में उत्सुक हो गया और देखा कि इसके रजिस्टर-विंडो सामान ने संदर्भ स्विच के लिए कैसे काम किया। इसमें एक बार में 32 रजिस्टर दिखाई देते हैं, लेकिन एक बड़े रजिस्टर फ़ाइल पर स्लाइडिंग विंडो का उपयोग करता है। यह इस सरलीकृत संस्करण से लगता है जैसे ओएस को इसे बचाने / पुनर्स्थापित करने के लिए पूरी स्लाइडिंग-विंडो रजिस्टर फ़ाइल का आकार जानने की आवश्यकता है, क्योंकि भले ही खिड़की-स्लाइड निर्देश बचत करने के लिए मेमोरी प्रदान करते हैं / जरूरत पड़ने पर regs को पुनर्स्थापित करने के लिए, यह फँसाने के द्वारा किया जाता है OS को।
पीटर कॉर्ड्स

16

जबकि रजिस्टर और रैम दोनों मेमोरी हैं, उन्हें एक्सेस करने की लागत (चिप क्षेत्र में, या छिपी हुई घड़ी चक्र की) को प्रतिबिंबित करने के लिए, विभिन्न तरीकों से एक्सेस किया जाता है।

रजिस्टर्स कसकर ALU से बंधे हुए हैं, और डेटा स्रोतों, सिंक, संशोधक आदि की कई भूमिकाएं ले सकते हैं, इसलिए उन्हें व्यापक मल्टीप्लेक्स कनेक्शन की आवश्यकता है। कुछ आर्किटेक्चर में हम R1 <= R2 + R3 लिख सकते हैं, और ठीक यही एक एकल घड़ी चक्र में होता है। प्रत्येक रजिस्टर को ऑप कोड में सीधे संबोधित किया जाता है, यह एड्रेसिंग एक बहुत ही सीमित संसाधन है।

जैसा कि रजिस्टर को लागू करना महंगा है, यह संख्या आमतौर पर अधिकांश आर्किटेक्चर में 10/20 के आदेश तक सीमित है।

रैम सीपीयू के लिए बहुत हद तक बाध्य है, आमतौर पर एक एकल साझा कनेक्शन के माध्यम से चैनल किया जा रहा है। यह बड़ी मात्रा में रैम को लागू करने के लिए बहुत सस्ता बनाता है। रैम पते आम तौर पर एक पंजीकृत-संग्रहित पते से आते हैं, इसलिए महत्वपूर्ण अनुदेश चौड़ाई का उपभोग नहीं करते हैं।

SPARC एक दिलचस्प वास्तुकला है, जिसमें 72 से 640 64 बिट रजिस्टरों के साथ, 32 रजिस्टर संदर्भ है जिसे पैरामीटर गुजरने के साथ तेज सबरूटीन कॉल के लिए ओवरलैप के साथ स्थानांतरित किया जा सकता है। आप उन्हें उन पीसी और सर्वरों में नहीं ढूंढते हैं जहां लागत मायने रखती है, जैसे कि 99.999% एप्लिकेशन।


4
एक अन्य पहलू आपको संदर्भ स्विच के दौरान रजिस्टरों को सहेजना / पुनर्स्थापित करना है। अधिक रजिस्टर, अधिक समय।
मिशेल बिल्लौद 9'16

मैं ध्यान दूंगा कि पुराने TMS9900 ने अपने सभी कामकाजी रजिस्टर बाहरी मेमोरी en.wikipedia.org/wiki/Texas_Instizers_TMS9900
पीटर स्मिथ

1
मैंने (कुछ ट्वेक को छोड़कर) 'हमेशा के लिए' क्वालिफाई कर लिया था, लेकिन इसे सरल बनाने के लिए इसे निकाल लिया। शायद मैं इसे 'आम तौर पर' में बदल दूंगा। मूल रूप से यदि आप अपवादों को पा सकते हैं और समझ सकते हैं, तो आपको मुझे उन्हें इंगित करने की आवश्यकता नहीं है। यदि आप गलत समझे जाने के लिए पर्याप्त हैं, तो इससे कोई फर्क नहीं पड़ता, क्योंकि यह आपको परेशानी में नहीं डालेगा। TMS9900, यह अजीब था, मेरे पास पहले के जीवन में मेरे पापों के लिए 99/4 था, अजीब जानवर!
नील_यूके

इटेनियम में रजिस्टर विंडो भी हैं।
साइमन रिक्टर

1
@ChrisStratton: जबकि "आप रजिस्टरों X और Y का उपयोग नहीं कर सकते हैं" के लिए कुछ मिसाल है, जिसे "ABI" का हिस्सा माना जा रहा है (जैसे m0 पर k0 और k1 रजिस्टर), यह असामान्य उपयोग है। निश्चित रूप से प्रक्रियाओं के बीच अवांछित / असुरक्षित गुप्त संदेश चैनल हैं यदि संदर्भ स्विच में इन "एबीआई-निषिद्ध रजिस्टरों" को बचाया / बहाल नहीं किया जाता है। अर्थात्, ऐसी प्रक्रियाएं जो संवाद करने में सक्षम नहीं होनी चाहिए, निषिद्ध रजिस्टरों में जानकारी संग्रहीत करने और संदर्भ स्विच की प्रतीक्षा करने में सक्षम हो सकती हैं।
R .. 5

12

अनुदेश के भीतर रजिस्टरों का पालन किया जाना चाहिए। यदि बहुत सारे रजिस्टर हैं, तो निर्देश लंबा है। एक रजिस्टर सेवा के लिए रजिस्टर सामग्री को सहेजने और पुनर्स्थापित करने के लिए अधिक समय चाहिए, यदि बहुत सारे रजिस्टर हैं।


5

अधिकांश चीजों के रूप में, रजिस्टरों की संख्या लागत, जटिलता और उपयोगिता के बीच एक समझौता है।

रजिस्टरों को बहु-पोर्ट स्टैटिक रैम के रूप में लागू किया जाता है, जो उन्हें अन्य भंडारण विकल्पों की तुलना में अधिक महंगा (चिप क्षेत्र) बनाता है।

फिर उन्हें प्रोसेसर के निर्देश सेट के साथ युग्मित किया जाता है, रजिस्टरों की संख्या बढ़ने से अनुदेश सेट की जटिलता बढ़ जाती है। इसलिए यदि आप निर्देश सेट के साथ संगत रहना चाहते हैं, तो आप दक्षता बढ़ाने के लिए प्रोसेसर की अगली पीढ़ी में उपलब्ध रजिस्टरों की संख्या में वृद्धि नहीं कर सकते, प्रोग्राम उनका उपयोग नहीं करेंगे।

अगला यह है कि आपको वास्तव में कितने रजिस्टरों की आवश्यकता है? उनकी उपयोगिता की एक सीमा है। विचार करें कि आप एक एल्गोरिथ्म लिखते हैं जो 1024 बाइट्स पर कुछ गणितीय कार्य करता है, मान लें कि 5 से गुणा करें। वर्तमान रजिस्टर काउंट के साथ, आप कुछ इस तरह से समाप्त करते हैं:

load operand1=5
load address
loop: load operand2=byte1@address
multiply Register1 with Register2
store result
increment address
if address = end goto endLoop
jump loop
endLoop:

अब यदि आपके पास 1024 रजिस्टर होंगे और वहां संग्रहीत सारा डेटा, आपका कार्यक्रम ऐसा लगेगा:

multiply Register1 with Register2
multiply Register1 with Register3
multiply Register1 with Register4
multiply Register1 with Register5
multiply Register1 with Register6
...

क्योंकि उनमें से प्रत्येक एक अलग निर्देश है, उनमें से हर एक को बाहर लिखना होगा। तो आपकी आवश्यक प्रोग्राम मेमोरी में विस्फोट हो रहा है। इसे साकार करने के बाद, आप कुछ निर्देशों को लागू करना चाह सकते हैं, जैसे multiply register1 with register(2 to 256)। लेकिन आप कब रुकेंगे, क्या आप सभी संयोजनों के लिए एक निर्देश प्रदान करते हैं?

इसलिए हो सकता है कि हमारे पास वर्तमान में उपलब्ध संख्या लागत, जटिलता और उपयोगिता के बीच एक अच्छा व्यापार है।


1
मुझे लगता है कि कार्यक्रम multiply Register1 with Register2 multiply Register1 with Register3बहुत अवास्तविक है क्योंकि डेटा सीधे या अप्रत्यक्ष रूप से कंप्यूटर के बाहर से आना चाहिए था, इसलिए रजिस्टरों को लोड करने की आवश्यकता होती है, और परिणामों को कहीं न कहीं, प्रत्यक्ष या अप्रत्यक्ष रूप से उपयोग करने की आवश्यकता होती है, इसलिए रजिस्टरों को संग्रहीत करने की आवश्यकता होती है। वास्तव में, उच्च स्तरीय भाषा के लिए एक सभ्य अनुकूलन कंपाइलर दूसरे प्रोग्राम की तरह कुछ बनाने के लिए पहले प्रोग्राम के लूप को use अनियंत्रित ’करेगा, रजिस्टर उपयोग, मेमोरी लेटेंसी, शायद कैश ऑक्यूपेंसी और निष्पादन की गति का अनुकूलन।
gbulmer

1
कई विशेष उद्देश्य multiply register1 with register(2 to 256)निर्देशों की आवश्यकता नहीं है । Pipelining सीपीयू थ्रूपुट में काफी सुधार करता है विशेष रूप से निर्देश को डिकोड और निष्पादित करने के लिए सरल। इसलिए उच्च निष्पादन दर के साथ कई सरल निर्देशों का उपयोग करके जटिल, बड़े पैमाने पर विभिन्न निर्देशों का प्रभाव प्राप्त किया जा सकता है। रजिस्टरों की बड़ी संख्या होने से कंपाइलर को कई स्वतंत्र निर्देशों (जो एक रजिस्टर को साझा नहीं करते हैं) को उत्पन्न करने में मदद करता है, जिसे स्वतंत्र रूप से पूरा किया जा सकता है, जिससे थ्रूपुट में सुधार हो सकता है। आपका उदाहरण = अधिक रजिस्टर बेहतर हैं।
गुलाम

4

रजिस्टर बहुत महंगे हैं। बहुत महंगा। यह खुद को रजिस्टर करने के लिए इतना नहीं है, यह सभी कनेक्शन से और रजिस्टरों से है। कहें कि आपके पास एक निर्देश reg1 = reg2 + reg3 है। इस उपवास को लागू करने के लिए , आपको एक चक्र में दो रजिस्टरों के डेटा को पढ़ने की जरूरत है, और दूसरे चक्र में दूसरे रजिस्टर पर लिखना होगा। अब अगर आपके पास एक ऐसा प्रोसेसर है जो प्रति चक्र कई निर्देशों को निष्पादित कर सकता है, तो तीन निर्देशों को कहें, आपको प्रत्येक चक्र के छह रजिस्टरों से डेटा पढ़ने और 3 रजिस्टरों पर डेटा लिखने में सक्षम होना चाहिए। यह बहुत ही तेज़ कनेक्शन का एक भयानक, भयानक बहुत है।

बेशक आप सिर्फ अधिक ट्रांजिस्टर का उपयोग कर सकते हैं। समस्या यह है: गति नीचे जाती है। अधिक रजिस्टरों से चुनने के लिए आपको अधिक हार्डवेयर की आवश्यकता है। रजिस्टर फ़ाइल के लिए स्थान बड़ा हो जाता है। वह सब कुछ धीमा कर देता है। तो उसी तकनीक के साथ, आप 16 रजिस्टर करने में सक्षम हो सकते हैं और 2,600 मेगाहर्ट्ज पर चला सकते हैं या 32 रजिस्टर कर सकते हैं और 2,400 मेगाहर्ट्ज पर चला सकते हैं। अब अतिरिक्त रजिस्टरों को घड़ी की गति में महत्वपूर्ण गिरावट के लिए बनाना चाहिए।


2

किस कारक ने रजिस्टरों की संख्या को प्रभावित किया

- मेमोरी पदानुक्रम

रजिस्टरों, कैश, रैम सभी को अलग-अलग भंडारण तकनीकों के साथ लागू किया जाता है।

विभिन्न तकनीकों में अलग है

  1. पहुंच समय
  2. लागत
  3. घनत्व

एक उदाहरण: सीपीयू में पाए जाने वाले आंतरिक रजिस्टर स्टैटिक रैंडम एक्सेस मेमोरी हैं , जबकि कंप्यूटर मुख्य मेमोरी डायनेमिक रैंडम एक्सेस मेमोरी है

एक स्टैटिक रैम बाइनरी सेल 6-ट्रांजिस्टर सर्किट का उपयोग करके कार्यान्वित किया जाता है जबकि एक डायनेमिक रैम बाइनरी सेल एक संधारित्र और एक ट्रांजिस्टर का उपयोग करके कार्यान्वित किया जाता है। SRAM और DRAM की तुलना

  • SRAM मेमोरी DRAM मेमोरी की तुलना में बहुत तेज़ है [DRAM की तुलना में SRAM तक पहुँचने के लिए कुछ चक्र]
  • SRAM सर्किट DRAM से कम बिजली की खपत करता है
  • DRAM को SRAM के विपरीत समय-समय पर मेमोरी में हर बार रिफ्रेशिंग की आवश्यकता होती है
  • SRAM की कीमत DRAM से अधिक है
  • DRAM की तुलना में SRAM का घनत्व कम होता है

इसलिए इसकी तेज, महंगी, कम घनत्व वाली स्मृति की संख्या बढ़ाने के लिए व्यावहारिक बात नहीं है। वास्तव में हम उनमें से कुछ का उपयोग कर सकते हैं और एक अच्छी तरह से लिखा गया प्रोग्राम इन तेज़ रजिस्टरों के अंदर सबसे अधिक उपयोग किए जाने वाले डेटा को संग्रहीत करेगा जबकि कम लगातार उपयोग किए जाने वाले डेटा को धीमी मेमोरी में संग्रहीत किया जाता है।

- निर्देश लंबाई

रजिस्टरों का पता एक निर्देश के भीतर शामिल होता है, जो बिट की संख्याओं के आधार पर सुलभ रजिस्टरों की संख्या को सीमित करता है जो पते का प्रतिनिधित्व कर सकते हैं। उदाहरण के लिए एमआइपी आर्किटेक्चर में 32-बिट लंबाई निर्देश केवल 5-बिट्स रखता है जो सुलभ रजिस्टरों के पते का प्रतिनिधित्व करता है जो रजिस्टरों की संख्या 2 5 = 32 रजिस्टर तक सीमित करता है । रजिस्टरों की संख्या बढ़ाने के लिए पर्याप्त बिट्स को शामिल करने के लिए निर्देश की लंबाई बढ़ाने की आवश्यकता होगी जो सभी रजिस्टरों तक पहुंच सके।


2

यदि आप एक प्रोसेसर के निर्देश सेट पर एक नजर डालते हैं, तो उन्हें समूहीकृत करने के कई तरीके हैं। उदाहरण के लिए, सभी ADDनिर्देशों को एक साथ समूहीकृत किया जा सकता है, और सभी XORनिर्देश।

एक ही निर्देश के प्रत्येक समूह के भीतर, ऐसे संस्करण हो सकते हैं जो मेमोरी पर या रजिस्टरों पर काम करते हैं। यह यह उप-समूहन है जो प्रोसेसर के पास रजिस्टरों की संख्या को प्रभावी ढंग से परिभाषित करता है।

8-बिट काल्पनिक उदाहरण के रूप में, मान लें कि $Axनिर्देश निर्देश हो सकते हैं ADD, और निर्देश $Cxहो सकते हैं XOR। इस डिजाइन के साथ, ऑपरेंड को परिभाषित करने के लिए केवल चार बिट्स बचे हैं!

  • एक में केवल चार सामान्य-उद्देश्य रजिस्टर हो सकते हैं, और एक को परिभाषित करने के लिए दो बिट्स और दूसरे को परिभाषित करने के लिए दो बिट्स का उपयोग किया जा सकता है।
  • या, कोई "विशेष" वेरिएंट को अलग करने के लिए पहले बिट का उपयोग कर सकता है, और अन्य 3 बिट्स को परिभाषित करने के लिए कि संचायक के साथ काम करने के लिए आठ रजिस्टरों में से कौन सा ( $x0स्वयं संचायक हो सकता है)।
  • या, कोई भी इस रजिस्टर की संख्या से अधिक हो सकता है - लेकिन फिर वह सीमाएं जो रजिस्टरों को निर्देश के लिए सुलभ हैं।

बेशक, हम पिछले 8-बिट अनुदेश सेट कर रहे हैं। लेकिन फिर भी, इस तर्क ने अतीत में रजिस्टर सेट को परिभाषित करने में मदद की - यह भविष्य में ऐसा करना जारी रखेगा।

EDIT (अनुरोध के अनुसार)

कहते हैं कि शीर्ष चार बिट्स अनुदेश के लिए हैं: ADD , SUB, XOR, MOV, CMPआदि 16 संभावनाओं यहाँ हैं। फिर, उन निर्देशों के लिए जहां रजिस्टर-टू-रजिस्टर समझ में आता है (जैसे ADD Rx,Ry), आपको निर्दिष्ट करने की आवश्यकता है Rxऔर Ry। कहते हैं कि अगले दो बिट्स हैं x, और अंतिम दो बिट्स हैं y। इस प्रकार:

ADD R1, R2  =>  'ADD' + 'R1' + 'R2' => $A0 + $04 + $02

इस तरह एक रजिस्टर को परिभाषित करने के लिए केवल दो बिट्स के साथ, आपके पास कुल चार रजिस्टरों के लिए जगह है!

एक तरफ के रूप में, आप ध्यान देंगे कि कुछ रजिस्टर संयोजनों का कोई मतलब नहीं है। उदाहरण के लिए, MOV Rx, Rx(कुछ नहीं करता है) और SUB Rx, Rx(हमेशा उत्पादन 0)। ये विशेष मामले के निर्देश बन सकते हैं:

  1. SUB Rx, Rxबन सकता है NOT Rx- एक एकल-संचालन निर्देश।
  2. MOV Rx, Rxएक MOVनिर्देश हो सकता है जो एक दूसरे बाइट को तत्काल मूल्य के रूप में लेता है, जिसकी व्याख्या की जाती है MOV Rx, #$yy

इस तरह से आप निर्देश मानचित्र के साथ "खेल" सकते हैं, अन्यथा प्रोग्रामर के लिए एक बड़ा निर्देश सेट प्रदान करने के लिए अन्यथा बेकार या गैर-व्यावहारिक निर्देशों के लिए छेदों को भरना। लेकिन अंत में, निर्देश सेट रजिस्टर सेट को परिभाषित करता है।


मैं अभी भी भ्रमित हूं, क्या आप बता सकते हैं कि केवल 4 बिट्स ऑपरेंड के लिए कैसे बची हैं?
दर्शन चौधरी

मेरे अद्यतन उत्तर की जाँच करें
जॉन बर्गर

1
IMHO इस उत्तर को प्रश्न के आरंभ में " काल्पनिक उदाहरण मान लिया गया एक 8-बिट इंस्ट्रक्शन सेट " को आगे बढ़ाकर। मैंने समय व्यर्थ करने की कोशिश की, यह निष्कर्ष निकाला कि यह केवल 8-बिट, निश्चित लंबाई निर्देश के लिए समझ में आता है, फिर इसे खोजने के लिए पढ़ें। IMHO, उस प्रकार का निर्देश सेट प्रश्न के संदर्भ में बहुत अप्रासंगिक नहीं है; इसका पूरा पता स्थान स्थिर रूप से स्थिर रैम हो सकता है। मुझे भी लगता है कि शुरुआत " कुछ रजिस्टर संयोजनों का कोई मतलब नहीं है ... " सवाल के लिए प्रासंगिक नहीं है, और इसे हटाया जा सकता है। मेरा $ 0.02
gbulmer

-2

इंटेल आजकल हजारों रजिस्टरों का उपयोग कर रहा है - सैकड़ों प्रति सीपीयू कोर। लेकिन सीपीयू पर संग्रहीत डेटा की सबसे बड़ी राशि कैश में है, जो अप्रत्यक्ष रूप से इस सवाल का जवाब देता है। कैश को परतों में व्यवस्थित किया जाता है, एक छोटे से तेज L1 कैश और धीमी L2 और L3 कैश को और दूर किया जाता है। एक अर्थ में रजिस्टर फ़ाइल L0 है, यहां तक ​​कि L1 की तुलना में भी तेज है लेकिन छोटी भी है। इसलिए, आप रजिस्टरों की संख्या बढ़ा सकते हैं, लेकिन यह उन्हें धीमा कर देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.