यदि आप एक प्रोसेसर के निर्देश सेट पर एक नजर डालते हैं, तो उन्हें समूहीकृत करने के कई तरीके हैं। उदाहरण के लिए, सभी 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
)। ये विशेष मामले के निर्देश बन सकते हैं:
SUB Rx, Rx
बन सकता है NOT Rx
- एक एकल-संचालन निर्देश।
MOV Rx, Rx
एक MOV
निर्देश हो सकता है जो एक दूसरे बाइट को तत्काल मूल्य के रूप में लेता है, जिसकी व्याख्या की जाती है MOV Rx, #$yy
।
इस तरह से आप निर्देश मानचित्र के साथ "खेल" सकते हैं, अन्यथा प्रोग्रामर के लिए एक बड़ा निर्देश सेट प्रदान करने के लिए अन्यथा बेकार या गैर-व्यावहारिक निर्देशों के लिए छेदों को भरना। लेकिन अंत में, निर्देश सेट रजिस्टर सेट को परिभाषित करता है।