कैरी फ़्लैग
This article relies excessively on references to primary sources. (December 2018) (Learn how and when to remove this template message) |
कंप्यूटर प्रोसेसर में कैरी फ़्लैग (आमतौर पर सी फ़्लैग के रूप में दर्शाया जाता है) सिस्टम स्थिति रजिस्टर /फ़्लैग रजिस्टर में एक एकल अंश होता है, जिसका उपयोग यह इंगित करने के लिए किया जाता है कि सबसे महत्वपूर्ण बिट [[अंकगणितीय तर्क इकाई]] से अंकगणित कैरी (अंकगणित) या उधार कब उत्पन्न हुआ है (ALU) बिट स्थिति. कैरी फ़्लैग एक अधिक महत्वपूर्ण शब्द की कम से कम महत्वपूर्ण बिट स्थिति में आंशिक जोड़/घटाव से एक बाइनरी अंक ले जाकर (जोड़कर) एकल ALU चौड़ाई से बड़ी संख्याओं को जोड़ने/घटाने में सक्षम बनाता है। यह आम तौर पर प्रोसेसर के उपयोगकर्ता द्वारा असेंबली या मशीन कोड स्तर पर प्रोग्राम किया जाता है, लेकिन डिजिटल तर्क या माइक्रोकोड के माध्यम से कुछ प्रोसेसर में आंतरिक रूप से भी हो सकता है, जहां कुछ प्रोसेसर में (कॉम्बिनेटोरियल, या भौतिक) ALU की तुलना में व्यापक रजिस्टर और अंकगणितीय निर्देश होते हैं। .[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
साफ़।
अगर 11111111
दो के पूरक हस्ताक्षरित पूर्णांक -1 को दर्शाता है (ADD al,-1
), तो परिणाम की व्याख्या -2 है क्योंकि Overflow_Flag
स्पष्ट है, और Carry_Flag
नजरअंदाज कर दिया जाता है. परिणाम का चिह्न ऋणात्मक है, क्योंकि Sign_Flag
सेट है. 11111110
हस्ताक्षरित पूर्णांक -2 का दोनों का पूरक रूप है।
अगर 11111111
अहस्ताक्षरित पूर्णांक बाइनरी संख्या 255 का प्रतिनिधित्व करता है (ADD al,255
), तो परिणाम की व्याख्या 254 होगी, जो सही नहीं है, क्योंकि परिणाम का सबसे महत्वपूर्ण हिस्सा इसमें चला गया Carry_Flag
, इसलिए इसे नजरअंदाज नहीं किया जा सकता। Overflow_Flag
ई> और Sign_Flag
नजरअंदाज कर दिया जाता है.
एक अन्य उदाहरण बिट पैटर्न के साथ 8-बिट प्रोसेसर रजिस्टर हो सकता है 01010101
और कैरी फ़्लैग सेट; यदि हम कैरी निर्देश के माध्यम से बाईं ओर घुमाएँ, तो परिणाम होगा 10101011
कैरी फ़्लैग को साफ़ कर दिया गया क्योंकि सबसे महत्वपूर्ण बिट (बिट 7) को कैरी में घुमाया गया था जबकि कैरी को सबसे कम महत्वपूर्ण बिट (बिट 0) में घुमाया गया था।
प्रारंभिक माइक्रोप्रोसेसर Intel 4004 और Intel 8008 में कैरी फ़्लैग को स्पष्ट रूप से सेट करने के साथ-साथ रीसेट करने के लिए विशिष्ट निर्देश थे। हालाँकि, बाद के Intel 8080 (और Z80) में एक स्पष्ट रीसेट कैरी ऑपकोड शामिल नहीं था क्योंकि यह बिटवाइज़ AND, OR या XOR निर्देशों (जो कैरी फ़्लैग का उपयोग नहीं करते हैं) में से किसी एक के माध्यम से समान रूप से तेज़ी से किया जा सकता था।
कैरी फ़्लैग का उपयोग अक्सर तुलना निर्देशों के बाद भी किया जाता है, जो आमतौर पर घटाव संचालन द्वारा कार्यान्वित किया जाता है, ताकि यह निर्णय लिया जा सके कि दोनों में से कौन सा तुलनात्मक मूल्य दूसरे से कम (या अधिक या बराबर) है। शाखा निर्देश जो कैरी फ़्लैग की जांच करते हैं, उन्हें अक्सर असेंबली भाषा#ओपकोड निमोनिक्स और विस्तारित निमोनिक्स जैसे द्वारा दर्शाया जाता है BCC
और BCS
यदि कैरी साफ़ है तो शाखा में जाएँ, या यदि कैरी क्रमशः सेट है तो शाखा में जाएँ। जब इस तरह से उपयोग किया जाता है तो कैरी फ़्लैग मानों को अहस्ताक्षरित पूर्णांक के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है। यह अतिप्रवाह ध्वज के विपरीत है जो मानों को हस्ताक्षरित पूर्णांक मानों के रूप में तुलना करने के लिए एक तंत्र प्रदान करता है।
बनाम उधार झंडा
This section needs additional citations for verification. (July 2015) (Learn how and when to remove this template message) |
जबकि कैरी फ़्लैग को जोड़ने के लिए अच्छी तरह से परिभाषित किया गया है, घटाव संचालन के लिए कैरी फ़्लैग का उपयोग करने के आम तौर पर दो तरीके हैं।
पहला बिट को उधार ध्वज के रूप में उपयोग करता है, इसे सेट करता है यदि a<b गणना करते समय a−b, और एक उधार लिया जाना चाहिए। यदि a≥b, तो बिट साफ़ हो जाता है। एक 'उधार के साथ घटाना' (SBB
) निर्देश a−b−C = a−(b+C) की गणना करेगा, जबकि उधार के बिना घटाव (SUB
) ऐसा कार्य करता है मानो उधार बिट स्पष्ट हो। 8080, मोटोरोला 6800, Z80, इंटेल MCS-51, x86[2]और 68 हजार परिवार (अन्य लोगों के बीच) उधार बिट का उपयोग करते हैं।
दूसरा इस पहचान का उपयोग करता है कि −x = (बिटवाइज़ नहीं x)+1 सीधे (यानी कैरी बिट को उल्टा संग्रहीत किए बिना) और a−b की गणना a+(b नहीं)+1 के रूप में करता है। कैरी फ़्लैग को इस जोड़ के अनुसार सेट किया गया है, और 'कैरी के साथ घटाना' a+not(b)+C की गणना करता है, जबकि कैरी के बिना घटाना ऐसे कार्य करता है मानो कैरी बिट सेट किया गया हो। नतीजा यह है कि यदि a≥b है तो कैरी बिट सेट है, और यदि a<b है तो क्लियर है। सिस्टम/360,[3] एमओएस टेक्नोलॉजी 6502, एमएसपी430, सीओपी8, एआरएम वास्तुकला और पावरपीसी प्रोसेसर इस कन्वेंशन का उपयोग करते हैं। 6502 एक विशेष रूप से प्रसिद्ध उदाहरण है क्योंकि इसमें कैरी ऑपरेशन के बिना घटाव नहीं होता है, इसलिए प्रोग्रामर को यह सुनिश्चित करना होगा कि कैरी फ्लैग हर घटाव ऑपरेशन से पहले सेट किया गया है जहां उधार की आवश्यकता नहीं है।[4]
Carry or borrow bit |
Subtract without carry/borrow |
Subtract with borrow |
Subtract with carry |
---|---|---|---|
C = 0 | a − b = a + not(b) + 1 |
a − b − 0 = a + not(b) + 1 |
a − b − 1 = a + not(b) + 0 |
C = 1 | a − b − 1 = a + not(b) + 0 |
a − b − 0 = a + not(b) + 1 |
आमतौर पर, पहले विकल्प को उधार के साथ घटाना कहा जाता है, जबकि दूसरे को कैरी के साथ घटाव कहा जाता है। हालाँकि, दोनों दिशाओं में अपवाद हैं; VAX, NS320xx, और Atmel AVR आर्किटेक्चर उधार बिट कन्वेंशन का उपयोग करते हैं, लेकिन कैरी के साथ उनके a−b−C ऑपरेशन घटाव को कॉल करते हैं (SBWC
, SUBC
और SBC
). PA-RISC और PICmicro आर्किटेक्चर कैरी बिट कन्वेंशन का उपयोग करते हैं, लेकिन उनके a+not(b)+C ऑपरेशन को उधार के साथ घटाना कहते हैं (SUBB
और SUBWFB
).
ST6/ST7 8-बिट माइक्रोकंट्रोलर शायद सभी में सबसे अधिक भ्रमित करने वाले हैं। हालाँकि उनके पास कैरी निर्देश के साथ किसी भी प्रकार का घटाव नहीं है, उनके पास एक कैरी बिट है जो घटाव निर्देश द्वारा निर्धारित किया गया है, और कन्वेंशन प्रोसेसर मॉडल पर निर्भर करता है। एसटी60 प्रोसेसर कैरी कन्वेंशन का उपयोग करता है, जबकि एसटी62 और एसटी63 प्रोसेसर उधार कन्वेंशन का उपयोग करते हैं।[5]
यह भी देखें
- बाइनरी अंकगणित
- आधा लहराया हुआ झंडा
- स्थिति रजिस्टर
संदर्भ
- ↑ The well known Z80 and 68000 are examples of such CPUs, among many others.
- ↑ 2.0 2.1 "Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual" (PDF). Retrieved 2007-10-25.
- ↑ IBM System/360 Principles of Operation (PDF). p. 28. IBM Form A22-6821-0.
- ↑ Tan, B.T.G. (May 1983). "SBC, TSX and TXS instructions of the 6800 and 6502" (PDF). Dr. Dobb's Journal (79): 67–68.
- ↑ "ST6 Family Programming Manual" (PDF). Revision 2.0. STMicroelectronics. October 2004. pp. 21–22, 42. Retrieved 2017-02-28.