सबसे पहले, सवाल के नीचे अग्रेंजी की टिप्पणी देखें।
अब, जैसे कि कंप्यूटर कैसे उस पर नज़र रख सकता है, मैं आपको 16-बिट प्रोग्रामिंग से अपना ज्ञान दे सकता हूं। अवधारणाओं की संभावना समान है। (हालांकि, सटीक सटीक उत्तर कार्यान्वयन-निर्भर हो सकता है। दूसरे शब्दों में, चिप्स डिजाइन करने वाले लोग, कम से कम सिद्धांत रूप में, यह कैसे काम करता है, इस पर अलग-अलग निर्णय ले सकते हैं।)
जब आप दो नंबर जोड़ते हैं जो 8 बिट होते हैं, तो सबसे बड़ी संख्या आप प्राप्त कर सकते हैं (0xFF + 0xFF = 1FE)। वास्तव में, यदि आप दो संख्याओं को 8-बिट से गुणा करते हैं, तो सबसे बड़ी संख्या जो आप प्राप्त कर सकते हैं (0xFF * 0xFF = 0xFE01) अभी भी 16 बिट्स है, 8-बिट्स के दो बार।
अब, आप यह मान सकते हैं कि 8-बिट प्रोसेसर केवल 8-बिट्स का ट्रैक रख सकता है। यह सटीक नहीं है। 8-बिट प्रोसेसर 8-बिट विखंडू में डेटा प्राप्त करता है। (ये "विखंडू" आमतौर पर एक औपचारिक शब्द है: एक "शब्द"। 8-बिट प्रोसेसर पर, 8-बिट शब्दों का उपयोग किया जाता है। 64-बिट प्रोसेसर पर, 64 बिट शब्दों का उपयोग किया जा सकता है।)
इसलिए, जब आप कंप्यूटर को 3 बाइट देते हैं:
बाइट # 1: मूल निर्देश
बाइट # 2: उच्च क्रम बाइट्स (जैसे, 0xA5)
बाइट # 3: निचला क्रम बाइट्स (जैसे, 0xCB)
कंप्यूटर एक परिणाम उत्पन्न कर सकता है जो 8 बिट्स से अधिक है। सीपीयू इस तरह के परिणाम उत्पन्न कर सकता है:
0100 0000 0100 0010 xxxx xxxx xxxx xxxx 1101 0111
a.k.a .:
0x4082xxxxD7
अब, मुझे लगता है कि आप के लिए व्याख्या:
0x का अर्थ है कि निम्नलिखित अंक हेक्साडेसिमल हैं।
मैं "40" पर और अधिक विस्तार से चर्चा करूंगा।
82 "ए" रजिस्टर का हिस्सा है, जो 8 बिट्स की एक श्रृंखला है।
xx और xx दो अन्य रजिस्टरों का हिस्सा हैं, जिनका नाम "B" रजिस्टर और "C" रजिस्टर है।
डी 7 अधिक बिट्स में फिट होगा, जिसे "डी" रजिस्टर कहा जाता है।
एक रजिस्टर सिर्फ स्मृति का एक टुकड़ा है। रजिस्टरों को सीपीयू में बनाया जाता है, इसलिए सीपीयू रैम स्टिक पर मेमोरी के साथ बातचीत करने की आवश्यकता के बिना रजिस्टर तक पहुंच सकता है।
तो 0xA5 गुणा 0xCB का गणितीय परिणाम 0x82D7 है।
अब, बिट्स A और B रजिस्टरों के बजाय A और D रजिस्टरों या C और D रजिस्टरों में विभाजित क्यों हो गए? खैर, एक बार फिर, यह एक नमूना परिदृश्य है जिसका मैं उपयोग कर रहा हूं, इसका मतलब अवधारणा में वास्तविक विधानसभा भाषा (इंटेल x86 16-बिट, इंटेल 8080 और 8088 और कई नए सीपीयू द्वारा उपयोग किया जाता है) के समान है। कुछ सामान्य नियम हो सकते हैं, जैसे कि "सी" रजिस्टर आमतौर पर गिनती के संचालन (छोरों के लिए विशिष्ट) के लिए एक सूचकांक के रूप में इस्तेमाल किया जा रहा है, और "बी" रजिस्टर का उपयोग ऑफ़सेट का ट्रैक रखने के लिए किया जा रहा है जो मेमोरी स्थानों को निर्दिष्ट करने में मदद करते हैं। तो, "ए" और "डी" कुछ सामान्य अंकगणितीय कार्यों के लिए अधिक सामान्य हो सकते हैं।
प्रत्येक सीपीयू निर्देश में कुछ दस्तावेज होने चाहिए, जिनका उपयोग लोग विधानसभा में करते हैं। उस दस्तावेज़ को निर्दिष्ट करना चाहिए कि प्रत्येक निर्देश द्वारा रजिस्टरों का क्या उपयोग किया जाता है। (इसलिए जिस विकल्प का उपयोग करने के लिए रजिस्टरों का उपयोग किया जाता है वह अक्सर सीपीयू के डिजाइनरों द्वारा निर्दिष्ट किया जाता है, न कि असेंबली लैंग्वेज प्रोग्रामर्स द्वारा। हालांकि, कुछ लचीलापन हो सकता है।)
अब, उपरोक्त उदाहरण में "40" पर वापस जाना: यह बिट्स की एक श्रृंखला है, जिसे अक्सर "फ्लैग रजिस्टर" कहा जाता है। झंडे रजिस्टर में प्रत्येक बिट का एक नाम है। उदाहरण के लिए, एक "अतिप्रवाह" बिट है जो सीपीयू सेट कर सकता है यदि परिणाम अंतरिक्ष से बड़ा है जो परिणामों के एक बाइट को स्टोर कर सकता है। ("ओवरफ्लो" बिट को अक्सर "OF" के संक्षिप्त नाम से संदर्भित किया जा सकता है। यह एक पूंजी ओ है, शून्य नहीं है।) सॉफ्टवेयर इस ध्वज के मूल्य की जांच कर सकता है और "समस्या" को नोटिस कर सकता है। इस बिट के साथ काम करना अक्सर उच्च-स्तरीय भाषाओं द्वारा अदृश्य रूप से नियंत्रित किया जाता है, इसलिए प्रोग्रामर अक्सर सीपीयू झंडे के साथ बातचीत करने के बारे में नहीं सीखते हैं। हालांकि, असेंबली प्रोग्रामर आमतौर पर इनमें से कुछ झंडे को अन्य चर के समान तरीके से एक्सेस कर सकते हैं।
उदाहरण के लिए, आपके पास कई ADD निर्देश हो सकते हैं। एक एडीडी निर्देश ए रजिस्टर और डी रजिस्टर में परिणामों के 16 बिट्स को स्टोर कर सकता है, जबकि एक अन्य निर्देश ए रजिस्टर में केवल 8 कम बिट्स स्टोर कर सकता है, डी रजिस्टर को अनदेखा कर सकता है, और ओवरफ्लो बिट निर्दिष्ट कर सकता है। फिर, बाद में (ए रजिस्टर के परिणामों को मुख्य रैम में संग्रहीत करने के बाद), आप एक और एडीडी निर्देश का उपयोग कर सकते हैं जो एक रजिस्टर में 8 उच्च बिट्स (संभवतः ए रजिस्टर) को संग्रहीत करता है, चाहे आपको एक अतिप्रवाह ध्वज का उपयोग करने की आवश्यकता हो। केवल उस गुणन निर्देश पर निर्भर करें जिसका आप उपयोग करते हैं।
(आम तौर पर "अंडरफ्लो" ध्वज भी होता है, यदि आप वांछित परिणाम में फिट होने के लिए बहुत अधिक घटाते हैं।)
बस आपको यह दिखाने के लिए कि जटिल चीजें कैसे मिलीं:
इंटेल 4004 एक 4-बिट सीपीयू था
Intel 8008 एक 8-बिट CPU था। इसमें ए, बी, सी और डी नाम के 8-बिट रजिस्टर थे।
Intel 8086 एक 16-बिट CPU था। इसमें AX, BX, CX, और DX नाम के 16-बिट रजिस्टर थे।
Intel 80386 एक 32-बिट CPU था। इसमें EAX, EBX, ECX और EDX नाम के 32-बिट रजिस्टर थे।
इंटेल x64 सीपीयू में RAX, RBX, RCX और RDX नाम के 64-बिट रजिस्टर हैं।
X64 चिप्स 16-बिट कोड (कुछ ऑपरेटिंग मोड में) चला सकते हैं, और 16-बिट निर्देशों की व्याख्या कर सकते हैं। ऐसा करते समय, AX रजिस्टर बनाने वाले बिट्स EAX रजिस्टर बनाने वाले बिट्स में से आधे होते हैं, जो RAX रजिस्टर बनाने वाले बिट्स में से आधे होते हैं। तो कभी भी आप AX के मान को बदलते हैं, तो आप EAX और RAX को भी बदल रहे हैं, क्योंकि AX द्वारा उपयोग की जाने वाली बिट्स RAX द्वारा उपयोग किए जाने वाले बिट्स का हिस्सा हैं।
मेरे द्वारा उल्लेखित की तुलना में अधिक झंडे और रजिस्टर हैं।
अब, यदि आप 8-बिट सीपीयू पर हैं, तो जब आप मेमोरी में लिखते हैं, तो आपको 8-बिट्स के पते का उल्लेख करने में सक्षम होने के बारे में कुछ प्रतिबंध मिल सकते हैं, 4 बिट्स या 16-बिट्स के पते पर नहीं। सीपीयू के आधार पर विवरण अलग-अलग होंगे, लेकिन यदि आपके पास इस तरह के प्रतिबंध हैं, तो सीपीयू 8-बिट शब्दों के साथ काम कर सकता है, यही कारण है कि सीपीयू को आमतौर पर "8-बिट सीपीयू" के रूप में जाना जाता है।