कैरी फ़्लैग
कंप्यूटर प्रोसेसर में कैरी फ़्लैग (सामान्यतः सी फ़्लैग के रूप में दर्शाया जाता है) सिस्टम स्टेटस रजिस्टर/फ़्लैग रजिस्टर में एक एकल बिट होता है, जिसका उपयोग यह निरुपित करने के लिए किया जाता है कि सबसे महत्वपूर्ण अंकगणित तर्क इकाई (एएलयू) बिट से अंकगणित कैरी या उधार कब उत्पन्न हुआ है। पद कैरी फ़्लैग एक अधिक महत्वपूर्ण शब्द की कम से कम महत्वपूर्ण बिट स्थिति में आंशिक जोड़/घटाव से एक बाइनरी अंक ले जाकर (जोड़कर) एकल एएलयू चौड़ाई से बड़ी संख्याओं को जोड़ने/घटाने में सक्षम बनाता है। यह सामान्यतः प्रोसेसर के उपयोगकर्ता द्वारा असेंबली या मशीन कोड स्तर पर प्रोग्राम किया जाता है, किंतु डिजिटल लॉजिक या माइक्रोकोड के माध्यम से कुछ प्रोसेसर में आंतरिक रूप से भी हो सकता है, जहां कुछ प्रोसेसर में (कॉम्बिनेटोरियल, या "भौतिक" की तुलना में व्यापक रजिस्टर और अंकगणितीय निर्देश होते हैं। ) एएलयू.[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 | 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 |
सामान्यतः, पहले विकल्प को उधार के साथ घटाना कहा जाता है, जबकि दूसरे को कैरी के साथ घटाव कहा जाता है। चूँकि दोनों दिशाओं में अपवाद हैं; वैक्स, NS320xx, और एटमेल एवीआर आर्किटेक्चर उधार बिट कन्वेंशन का उपयोग करते हैं, किंतु कैरी के साथ उनके a−b−C ऑपरेशन घटाव को कॉल करते हैं (SBWC
, SUBC
और SBC
). पीए-रिस्क और पीआईसीमाइक्रो आर्किटेक्चर कैरी बिट कन्वेंशन का उपयोग करते हैं, किंतु उनके 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.