कैरी फ़्लैग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|Processor flag indicating whether unsigned arithmetic overflow has occurred}}


{{Short description|Processor flag indicating whether unsigned arithmetic overflow has occurred}}
 
[[कंप्यूटर प्रोसेसर]] में कैरी फ़्लैग (आमतौर पर सी फ़्लैग के रूप में दर्शाया जाता है) सिस्टम [[ स्थिति रजिस्टर |स्थिति रजिस्टर]] /फ़्लैग रजिस्टर में एक एकल [[ अंश |अंश]] होता है, जिसका उपयोग यह इंगित करने के लिए किया जाता है कि [[सबसे महत्वपूर्ण बिट]] [[[[अंकगणित]]ीय तर्क इकाई]] से अंकगणित कैरी (अंकगणित) या उधार कब उत्पन्न हुआ है (ALU) बिट स्थिति. कैरी फ़्लैग एक अधिक महत्वपूर्ण शब्द की [[कम से कम महत्वपूर्ण बिट]] स्थिति में आंशिक जोड़/घटाव से एक बाइनरी अंक ले जाकर (जोड़कर) एकल ALU चौड़ाई से बड़ी संख्याओं को जोड़ने/घटाने में सक्षम बनाता है। यह आम तौर पर प्रोसेसर के उपयोगकर्ता द्वारा असेंबली या मशीन कोड स्तर पर प्रोग्राम किया जाता है, लेकिन [[ डिजिटल तर्क |डिजिटल तर्क]] या [[माइक्रोकोड]] के माध्यम से कुछ प्रोसेसर में आंतरिक रूप से भी हो सकता है, जहां कुछ प्रोसेसर में (कॉम्बिनेटोरियल, या भौतिक) ALU की तुलना में व्यापक रजिस्टर और अंकगणितीय निर्देश होते हैं। .<ref>The well known Z80 and 68000 are examples of such CPUs, among many others.</ref> इसका उपयोग [[बिट शिफ्ट]] को बढ़ाने और कई प्रोसेसर पर समान तरीके से घूमने के लिए भी किया जाता है (कभी-कभी एक समर्पित ध्वज के माध्यम से किया जाता है)। घटिया संचालन के लिए, दो (विपरीत) सम्मेलनों को नियोजित किया जाता है क्योंकि अधिकांश मशीनें उधार पर कैरी ध्वज सेट करती हैं जबकि कुछ मशीनें (जैसे [[एमओएस टेक्नोलॉजी 6502]] और [[पीआईसी माइक्रोकंट्रोलर]]) इसके बजाय उधार पर कैरी ध्वज को रीसेट करती हैं (और इसके विपरीत)।
कंप्यूटर प्रोसेसर में '''कैरी फ़्लैग''' (सामान्यतः सी फ़्लैग के रूप में दर्शाया जाता है) सिस्टम स्टेटस रजिस्टर/फ़्लैग रजिस्टर में एक एकल बिट होता है, जिसका उपयोग यह निरुपित करने के लिए किया जाता है कि सबसे महत्वपूर्ण अंकगणित तर्क इकाई (एएलयू) बिट से अंकगणित कैरी या उधार कब उत्पन्न हुआ है। पद कैरी फ़्लैग एक अधिक महत्वपूर्ण शब्द की कम से कम महत्वपूर्ण बिट स्थिति में आंशिक जोड़/घटाव से एक बाइनरी अंक ले जाकर (जोड़कर) एकल एएलयू चौड़ाई से बड़ी संख्याओं को जोड़ने/घटाने में सक्षम बनाता है। यह सामान्यतः प्रोसेसर के उपयोगकर्ता द्वारा असेंबली या मशीन कोड स्तर पर प्रोग्राम किया जाता है, किंतु डिजिटल लॉजिक या माइक्रोकोड के माध्यम से कुछ प्रोसेसर में आंतरिक रूप से भी हो सकता है, जहां कुछ प्रोसेसर में (कॉम्बिनेटोरियल, या "भौतिक" की तुलना में व्यापक रजिस्टर और अंकगणितीय निर्देश होते हैं। ) एएलयू.<ref>The well known Z80 and 68000 are examples of such CPUs, among many others.</ref> इसका उपयोग बिट शिफ्ट को बढ़ाने और कई प्रोसेसर पर समान विधि से घूमने के लिए भी किया जाता है (कभी-कभी एक समर्पित फ्लैग के माध्यम से किया जाता है)। घटिया संचालन के लिए दो (विपरीत) सम्मेलनों को नियोजित किया जाता है क्योंकि अधिकांश मशीनें उधार पर कैरी फ्लैग सेट करती हैं जबकि कुछ मशीनें (जैसे 6502 और पीआईसी) इसके अतिरिक्त उधार पर कैरी फ्लैग रीसेट करती हैं (और इसके विपरीत)।


== उपयोग ==
== उपयोग ==
कैरी फ़्लैग अधिकांश अंकगणितीय (और आमतौर पर कई बिट वार) निर्देशों के परिणाम से प्रभावित होता है और उनमें से कई के लिए इनपुट के रूप में भी उपयोग किया जाता है। इनमें से कई निर्देशों के दो रूप हैं जो या तो कैरी को पढ़ते हैं या अनदेखा करते हैं। असेंबली भाषाओं में इन निर्देशों को असेंबली भाषा#ओपकोड निमोनिक्स और विस्तारित निमोनिक्स जैसे द्वारा दर्शाया जाता है <code>ADD/SUB</code>, <code>ADC/SBC</code> (<code>ADD/SUB</code> ले जाने सहित), <code>SHL/SHR</code> (बिट शिफ्ट), <code>ROL/ROR</code> (बिट घूमता है), <code>RCR/RCL</code> (कैरी के माध्यम से घुमाएँ), इत्यादि।<ref name = "intel">{{cite web |url=http://download.intel.com/design/PentiumII/manuals/24319102.PDF|format = PDF| title=Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual|accessdate=2007-10-25}}</ref> इस तरीके से कैरी फ़्लैग का उपयोग बहु-[[शब्द (डेटा प्रकार)]] जोड़ने, घटाने, शिफ्ट करने और घुमाने के संचालन को सक्षम बनाता है।
कैरी फ़्लैग अधिकांश अंकगणितीय (और सामान्यतः कई बिट वार) निर्देशों के परिणाम से प्रभावित होता है और उनमें से कई के लिए इनपुट के रूप में भी उपयोग किया जाता है। इनमें से कई निर्देशों के दो रूप हैं जो या तो कैरी को पढ़ते हैं या अनदेखा करते हैं। असेंबली भाषाओं में इन निर्देशों को <code>ADD/SUB</code>, <code>ADC/SBC</code> (कैरी सहित <code>ADD/SUB</code>), <code>SHL/SHR</code> (बिट शिफ्ट), <code>ROL/ROR</code> (बिट रोटेट्स), <code>RCR/RCL</code> (कैरी के माध्यम से घुमाएं) जैसे निमोनिक्स द्वारा दर्शाया जाता है।, और इसी अनुसार इस विधि से कैरी फ़्लैग का उपयोग बहु-शब्द जोड़ने, घटाने, शिफ्ट करने और घुमाने के संचालन को सक्षम बनाता है।<ref name="intel">{{cite web |url=http://download.intel.com/design/PentiumII/manuals/24319102.PDF|format = PDF| title=Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual|accessdate=2007-10-25}}</ref>


एक उदाहरण यह है कि यदि कोई [[8 बिट]] रजिस्टरों का उपयोग करके 255 और 255 जोड़ता है तो क्या होता है। परिणाम 510 होना चाहिए जो कि 9-बिट मान है <code>111111110</code> बाइनरी में. रजिस्टर में हमेशा संग्रहीत 8 सबसे कम महत्वपूर्ण बिट्स होंगे <code>11111110</code> बाइनरी (254 दशमलव) लेकिन चूंकि बिट 7 (आठ बिट) का कैरी आउट है, कैरी सेट है, यह दर्शाता है कि परिणाम को 9 बिट्स की आवश्यकता है। वैध 9-बिट परिणाम परिणाम के साथ कैरी फ़्लैग का संयोजन है।
एक उदाहरण यह है कि यदि कोई [[8 बिट]] रजिस्टरों का उपयोग करके 255 और 255 जोड़ता है तो क्या होता है। परिणाम 510 होना चाहिए जो कि 9-बिट मान <code>111111110 है</code> बाइनरी में. रजिस्टर में हमेशा संग्रहीत 8 सबसे कम महत्वपूर्ण बिट्स <code>11111110</code> बाइनरी (254 दशमलव) होंगे किंतु चूंकि बिट 7 (आठ बिट) का कैरी आउट है, कैरी सेट है, यह दर्शाता है कि परिणाम को 9 बिट्स की आवश्यकता है। वैध 9-बिट परिणाम परिणाम के साथ कैरी फ़्लैग का संयोजन है।


8 बिट के x86 ALU आकार के लिए, 8-बिट दो की पूरक व्याख्या, अतिरिक्त ऑपरेशन <code>11111111</code> + <code>11111111</code> का परिणाम <code>111111110</code>, <code>Carry_Flag</code> तय करना, <code>Sign_Flag</code> सेट, और <code>Overflow_Flag</code> साफ़।
8 बिट के x86 ALU आकार के लिए, 8-बिट दो की पूरक व्याख्या, अतिरिक्त ऑपरेशन <code>11111111</code> + <code>11111111</code> का परिणाम <code>111111110</code>, <code>Carry_Flag</code> तय करना, <code>Sign_Flag</code> सेट, और <code>Overflow_Flag</code> स्पष्ट होता है।


अगर <code>11111111</code> दो के पूरक हस्ताक्षरित पूर्णांक -1 को दर्शाता है (<code>ADD al,-1</code>), तो परिणाम की व्याख्या -2 है क्योंकि <code>Overflow_Flag</code> स्पष्ट है, और <code>Carry_Flag</code> नजरअंदाज कर दिया जाता है. परिणाम का चिह्न ऋणात्मक है, क्योंकि <code>Sign_Flag</code> सेट है. <code>11111110</code> हस्ताक्षरित पूर्णांक -2 का दोनों का पूरक रूप है।
यदि 111111111 दो के पूरक हस्ताक्षरित पूर्णांक -1 (ADD al,-1) को दर्शाता है, तो परिणाम की व्याख्या -2 है क्योंकि ओवरफ़्लो_फ़्लैग स्पष्ट है, और कैरी_फ़्लैग को अनदेखा कर दिया गया है। परिणाम का चिह्न नकारात्मक है, क्योंकि साइन_फ्लैग सेट है। 11111110 हस्ताक्षरित पूर्णांक -2 का दो पूरक रूप है।


अगर <code>11111111</code> अहस्ताक्षरित पूर्णांक बाइनरी संख्या 255 का प्रतिनिधित्व करता है (<code>ADD al,255</code>), तो परिणाम की व्याख्या 254 होगी, जो सही नहीं है, क्योंकि परिणाम का सबसे महत्वपूर्ण हिस्सा इसमें चला गया <code>Carry_Flag</code>, इसलिए इसे नजरअंदाज नहीं किया जा सकता। <code>Overflow_Flag</code> ई> और <code>Sign_Flag</code> नजरअंदाज कर दिया जाता है.
यदि <code>11111111</code> अहस्ताक्षरित पूर्णांक बाइनरी संख्या 255 (<code>ADD al,255</code>) का प्रतिनिधित्व करता है, तो परिणाम की व्याख्या 254 होगी, जो सही नहीं है, क्योंकि परिणाम का सबसे महत्वपूर्ण बिट <code>Carry_Flag</code> में चला गया, जिसे इसलिए अनदेखा नहीं किया जा सकता है। <code>Overflow_Flag</code> और <code>Sign_Flag</code> को अनदेखा कर दिया जाता है।


एक अन्य उदाहरण बिट पैटर्न के साथ 8-बिट [[प्रोसेसर रजिस्टर]] हो सकता है <code>01010101</code> और कैरी फ़्लैग सेट; यदि हम कैरी निर्देश के माध्यम से बाईं ओर घुमाएँ, तो परिणाम होगा <code>10101011</code> कैरी फ़्लैग को साफ़ कर दिया गया क्योंकि सबसे महत्वपूर्ण बिट (बिट 7) को कैरी में घुमाया गया था जबकि कैरी को सबसे कम महत्वपूर्ण बिट (बिट 0) में घुमाया गया था।
एक अन्य उदाहरण बिट पैटर्न के साथ 8-बिट [[प्रोसेसर रजिस्टर]] हो सकता है <code>01010101</code> और कैरी फ़्लैग सेट; यदि हम कैरी निर्देश के माध्यम से बाईं ओर घुमाएँ, तो परिणाम होगा <code>10101011</code> कैरी फ़्लैग को साफ़ कर दिया गया क्योंकि सबसे महत्वपूर्ण बिट (बिट 7) को कैरी में घुमाया गया था जबकि कैरी को सबसे कम महत्वपूर्ण बिट (बिट 0) में घुमाया गया था।


प्रारंभिक माइक्रोप्रोसेसर [[Intel 4004]] और [[Intel 8008]] में कैरी फ़्लैग को स्पष्ट रूप से सेट करने के साथ-साथ रीसेट करने के लिए विशिष्ट निर्देश थे। हालाँकि, बाद के [[Intel 8080]] (और [[Z80]]) में एक स्पष्ट रीसेट कैरी ऑपकोड शामिल नहीं था क्योंकि यह बिटवाइज़ AND, OR या XOR निर्देशों (जो कैरी फ़्लैग का उपयोग नहीं करते हैं) में से किसी एक के माध्यम से समान रूप से तेज़ी से किया जा सकता था।
प्रारंभिक माइक्रोप्रोसेसर [[Intel 4004|इंटेल 4004]] और [[Intel 8008|इंटेल 8008]] में कैरी फ़्लैग को स्पष्ट रूप से सेट करने के साथ-साथ रीसेट करने के लिए विशिष्ट निर्देश थे। चूँकि, बाद के [[Intel 8080|इंटेल 8080]] (और [[Z80]]) में एक स्पष्ट रीसेट कैरी ऑपकोड सम्मिलित नहीं था क्योंकि यह बिटवाइज़ AND, OR या XOR निर्देशों (जो कैरी फ़्लैग का उपयोग नहीं करते हैं) में से किसी एक के माध्यम से समान रूप से तेज़ी से किया जा सकता था।


कैरी फ़्लैग का उपयोग अक्सर तुलना निर्देशों के बाद भी किया जाता है, जो आमतौर पर घटाव संचालन द्वारा कार्यान्वित किया जाता है, ताकि यह निर्णय लिया जा सके कि दोनों में से कौन सा तुलनात्मक मूल्य दूसरे से कम (या अधिक या बराबर) है। शाखा निर्देश जो कैरी फ़्लैग की जांच करते हैं, उन्हें अक्सर असेंबली भाषा#ओपकोड निमोनिक्स और विस्तारित निमोनिक्स जैसे द्वारा दर्शाया जाता है <code>BCC</code> और <code>BCS</code> यदि कैरी साफ़ है तो शाखा में जाएँ, या यदि कैरी क्रमशः सेट है तो शाखा में जाएँ। जब इस तरह से उपयोग किया जाता है तो कैरी फ़्लैग मानों को अहस्ताक्षरित पूर्णांक के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है। यह [[अतिप्रवाह ध्वज]] के विपरीत है जो मानों को हस्ताक्षरित पूर्णांक मानों के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है।
कैरी फ़्लैग का उपयोग अधिकांशतः तुलना निर्देशों के बाद भी किया जाता है, जो सामान्यतः घटाव संचालन द्वारा कार्यान्वित किया जाता है, जिससे यह निर्णय लिया जा सकता है कि दोनों में से कौन सा तुलनात्मक मूल्य दूसरे से कम (या अधिक या समान) है। शाखा निर्देश जो कैरी ध्वज की जांच करते हैं, अधिकांशतः <code>BCC</code> और <code>BCS</code> जैसे निमोनिक्स द्वारा दर्शाए जाते हैं यदि कैरी स्पष्ट है, या यदि कैरी क्रमशः सेट है तो शाखा जब इस तरह से उपयोग किया जाता है तो कैरी फ़्लैग मानों को अहस्ताक्षरित पूर्णांक के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है। यह अतिप्रवाह ध्वज के विपरीत है जो मानों को हस्ताक्षरित पूर्णांक मानों के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है।


== बनाम उधार झंडा ==
== बनाम बोर्रो फ्लैग ==
जबकि कैरी फ़्लैग को जोड़ने के लिए अच्छी तरह से परिभाषित किया गया है, घटाव संचालन के लिए कैरी फ़्लैग का उपयोग करने के आम तौर पर दो तरीके हैं।
जबकि कैरी फ़्लैग को जोड़ने के लिए अच्छी तरह से परिभाषित किया गया है, घटाव संचालन के लिए कैरी फ़्लैग का उपयोग करने के सामान्यतः दो विधि हैं।


पहला बिट को उधार ध्वज के रूप में उपयोग करता है, इसे सेट करता है यदि a<b गणना करते समय a−b, और एक उधार लिया जाना चाहिए। यदि a≥b, तो बिट साफ़ हो जाता है। एक 'उधार के साथ घटाना' (<code>SBB</code>) निर्देश a−b−C = a−(b+C) की गणना करेगा, जबकि उधार के बिना घटाव (<code>SUB</code>) ऐसा कार्य करता है मानो उधार बिट स्पष्ट हो। [[8080]], [[मोटोरोला 6800]], Z80, इंटेल MCS-51, x[[86]]<ref name=intel/>और 68 हजार परिवार (अन्य लोगों के बीच) उधार बिट का उपयोग करते हैं।
पहला बिट को उधार ध्वज के रूप में उपयोग करता है, इसे सेट करता है यदि a<b गणना करते समय a−b, और एक उधार लिया जाना चाहिए। यदि a≥b, तो बिट साफ़ हो जाता है। उधार (एसबीबी) निर्देश के साथ एक घटाव a−b−C = a−(b+C) की गणना करेगा, जबकि उधार के बिना एक घटाव (<code>SUB</code>) ऐसे कार्य करता है जैसे कि उधार बिट स्पष्ट था। 8080, 6800, Z80, 8051, x86<ref name=intel/> और 68k वर्ग (अन्य के बीच) उधार बिट का उपयोग करते हैं।


दूसरा इस पहचान का उपयोग करता है कि −x = ([[बिटवाइज़ नहीं]] x)+1 सीधे (यानी कैरी बिट को उल्टा संग्रहीत किए बिना) और a−b की गणना a+(b नहीं)+1 के रूप में करता है। कैरी फ़्लैग को इस जोड़ के अनुसार सेट किया गया है, और 'कैरी के साथ घटाना' a+not(b)+C की गणना करता है, जबकि कैरी के बिना घटाना ऐसे कार्य करता है मानो कैरी बिट सेट किया गया हो। नतीजा यह है कि यदि a≥b है तो कैरी बिट सेट है, और यदि a<b है तो क्लियर है। सिस्टम/360,<ref>{{cite book |title=IBM System/360 Principles of Operation |url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/princOps/A22-6821-0_360PrincOps.pdf |page=28 |id=IBM Form A22-6821-0}}</ref> एमओएस टेक्नोलॉजी 6502, [[एमएसपी430]], सीओपी8, [[एआरएम वास्तुकला]] और [[पावरपीसी]] प्रोसेसर इस कन्वेंशन का उपयोग करते हैं। 6502 एक विशेष रूप से प्रसिद्ध उदाहरण है क्योंकि इसमें कैरी ऑपरेशन के बिना घटाव नहीं होता है, इसलिए प्रोग्रामर को यह सुनिश्चित करना होगा कि कैरी फ्लैग हर घटाव ऑपरेशन से पहले सेट किया गया है जहां उधार की आवश्यकता नहीं है।<ref>{{cite journal
दूसरा इस पहचान का उपयोग करता है कि −x = (x नहीं)+1 सीधे (अथार्त कैरी बिट को व्युत्क्रम संग्रहीत किए बिना) और a−b की गणना a+(b नहीं)+1 के रूप में करता है। कैरी फ़्लैग को इस जोड़ के अनुसार सेट किया गया है, और कैरी के साथ घटाना a+not(b)+C की गणना करता है, जबकि कैरी के बिना घटाना ऐसे कार्य करता है मानो कैरी बिट सेट किया गया हो। परिणाम यह है कि यदि a≥b है तो कैरी बिट सेट है, और यदि <math>a<b                                                                                                                                                                                    
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                </math> है तो क्लियर है। सिस्टम/360,<ref>{{cite book |title=IBM System/360 Principles of Operation |url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/princOps/A22-6821-0_360PrincOps.pdf |page=28 |id=IBM Form A22-6821-0}}</ref> 6502, एमएसपी430, सीओपी8, एआरएम और पावरपीसी प्रोसेसर इस कन्वेंशन का उपयोग करते हैं। 6502 एक विशेष रूप से प्रसिद्ध उदाहरण है क्योंकि इसमें कैरी ऑपरेशन के बिना घटाव नहीं होता है, इसलिए प्रोग्रामर को यह सुनिश्चित करना चाहिए कि कैरी फ्लैग हर घटाव ऑपरेशन से पहले सेट किया गया है जहां उधार की आवश्यकता नहीं है।<ref>{{cite journal
  |title=SBC, TSX and TXS instructions of the 6800 and 6502
  |title=SBC, TSX and TXS instructions of the 6800 and 6502
  |first=B.T.G. |last=Tan
  |first=B.T.G. |last=Tan
Line 32: Line 35:
}}</ref>
}}</ref>
{| class="wikitable" style="margin: 0 auto; text-align: center;"
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|+ Summary of different uses of carry flag in subtraction
|+ घटाव में कैरी फ़्लैग के विभिन्न उपयोगों का सारांश
|-
|-
! Carry or<br/>borrow bit
! कैर्री या बोर्रो
! Subtract without<br/>carry/borrow
बिट
! Subtract<br/>with borrow
! घटाएँ बिना <br/>कैर्री /बोर्रो
! Subtract<br/>with carry
! घटाना
बोर्रो के साथ
! घटाना
कैर्री के साथ
|-
|-
! ''C'' = 0
! ''C'' = 0
Line 49: Line 55:
| ''a'' − ''b'' − '''0'''<br/>= ''a'' + not(''b'') + '''1'''
| ''a'' − ''b'' − '''0'''<br/>= ''a'' + not(''b'') + '''1'''
|}
|}
आमतौर पर, पहले विकल्प को उधार के साथ घटाना कहा जाता है, जबकि दूसरे को कैरी के साथ घटाव कहा जाता है। हालाँकि, दोनों दिशाओं में अपवाद हैं; [[VAX]], [[NS320xx]], और [[Atmel AVR]] आर्किटेक्चर उधार बिट कन्वेंशन का उपयोग करते हैं, लेकिन कैरी के साथ उनके a−b−C ऑपरेशन घटाव को कॉल करते हैं (<code>SBWC</code>, <code>SUBC</code> और <code>SBC</code>). [[PA-RISC]] और [[PICmicro]] आर्किटेक्चर कैरी बिट कन्वेंशन का उपयोग करते हैं, लेकिन उनके a+not(b)+C ऑपरेशन को उधार के साथ घटाना कहते हैं (<code>SUBB</code> और <code>SUBWFB</code>).
सामान्यतः, पहले विकल्प को उधार के साथ घटाना कहा जाता है, जबकि दूसरे को कैरी के साथ घटाव कहा जाता है। चूँकि दोनों दिशाओं में अपवाद हैं; [[VAX|वैक्स]], [[NS320xx]], और [[Atmel AVR|एटमेल एवीआर]] आर्किटेक्चर उधार बिट कन्वेंशन का उपयोग करते हैं, किंतु कैरी के साथ उनके a−b−C ऑपरेशन घटाव को कॉल करते हैं (<code>SBWC</code>, <code>SUBC</code> और <code>SBC</code>). [[PA-RISC|पीए-रिस्क]] और [[PICmicro|पीआईसीमाइक्रो]] आर्किटेक्चर कैरी बिट कन्वेंशन का उपयोग करते हैं, किंतु उनके a+not(b)+C ऑपरेशन को उधार के साथ घटाना (<code>SUBB</code> और <code>SUBWFB</code>).कहते हैं


ST6/ST7 8-बिट माइक्रोकंट्रोलर शायद सभी में सबसे अधिक भ्रमित करने वाले हैं। हालाँकि उनके पास कैरी निर्देश के साथ किसी भी प्रकार का घटाव नहीं है, उनके पास एक कैरी बिट है जो घटाव निर्देश द्वारा निर्धारित किया गया है, और कन्वेंशन प्रोसेसर मॉडल पर निर्भर करता है। एसटी60 प्रोसेसर कैरी कन्वेंशन का उपयोग करता है, जबकि एसटी62 और एसटी63 प्रोसेसर उधार कन्वेंशन का उपयोग करते हैं।<ref>{{cite web |title=ST6 Family Programming Manual |version=Revision 2.0 |date=October 2004 |publisher=[[STMicroelectronics]] |url=http://www.st.com/content/ccc/resource/technical/document/programming_manual/4d/05/d1/a5/a0/9e/40/8b/CD00004606.pdf/files/CD00004606.pdf/jcr:content/translations/en.CD00004606.pdf#page=21 |pages=21–22,42 |accessdate=2017-02-28}}</ref>
ST6/ST7 8-बिट माइक्रोकंट्रोलर संभवतः सभी में सबसे अधिक अस्पष्ट करने वाले हैं। चूँकि उनके पास कैरी निर्देश के साथ किसी भी प्रकार का घटाव नहीं है, उनके पास एक कैरी बिट है जो घटाव निर्देश द्वारा निर्धारित किया गया है, और कन्वेंशन प्रोसेसर मॉडल पर निर्भर करता है। एसटी60 प्रोसेसर कैरी कन्वेंशन का उपयोग करता है, जबकि एसटी62 और एसटी63 प्रोसेसर बोर्रो कन्वेंशन का उपयोग करते हैं।<ref>{{cite web |title=ST6 Family Programming Manual |version=Revision 2.0 |date=October 2004 |publisher=[[STMicroelectronics]] |url=http://www.st.com/content/ccc/resource/technical/document/programming_manual/4d/05/d1/a5/a0/9e/40/8b/CD00004606.pdf/files/CD00004606.pdf/jcr:content/translations/en.CD00004606.pdf#page=21 |pages=21–22,42 |accessdate=2017-02-28}}</ref>




==यह भी देखें==
==यह भी देखें==
* [[बाइनरी अंकगणित]]
* [[बाइनरी अंकगणित]]
* [[आधा लहराया हुआ झंडा]]
* [[आधा लहराया हुआ झंडा|आधा कैर्री फ्लैग]]
* स्थिति रजिस्टर
* स्थिति रजिस्टर


Line 66: Line 72:
* [http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt Carry Flag and Overflow Flag in binary arithmetic]
* [http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt Carry Flag and Overflow Flag in binary arithmetic]
* [https://brodowsky.it-sky.net/2013/12/22/carry-bit-how-does-it-work/ Carry Bit: How does it work?]
* [https://brodowsky.it-sky.net/2013/12/22/carry-bit-how-does-it-work/ Carry Bit: How does it work?]
[[Category: कंप्यूटर अंकगणित]]


[[Category: Machine Translated Page]]
[[Category:Created On 10/07/2023]]
[[Category:Created On 10/07/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:कंप्यूटर अंकगणित]]

Latest revision as of 12:00, 26 July 2023


कंप्यूटर प्रोसेसर में कैरी फ़्लैग (सामान्यतः सी फ़्लैग के रूप में दर्शाया जाता है) सिस्टम स्टेटस रजिस्टर/फ़्लैग रजिस्टर में एक एकल बिट होता है, जिसका उपयोग यह निरुपित करने के लिए किया जाता है कि सबसे महत्वपूर्ण अंकगणित तर्क इकाई (एएलयू) बिट से अंकगणित कैरी या उधार कब उत्पन्न हुआ है। पद कैरी फ़्लैग एक अधिक महत्वपूर्ण शब्द की कम से कम महत्वपूर्ण बिट स्थिति में आंशिक जोड़/घटाव से एक बाइनरी अंक ले जाकर (जोड़कर) एकल एएलयू चौड़ाई से बड़ी संख्याओं को जोड़ने/घटाने में सक्षम बनाता है। यह सामान्यतः प्रोसेसर के उपयोगकर्ता द्वारा असेंबली या मशीन कोड स्तर पर प्रोग्राम किया जाता है, किंतु डिजिटल लॉजिक या माइक्रोकोड के माध्यम से कुछ प्रोसेसर में आंतरिक रूप से भी हो सकता है, जहां कुछ प्रोसेसर में (कॉम्बिनेटोरियल, या "भौतिक" की तुलना में व्यापक रजिस्टर और अंकगणितीय निर्देश होते हैं। ) एएलयू.[1] इसका उपयोग बिट शिफ्ट को बढ़ाने और कई प्रोसेसर पर समान विधि से घूमने के लिए भी किया जाता है (कभी-कभी एक समर्पित फ्लैग के माध्यम से किया जाता है)। घटिया संचालन के लिए दो (विपरीत) सम्मेलनों को नियोजित किया जाता है क्योंकि अधिकांश मशीनें उधार पर कैरी फ्लैग सेट करती हैं जबकि कुछ मशीनें (जैसे 6502 और पीआईसी) इसके अतिरिक्त उधार पर कैरी फ्लैग रीसेट करती हैं (और इसके विपरीत)।

उपयोग

कैरी फ़्लैग अधिकांश अंकगणितीय (और सामान्यतः कई बिट वार) निर्देशों के परिणाम से प्रभावित होता है और उनमें से कई के लिए इनपुट के रूप में भी उपयोग किया जाता है। इनमें से कई निर्देशों के दो रूप हैं जो या तो कैरी को पढ़ते हैं या अनदेखा करते हैं। असेंबली भाषाओं में इन निर्देशों को ADD/SUB, ADC/SBC (कैरी सहित ADD/SUB), SHL/SHR (बिट शिफ्ट), ROL/ROR (बिट रोटेट्स), RCR/RCL (कैरी के माध्यम से घुमाएं) जैसे निमोनिक्स द्वारा दर्शाया जाता है।, और इसी अनुसार इस विधि से कैरी फ़्लैग का उपयोग बहु-शब्द जोड़ने, घटाने, शिफ्ट करने और घुमाने के संचालन को सक्षम बनाता है।[2]

एक उदाहरण यह है कि यदि कोई 8 बिट रजिस्टरों का उपयोग करके 255 और 255 जोड़ता है तो क्या होता है। परिणाम 510 होना चाहिए जो कि 9-बिट मान 111111110 है बाइनरी में. रजिस्टर में हमेशा संग्रहीत 8 सबसे कम महत्वपूर्ण बिट्स 11111110 बाइनरी (254 दशमलव) होंगे किंतु चूंकि बिट 7 (आठ बिट) का कैरी आउट है, कैरी सेट है, यह दर्शाता है कि परिणाम को 9 बिट्स की आवश्यकता है। वैध 9-बिट परिणाम परिणाम के साथ कैरी फ़्लैग का संयोजन है।

8 बिट के x86 ALU आकार के लिए, 8-बिट दो की पूरक व्याख्या, अतिरिक्त ऑपरेशन 11111111 + 11111111 का परिणाम 111111110, Carry_Flag तय करना, Sign_Flag सेट, और Overflow_Flag स्पष्ट होता है।

यदि 111111111 दो के पूरक हस्ताक्षरित पूर्णांक -1 (ADD al,-1) को दर्शाता है, तो परिणाम की व्याख्या -2 है क्योंकि ओवरफ़्लो_फ़्लैग स्पष्ट है, और कैरी_फ़्लैग को अनदेखा कर दिया गया है। परिणाम का चिह्न नकारात्मक है, क्योंकि साइन_फ्लैग सेट है। 11111110 हस्ताक्षरित पूर्णांक -2 का दो पूरक रूप है।

यदि 11111111 अहस्ताक्षरित पूर्णांक बाइनरी संख्या 255 (ADD al,255) का प्रतिनिधित्व करता है, तो परिणाम की व्याख्या 254 होगी, जो सही नहीं है, क्योंकि परिणाम का सबसे महत्वपूर्ण बिट Carry_Flag में चला गया, जिसे इसलिए अनदेखा नहीं किया जा सकता है। Overflow_Flag और Sign_Flag को अनदेखा कर दिया जाता है।

एक अन्य उदाहरण बिट पैटर्न के साथ 8-बिट प्रोसेसर रजिस्टर हो सकता है 01010101 और कैरी फ़्लैग सेट; यदि हम कैरी निर्देश के माध्यम से बाईं ओर घुमाएँ, तो परिणाम होगा 10101011 कैरी फ़्लैग को साफ़ कर दिया गया क्योंकि सबसे महत्वपूर्ण बिट (बिट 7) को कैरी में घुमाया गया था जबकि कैरी को सबसे कम महत्वपूर्ण बिट (बिट 0) में घुमाया गया था।

प्रारंभिक माइक्रोप्रोसेसर इंटेल 4004 और इंटेल 8008 में कैरी फ़्लैग को स्पष्ट रूप से सेट करने के साथ-साथ रीसेट करने के लिए विशिष्ट निर्देश थे। चूँकि, बाद के इंटेल 8080 (और Z80) में एक स्पष्ट रीसेट कैरी ऑपकोड सम्मिलित नहीं था क्योंकि यह बिटवाइज़ AND, OR या XOR निर्देशों (जो कैरी फ़्लैग का उपयोग नहीं करते हैं) में से किसी एक के माध्यम से समान रूप से तेज़ी से किया जा सकता था।

कैरी फ़्लैग का उपयोग अधिकांशतः तुलना निर्देशों के बाद भी किया जाता है, जो सामान्यतः घटाव संचालन द्वारा कार्यान्वित किया जाता है, जिससे यह निर्णय लिया जा सकता है कि दोनों में से कौन सा तुलनात्मक मूल्य दूसरे से कम (या अधिक या समान) है। शाखा निर्देश जो कैरी ध्वज की जांच करते हैं, अधिकांशतः BCC और BCS जैसे निमोनिक्स द्वारा दर्शाए जाते हैं यदि कैरी स्पष्ट है, या यदि कैरी क्रमशः सेट है तो शाखा जब इस तरह से उपयोग किया जाता है तो कैरी फ़्लैग मानों को अहस्ताक्षरित पूर्णांक के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है। यह अतिप्रवाह ध्वज के विपरीत है जो मानों को हस्ताक्षरित पूर्णांक मानों के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है।

बनाम बोर्रो फ्लैग

जबकि कैरी फ़्लैग को जोड़ने के लिए अच्छी तरह से परिभाषित किया गया है, घटाव संचालन के लिए कैरी फ़्लैग का उपयोग करने के सामान्यतः दो विधि हैं।

पहला बिट को उधार ध्वज के रूप में उपयोग करता है, इसे सेट करता है यदि a<b गणना करते समय a−b, और एक उधार लिया जाना चाहिए। यदि a≥b, तो बिट साफ़ हो जाता है। उधार (एसबीबी) निर्देश के साथ एक घटाव a−b−C = a−(b+C) की गणना करेगा, जबकि उधार के बिना एक घटाव (SUB) ऐसे कार्य करता है जैसे कि उधार बिट स्पष्ट था। 8080, 6800, Z80, 8051, x86[2] और 68k वर्ग (अन्य के बीच) उधार बिट का उपयोग करते हैं।

दूसरा इस पहचान का उपयोग करता है कि −x = (x नहीं)+1 सीधे (अथार्त कैरी बिट को व्युत्क्रम संग्रहीत किए बिना) और a−b की गणना a+(b नहीं)+1 के रूप में करता है। कैरी फ़्लैग को इस जोड़ के अनुसार सेट किया गया है, और कैरी के साथ घटाना a+not(b)+C की गणना करता है, जबकि कैरी के बिना घटाना ऐसे कार्य करता है मानो कैरी बिट सेट किया गया हो। परिणाम यह है कि यदि a≥b है तो कैरी बिट सेट है, और यदि है तो क्लियर है। सिस्टम/360,[3] 6502, एमएसपी430, सीओपी8, एआरएम और पावरपीसी प्रोसेसर इस कन्वेंशन का उपयोग करते हैं। 6502 एक विशेष रूप से प्रसिद्ध उदाहरण है क्योंकि इसमें कैरी ऑपरेशन के बिना घटाव नहीं होता है, इसलिए प्रोग्रामर को यह सुनिश्चित करना चाहिए कि कैरी फ्लैग हर घटाव ऑपरेशन से पहले सेट किया गया है जहां उधार की आवश्यकता नहीं है।[4]

घटाव में कैरी फ़्लैग के विभिन्न उपयोगों का सारांश
कैर्री या बोर्रो

बिट

घटाएँ बिना
कैर्री /बोर्रो
घटाना

बोर्रो के साथ

घटाना

कैर्री के साथ

C = 0 ab
= a + not(b) + 1
ab0
= a + not(b) + 1
ab1
= a + not(b) + 0
C = 1 ab1
= a + not(b) + 0
ab0
= a + not(b) + 1

सामान्यतः, पहले विकल्प को उधार के साथ घटाना कहा जाता है, जबकि दूसरे को कैरी के साथ घटाव कहा जाता है। चूँकि दोनों दिशाओं में अपवाद हैं; वैक्स, NS320xx, और एटमेल एवीआर आर्किटेक्चर उधार बिट कन्वेंशन का उपयोग करते हैं, किंतु कैरी के साथ उनके a−b−C ऑपरेशन घटाव को कॉल करते हैं (SBWC, SUBC और SBC). पीए-रिस्क और पीआईसीमाइक्रो आर्किटेक्चर कैरी बिट कन्वेंशन का उपयोग करते हैं, किंतु उनके a+not(b)+C ऑपरेशन को उधार के साथ घटाना (SUBB और SUBWFB).कहते हैं

ST6/ST7 8-बिट माइक्रोकंट्रोलर संभवतः सभी में सबसे अधिक अस्पष्ट करने वाले हैं। चूँकि उनके पास कैरी निर्देश के साथ किसी भी प्रकार का घटाव नहीं है, उनके पास एक कैरी बिट है जो घटाव निर्देश द्वारा निर्धारित किया गया है, और कन्वेंशन प्रोसेसर मॉडल पर निर्भर करता है। एसटी60 प्रोसेसर कैरी कन्वेंशन का उपयोग करता है, जबकि एसटी62 और एसटी63 प्रोसेसर बोर्रो कन्वेंशन का उपयोग करते हैं।[5]


यह भी देखें

संदर्भ

  1. The well known Z80 and 68000 are examples of such CPUs, among many others.
  2. 2.0 2.1 "Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual" (PDF). Retrieved 2007-10-25.
  3. IBM System/360 Principles of Operation (PDF). p. 28. IBM Form A22-6821-0.
  4. Tan, B.T.G. (May 1983). "SBC, TSX and TXS instructions of the 6800 and 6502" (PDF). Dr. Dobb's Journal (79): 67–68.
  5. "ST6 Family Programming Manual" (PDF). Revision 2.0. STMicroelectronics. October 2004. pp. 21–22, 42. Retrieved 2017-02-28.


बाहरी संबंध