कैरी फ़्लैग

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

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

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

8 बिट के x86 ALU आकार के लिए, 8-बिट दो की पूरक व्याख्या, अतिरिक्त ऑपरेशन  +   का परिणाम ,   तय करना,   सेट, और   साफ़।

अगर  दो के पूरक हस्ताक्षरित पूर्णांक -1 को दर्शाता है, तो परिणाम की व्याख्या -2 है क्योंकि   स्पष्ट है, और   नजरअंदाज कर दिया जाता है. परिणाम का चिह्न ऋणात्मक है, क्योंकि  सेट है. हस्ताक्षरित पूर्णांक -2 का दोनों का पूरक रूप है।

अगर  अहस्ताक्षरित पूर्णांक बाइनरी संख्या 255 का प्रतिनिधित्व करता है, तो परिणाम की व्याख्या 254 होगी, जो सही नहीं है, क्योंकि परिणाम का सबसे महत्वपूर्ण हिस्सा इसमें चला गया  , इसलिए इसे नजरअंदाज नहीं किया जा सकता।   ई> और   नजरअंदाज कर दिया जाता है.

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

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

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

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

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

दूसरा इस पहचान का उपयोग करता है कि −x = (बिटवाइज़ नहीं x)+1 सीधे (यानी कैरी बिट को उल्टा संग्रहीत किए बिना) और a−b की गणना a+(b नहीं)+1 के रूप में करता है। कैरी फ़्लैग को इस जोड़ के अनुसार सेट किया गया है, और 'कैरी के साथ घटाना' a+not(b)+C की गणना करता है, जबकि कैरी के बिना घटाना ऐसे कार्य करता है मानो कैरी बिट सेट किया गया हो। नतीजा यह है कि यदि a≥b है तो कैरी बिट सेट है, और यदि a<b है तो क्लियर है। सिस्टम/360, एमओएस टेक्नोलॉजी 6502, एमएसपी430, सीओपी8, एआरएम वास्तुकला और पावरपीसी प्रोसेसर इस कन्वेंशन का उपयोग करते हैं। 6502 एक विशेष रूप से प्रसिद्ध उदाहरण है क्योंकि इसमें कैरी ऑपरेशन के बिना घटाव नहीं होता है, इसलिए प्रोग्रामर को यह सुनिश्चित करना होगा कि कैरी फ्लैग हर घटाव ऑपरेशन से पहले सेट किया गया है जहां उधार की आवश्यकता नहीं है। आमतौर पर, पहले विकल्प को उधार के साथ घटाना कहा जाता है, जबकि दूसरे को कैरी के साथ घटाव कहा जाता है। हालाँकि, दोनों दिशाओं में अपवाद हैं; VAX, NS320xx, और Atmel AVR आर्किटेक्चर उधार बिट कन्वेंशन का उपयोग करते हैं, लेकिन कैरी के साथ उनके a−b−C ऑपरेशन घटाव को कॉल करते हैं (,  और  ). PA-RISC और PICmicro आर्किटेक्चर कैरी बिट कन्वेंशन का उपयोग करते हैं, लेकिन उनके a+not(b)+C ऑपरेशन को उधार के साथ घटाना कहते हैं ( और  ).

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

यह भी देखें

 * बाइनरी अंकगणित
 * आधा लहराया हुआ झंडा
 * स्थिति रजिस्टर

बाहरी संबंध

 * Carry Flag and Overflow Flag in binary arithmetic
 * Carry Bit: How does it work?