X64 रजिस्टर नामों में 'R' क्या है?


27

मुझे पता है कि 32 बिट रजिस्टरों को 'ई' उपसर्ग के साथ 16 बिट रजिस्टरों की तरह नामित किया गया था, जिसका अर्थ है विस्तारित। मैंने हमेशा यह माना है कि इसका मतलब 16 से 32 बिट्स तक है, हालांकि मैंने ऐसा स्पष्ट रूप से कभी नहीं देखा है।

मैं यह पता लगाने की कोशिश कर रहा था कि 'आर' का क्या मतलब है लेकिन मेरे Google कौशल ने मुझे विफल कर दिया है। किसी को पता है?


जवाबों:


32

इसका मतलब है रजिस्टर , और यह सभी ऐतिहासिक कारणों से नहीं है।

ऐतिहासिक हिस्सा यह है कि इंटेल 8008 (ए के माध्यम से ई प्लस एच और एल) के साथ अक्षरों को दर्ज करने की आदत में शामिल हो गया। यह योजना उस समय पर्याप्त से अधिक थी क्योंकि माइक्रोप्रोसेसरों के पास बहुत कम रजिस्टर थे और अधिक प्राप्त करने की संभावना नहीं थी, और अधिकांश डिजाइनों ने इसे पसंद किया। प्रचलित भावना तब यह थी कि सॉफ्टवेयर नए सीपीयू के लिए फिर से लिखा जाएगा क्योंकि वे दिखाई देते थे, इसलिए मॉडल के बीच रजिस्टर नामकरण योजना को बदलना कोई बड़ी बात नहीं होती। आईबीएम पीसी में शामिल होने के बाद 8088 में एक "परिवार" के रूप में विकसित होने का श्रेय किसी को नहीं है, और पिछड़े संगतता के योग ने इंटेल को 32-बिट रजिस्टरों पर "ई" जैसी योजनाओं को बनाए रखने के लिए इसे अपनाने के लिए मजबूर किया।

गैर-ऐतिहासिक हिस्सा सभी व्यावहारिक है। सामान्य प्रयोजन के रजिस्टरों के लिए अक्षरों का उपयोग करना आपको 26 तक सीमित कर देता है, यदि आप उन लोगों से कम करते हैं जो प्रोग्राम काउंटर, झंडे या स्टैक पॉइंटर जैसे विशेष प्रयोजन रजिस्टर के नामों के साथ भ्रम पैदा कर सकते हैं।

मेरे पास इसकी पुष्टि करने का कोई स्रोत नहीं है, लेकिन मुझे संदेह है कि R64-बिट सीपीयू पर R15 के माध्यम से एक उपसर्ग और R8 की शुरूआत गिने हुए रजिस्टरों के लिए एक संक्रमण का संकेत देती है, जो 32-बिट के बीच का मानदंड है -लगभग आर्किटेक्चर 8008 से लगभग आधी सदी तक नहीं निकले। आईबीएम ने 1960 में 360 के साथ किया था और इसके बाद पावरपीसी, डीईसी अल्फा, एमआइपीएस, एसपीएआरसी, एआरएम, इंटेल का i860 और i960 और लंबे समय से भूले हुए लोगों का एक समूह है।

आप ध्यान दें कि यदि वे मौजूद हैं तो मौजूदा रजिस्टरों को R7 के माध्यम से R0 में अच्छी तरह से फिट किया जाएगा, और अगर वे आंतरिक रूप से इस तरह से व्यवहार करते हैं तो यह मुझे थोड़ा आश्चर्यचकित नहीं करेगा। मौजूदा लंबे रजिस्टरों (RAX / EAX / AX / AL, RBX / EBX / BX / BL, आदि) शायद तब तक आसपास रहेंगे जब तक सूरज बाहर नहीं निकलता।


1
थोडा एंटीसाइक्लेमैटिक लेकिन मुझे लगता है कि मुझे बहुत आश्चर्य नहीं होना चाहिए। धन्यवाद।
मैट

3
वह सब नाटक जो मैं कर सकता था। :-)
ब्लरफ्ल

बहुत दिलचस्प पढ़ने के लिए +1। लेकिन अगर इसे केवल एक पंक्ति में संक्षेपित किया जाए, तो यह वह उत्तर होगा जो मैंने दिया था। यह सभी समृद्ध और दिलचस्प जानकारी संक्षेप में "ऐतिहासिक कारणों" से नीचे हो जाती है।
माइक नाकिस

6
एएमडी ने निम्न 8 रजिस्टरों का नाम बदलना या उनका नामकरण पर विचार कियाr0 - r7या , आदि के UAXबजाय का उपयोग करनाr8 । "यह पता लगाना कि रजिस्टर को सर्वश्रेष्ठ नाम देना वास्तव में रजिस्टर एक्सटेंशन करने के सबसे कठिन हिस्सों में से एक था।" ( कुछ अन्य स्वच्छ x86-64 इतिहास के लिए stackoverflow.com/a/35619528/224132 देखें ।) इसके अलावा, बाइनरी एन्कोडिंग में RAX / RBX / ... आदेश नहीं है, यह AX, CX, DX, BX
पीटर है।

9

पहले के प्रोसेसर में, सभी रजिस्टर समान नहीं थे:

  • प्रत्येक रजिस्टर के लिए एक योजक इकाई होने के लिए चिप्स पर पर्याप्त जगह नहीं थी।
  • 8 बिट्स के साथ, स्रोत और गंतव्य के सभी संभावित संयोजनों के लिए पर्याप्त ओपकोड उपलब्ध नहीं थे।

इसलिए यह मानते हुए कि एक विशिष्ट रजिस्टर हमेशा जोड़ा गया था जब योजक शामिल था, चिप को कम जटिल बना दिया और opcodes को छोटा कर दिया।

उदाहरण के लिए 6510 (कमोडोर 64 में प्रयुक्त) केवल रजिस्टर A का उपयोग करके जोड़ सकता है, और X या Y में प्रयुक्त अनुक्रमण किया जाता है। INC X और INC Y निर्देश हैं, लेकिन कोई INC A नहीं।

चूंकि रजिस्टरों में अलग-अलग उपयोग थे, इसलिए उनके उपयोग को दर्शाते हुए मेनेमिक्स को चुना गया। जैसे 6510 (ए, बी और सी के बजाय) ए, एक्स और वाई।

8086 में नाम उनके उपयोग को दर्शाने के लिए चुने गए हैं। 4 सामान्य उद्देश्य रजिस्टरों के साथ, उन्हें एक्सएक्स, बीएक्स, सीएक्स, और डीएक्स नाम देना तर्कसंगत था। अतिरिक्त अनुक्रमण रजिस्टर को BP और SP (mnemonic: Base Pointer, Stack Pointer) कहा जाता था।

चूंकि कई ऑपकोड 16 बिट्स तक बढ़ाए गए थे, इसलिए यह इंगित करने के लिए कुछ स्थान था कि चार में से एक रजिस्टर का उपयोग किया गया था। हालांकि, कुछ ऐतिहासिक कारणों को अभी भी लागू किया गया है, क्योंकि CX थोड़ा विशेष था: REP और पसंद, जो 8 बिट opcodes हैं, हमेशा काउंटर के रूप में CX का उपयोग करते हैं। एक साधारण महामारी, सीएक्स = काउंटर, यह याद रखने में मदद करता है कि किसका उपयोग किया जाता है।

8086 के उत्तराधिकारियों के लिए opcodes को पीछे की ओर संगत होना था, और चर लंबाई opcodes के परिणामस्वरूप एक गड़बड़ है। जब 32 बिट बूस अधिक सामान्य हो गए, तो निश्चित ओपोड लंबाई वाले प्रोसेसर की कोशिश की गई। यह सीपीयू के डिकोडिंग भाग को सरल करता है, जो कि अंतरिक्ष को मुक्त करता है जिसका उपयोग अधिक रजिस्टरों के लिए किया जा सकता है।

CISC (कॉम्प्लेक्स इंस्ट्रक्शन सेट सीपीयू) के साथ विपरीत करने के लिए जिन प्रोसेसरों ने विचार की इस लाइन का अनुसरण किया, उन्हें RISC प्रोसेसर (कम इंस्ट्रक्शन सेट सीपीयू) कहा जाता है।

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

निश्चित लंबाई 32 बिट ऑपकोड में एक स्रोत, एक दूसरा स्रोत, एक ऑपरेशन और एक गंतव्य शामिल करने के लिए पर्याप्त जगह है। SPARC प्रत्येक स्रोत, दूसरे स्रोत और गंतव्य के लिए 5 बिट्स को मिलाने में कामयाब रहा, और एक ही समय में 32 रजिस्टर दिखाई दिए।

32 रजिस्टर अक्षरों का उपयोग करने के लिए बहुत सारे हैं, और वे वैसे भी ज्यादातर समान थे, इसलिए उन्हें नंबर देना स्पष्ट पसंद था। 'R' का उपयोग उन्हें स्थिरांक 0..31 से अलग करने के लिए किया गया था, और 'R' रजिस्टर के लिए एक आसान महामारी था। इसलिए: R0..R31।

इन वर्षों में, पेंटियम और इसके उत्तराधिकारियों ने पीछे की ओर अनुकूलता बनाए रखी है। हालाँकि, अधिक सुसाइड RISC विचारों में से कई के रूप में अच्छी तरह से प्रेरित थे। अक्सर, वे नए, RISC जैसे निर्देश पीछे के संगत संस्करणों की तुलना में तेज़ी से चलेंगे।

मेमोरी एक्सेस की संख्या को कम करने के लिए, इंटेल द्वारा रजिस्टरों की संख्या भी बढ़ाई गई थी।

और जाहिर है, इंटेल ने आखिरकार आर-नोटेशन का उपयोग करना शुरू कर दिया है। पश्चगामी संगतता यह सुनिश्चित करेगी कि AX, BX, ... रहेगा, लेकिन मैं शर्त लगाऊंगा कि AX केवल R0 का पर्याय है।


डिस्क्लेमर : उपरोक्त इतिहास पर मेरा विचार है। यह अधूरा होगा क्योंकि मैं इतिहास के पहले हिस्सों को देखने के लिए पहले हाथ के आसपास नहीं था। फिर भी, मुझे आशा है कि यह कुछ के लिए उपयोगी है।


1
6500 परिवार को वास्तव में संचायक को बढ़ाने के लिए एक समर्पित निर्देश की कोई आवश्यकता नहीं थी क्योंकि 1 के तत्काल-मोड ऐड ने एक ही दो चक्रों को INXया तो INYलिया, हालांकि कोड ने एक अतिरिक्त बाइट पर कब्जा कर लिया। मैंने उस चिप के लिए बहुत सी असेंबली लिखी थी और व्यवहार में उस तरह की वेतन वृद्धि गणित के बाहर दुर्लभ थी जिसे इसकी आवश्यकता थी।
ब्लरफ्ल

@ ब्लरफुल आप सही हैं: ADD 1काम करता है इसलिए किसी विशेष ' एन ए' की आवश्यकता नहीं थी। और मुझे इसकी जरूरत नहीं है।
Sjoerd

1
यह ध्यान दिया जाना चाहिए कि यह इंटेल नहीं था जिसने x64 में रजिस्टरों की संख्या में वृद्धि की और उनका नाम दिया, लेकिन एएमडी द्वारा 64-बिट एक्सटेंशन के रूप में एएमडी का निर्माण किया गया था । इंटेल का 64-बिट डिज़ाइन इटेनियम था , जिसने बहुत अच्छा नहीं किया, हालांकि उन्होंने इसमें रजिस्टरों का बहुत (128 सामान्य उद्देश्य पूर्णांक, प्लस कई अन्य) डाल दिया।
8bittree

5

इसका मतलब सिर्फ 'रजिस्टर' है। ऐतिहासिक कारणों से।


यह वास्तव में ऐतिहासिक नहीं है यदि यह वर्तमान में एक रजिस्टर को संदर्भित करता है, तो क्या यह है? मैं कहता हूँ कि रजिस्टरों के अन्य नाम (AX, EAX, इत्यादि) ऐतिहासिक कारणों से अधिक हैं। लेकिन RAX में "R" वास्तव में बहुत वर्तमान में लागू है।
कार्ल जी

1
(+1) मेम: "यदि आप इसे लंबे समय तक समझा सकते हैं, तो आप इसे संक्षिप्त रूप में समझा सकते हैं।"
user7813604
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.