आपके द्वारा पाया गया कोड यह समझाने की कोशिश करता है कि एक बहुत ही आदिम कंप्यूटर हार्डवेयर "ऐड" इंस्ट्रक्शन को कैसे लागू कर सकता है । मैं कहता हूं "हो सकता है" क्योंकि मैं यह गारंटी दे सकता हूं कि यह विधि किसी भी सीपीयू द्वारा उपयोग नहीं की जाती है , और मैं समझाऊंगा कि क्यों।
सामान्य जीवन में, आप दशमलव संख्याओं का उपयोग करते हैं और आपने उन्हें जोड़ना सीख लिया है: दो संख्याएँ जोड़ने के लिए, आप सबसे कम दो अंकों को जोड़ते हैं। यदि परिणाम 10 से कम है, तो आप परिणाम लिखते हैं और अगले अंक की स्थिति में आगे बढ़ते हैं। यदि परिणाम 10 या अधिक है, तो आप परिणाम माइनस 10 लिखते हैं, अगले अंक पर आगे बढ़ें, आपको 1 और जोड़ने के लिए याद रखें। उदाहरण के लिए: 23 + 37, आप 3 + 7 = 10 जोड़ते हैं, आप 0 लिखते हैं और अगली स्थिति के लिए 1 और जोड़ना याद करते हैं। 10 वें स्थान पर, आप (2 + 3) + 1 = 6 जोड़ते हैं और इसे लिखते हैं। परिणाम 60 है।
आप बाइनरी नंबर के साथ सटीक एक ही काम कर सकते हैं। अंतर यह है कि केवल अंक 0 और 1 हैं, इसलिए एकमात्र संभव योग 0, 1, 2 हैं। 32 बिट संख्या के लिए, आप एक के बाद एक अंकों की स्थिति को संभाल लेंगे। और यह है कि वास्तव में आदिम कंप्यूटर हार्डवेयर यह कैसे करेगा।
यह कोड अलग तरह से काम करता है। आप जानते हैं कि दो द्विआधारी अंकों का योग 2 है यदि दोनों अंक 1. हैं, तो यदि दोनों अंक 1 हैं, तो आप अगले द्विआधारी स्थिति में 1 और जोड़ेंगे और नीचे लिखेंगे 0. यही टी की गणना है: यह सभी स्थानों को ढूंढता है जहाँ दोनों बाइनरी अंक 1 हैं (यह &) है और उन्हें अगले अंक की स्थिति (<< 1) पर ले जाता है। फिर यह जोड़ करता है: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 2 है, लेकिन हम नीचे लिखते हैं 0. यह है कि बहिष्कृत या ऑपरेटर क्या करता है।
लेकिन सभी 1 है कि आप अगले अंक की स्थिति में संभाल करने के लिए संभाल नहीं किया गया है। उन्हें अभी भी जोड़े जाने की आवश्यकता है। इसलिए कोड एक लूप करता है: अगली पुनरावृत्ति में, सभी अतिरिक्त 1 जोड़े जाते हैं।
कोई प्रोसेसर ऐसा क्यों नहीं करता है? क्योंकि यह एक लूप है, और प्रोसेसर को लूप पसंद नहीं है, और यह धीमा है। यह धीमा है, क्योंकि सबसे खराब स्थिति में, 32 पुनरावृत्तियों की आवश्यकता होती है: यदि आप 1 को 0xffffffff (32 1-बिट्स) में जोड़ते हैं, तो पहला पुनरावृत्ति y का बिट 0 सेट करता है और x को 2 पर सेट करता है। दूसरा पुनरावृत्ति बिट्स 1 y और सेट x से 4. और इसी तरह। परिणाम प्राप्त करने के लिए 32 पुनरावृत्तियों लगते हैं। हालाँकि, प्रत्येक पुनरावृत्ति को x और y के सभी बिट्स को संसाधित करना पड़ता है, जो बहुत सारे हार्डवेयर लेता है।
एक आदिम प्रोसेसर दशमलव अंकगणित को करने के तरीके को त्वरित रूप से करेगा, जो सबसे कम स्थिति से उच्चतम तक होगा। यह 32 कदम भी उठाता है, लेकिन प्रत्येक चरण पिछले बिट स्थिति से केवल दो बिट्स और एक मूल्य को संसाधित करता है, इसलिए इसे लागू करना बहुत आसान है। और यहां तक कि एक आदिम कंप्यूटर में, कोई भी इसे लागू करने के लिए बिना छोरों को लागू कर सकता है।
एक आधुनिक, तेज और जटिल सीपीयू "सशर्त योग योजक" का उपयोग करेगा। विशेष रूप से यदि बिट्स की संख्या अधिक है, उदाहरण के लिए, 64 बिट योजक, यह बहुत समय बचाता है।
64 बिट योजक में दो भाग होते हैं: पहला, सबसे कम 32 बिट के लिए एक 32 बिट योजक। वह 32 बिट योजक एक योग उत्पन्न करता है, और एक "कैरी" (एक संकेतक जो 1 को अगले बिट स्थिति में जोड़ा जाना चाहिए)। दूसरा, उच्च 32 बिट्स के लिए दो 32 बिट योजक: एक x + y जोड़ता है, दूसरा x + y + 1. जोड़ता है, सभी तीन योजक समानांतर में काम करते हैं। फिर जब पहले योजक ने अपने कैरी का उत्पादन किया है, तो सीपीयू सिर्फ चुनता है जो दो परिणामों में से एक x + y या x + y + 1 सही है, और आपके पास पूरा परिणाम है। तो एक 64 बिट योजक केवल 32 बिट योजक की तुलना में एक छोटा सा अधिक समय लेता है, न कि दो बार।
32 बिट योजक भागों को फिर से सशर्त योग योजक के रूप में लागू किया जाता है, कई 16 बिट योजक का उपयोग करते हुए, और 16 बिट योजक सशर्त योग योजक होते हैं, और इसी तरह।
add
मशीन अनुदेश का उपयोग करेंगे , जो मुझे लगता है कि सभी सीपीयू में हार्डवेयर योजक के रूप में लागू किया गया है और कुछ घड़ियों में काम करता है।