इस उत्तर की अधिकांश सामग्री मूल रूप से इस उत्तर से आई है (इससे पहले लिखित अन्य प्रश्न को एक डुप्लिकेट के रूप में चिह्नित किया गया था)। इसलिए मैं 8-बिट मानों (भले ही यह प्रश्न 32-बिट मानों के बारे में पूछा गया हो) का उपयोग करने पर चर्चा करता हूं, लेकिन यह ठीक है क्योंकि 8-बिट मान वैचारिक रूप से समझने के लिए सरल हैं, और वही अवधारणाएं 32-बिट अंकगणितीय जैसे बड़े मूल्यों पर लागू होती हैं।
जब आप दो नंबर जोड़ते हैं जो 8 बिट होते हैं, तो सबसे बड़ी संख्या आप प्राप्त कर सकते हैं (0xFF + 0xFF = 1FE)। वास्तव में, यदि आप दो संख्याओं को 8-बिट से गुणा करते हैं, तो सबसे बड़ी संख्या जो आप प्राप्त कर सकते हैं (0xFF * 0xFF = 0xFE01) अभी भी 16 बिट्स है, 8-बिट्स के दो बार।
अब, आप यह मान सकते हैं कि एक एक्स-बिट प्रोसेसर केवल एक्स-बिट्स का ट्रैक रख सकता है। (उदाहरण के लिए, एक 8-बिट प्रोसेसर केवल 8 बिट्स का ट्रैक रख सकता है।) यह सही नहीं है। 8-बिट प्रोसेसर 8-बिट विखंडू में डेटा प्राप्त करता है। (ये "विखंडू" आमतौर पर एक औपचारिक शब्द है: एक "शब्द"। 8-बिट प्रोसेसर पर, 8-बिट शब्दों का उपयोग किया जाता है। 64-बिट प्रोसेसर पर, 64 बिट शब्दों का उपयोग किया जा सकता है।)
इसलिए, जब आप कंप्यूटर को 3 बाइट्स देते हैं:
बाइट # 1: MUL इंस्ट्रक्शन
बाइट # 2: हाई ऑर्डर बाइट्स (जैसे, 0xA5)
बाइट # 3: लोअर ऑर्डर बाइट्स (जैसे, 0xCB)
कंप्यूटर एक परिणाम उत्पन्न कर सकता है 8 बिट्स से अधिक है। सीपीयू इस तरह के परिणाम उत्पन्न कर सकता है:
0100 0000 0100 0010 xxxx xxxx xxxx xxxx 1101 0111
aka:
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-बिट सीपीयू
था इंटेल 8008 एक 8-बिट सीपीयू था। इसमें ए, बी, सी और डी नाम के 8-बिट रजिस्टर थे
। इंटेल 8086 एक 16-बिट सीपीयू था। इसमें 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 द्वारा उपयोग किए जाने वाले बिट्स का हिस्सा हैं। (यदि आप EAX को 65,536 से अधिक के मान से बदलते हैं, तो 16 बिट्स अपरिवर्तित हैं, इसलिए परिवर्तित नहीं होगा। यदि आप EAX को ऐसे मान से परिवर्तित करते हैं, जो 65,536 से अधिक नहीं है, तो यह AX को भी प्रभावित करेगा। ।)
मेरे द्वारा बताए गए लोगों की तुलना में अधिक झंडे और रजिस्टर हैं। मैंने बस एक सरल वैचारिक उदाहरण प्रदान करने के लिए कुछ आमतौर पर इस्तेमाल होने वाले लोगों को चुना।
अब, यदि आप 8-बिट सीपीयू पर हैं, जब आप मेमोरी में लिखते हैं, तो आप 8-बिट्स के पते का उल्लेख करने में सक्षम होने के बारे में कुछ प्रतिबंध पा सकते हैं, 4 बिट्स या 16-बिट्स के पते पर नहीं। सीपीयू के आधार पर विवरण अलग-अलग होंगे, लेकिन यदि आपके पास इस तरह के प्रतिबंध हैं, तो सीपीयू 8-बिट शब्दों के साथ काम कर सकता है, यही कारण है कि सीपीयू को आमतौर पर "8-बिट सीपीयू" के रूप में जाना जाता है।