2011-11-07 14 views
6

मैं 8086 निर्देश सेट के साथ और आसपास पढ़ रहा हूं, यह कहता है कि एक सीएमपी (तुलना) कैरी फ्लैग सेट कर सकता है। मैं समझता हूं कि तुलना दो ऑपरेटरों को घटा देती है लेकिन मैं सोच रहा था कि अगर कोई मामला है तो कोई उदाहरण दे सकता है।सीएमपी (तुलना) कभी-कभी 8086 असेंबली में कैरी फ्लैग क्यों सेट करता है?

मैं सिर्फ एक संख्या जोड़ने का विचार नहीं समझ सकता और एक नकारात्मक संख्या वाह ध्वज सेट करेगा। मैंने उधार झंडा में पढ़ा है लेकिन मुझे तुलना निर्देश की मेरी समझ को स्पष्ट करने के लिए बस एक उदाहरण की आवश्यकता है।

इसके अलावा, मैं समझता हूं कि यदि 3 - 5 = -2 नकारात्मक ध्वज सेट करेगा ... कब सेट किया जाता है?

+0

कथन "मुझे एक उदाहरण बनाने की आवश्यकता है" यह आवाज होमवर्क की तरह बनाता है। यदि आप बस कुछ मौजूदा कोड से डीबग करते हैं, और सीवाई ध्वज देखते हैं, तो मुझे यकीन है कि आप इसे कुछ एडीडी निर्देशों के बाद सेट करेंगे। –

+0

वैसे मैं अपना खुद का निर्देश सेट आर्किटेक्चर बना रहा हूं और मैं बस 8086 निर्देशों पर पढ़ रहा हूं और सोच रहा हूं कि तुलना (जो 2 ऑपरेंड घटाती है और संबंधित झंडे सेट करती है) कैरी फ्लैग सेट कर सकती है।मुझे पता है कि जब एडीडी कैरी सेट करता है, लेकिन मैं घटता/ले जाने पर थोड़ा सा संदेह करता हूं (उधार के साथ उलझन में नहीं)। 8086 (और कई अन्य) पर – faul

+0

, ले जाने वाला ध्वज डबल ड्यूटी करता है और उतार-चढ़ाव में उधार का प्रतिनिधित्व करता है या संचालन की तुलना करता है। यदि आप तुलना करते हैं जहां मूल्य की तुलना की जा रही है, तो रजिस्टर में क्या है, वहां एक उधार है, उदाहरण के लिए, सीवाई ध्वज सेट किया गया है। यदि मूल्य रजिस्टर से समान या छोटा है, तो कोई उधार नहीं है, और सीवाई को मंजूरी दे दी गई है। – JustJeff

उत्तर

4
  • लेयर ध्वज एक ऑपरेशन के बाद सेट किया गया है जिसके परिणामस्वरूप अंडरफ्लो या ओवरफ़्लो होता है। उदाहरण के लिए, 6 से 10 को घटाना परिणामस्वरूप अंडरफ्लो होगा और लेयर फ्लैग सेट करेगा। इसी प्रकार, रजिस्टर के अधिकतम मूल्य में 1 जोड़ना परिणामस्वरूप ओवरफ्लो होगा और कैरे फ्लैग सेट करेगा।
  • लेयर फ्लैग को शिफ्ट ऑपरेशन के दौरान भी संशोधित किया जाता है, यह गंतव्य रजिस्टर से बाहर की गई अंतिम बिट के मूल्य पर सेट किया गया है।
  • बिट परीक्षण परीक्षण किए गए बिट का मान ध्वज में रखेगा। ओपोड्स जो ऐसा करते हैं: बीटी, बीटीसी, बीटीआर, और बीटीएस।
  • सीधे कैरी फ्लैग को प्रभावित करने वाले निर्देश: सीएलसी, सीएमसी, और एसटीसी।
  • तुलना के दौरान, लेयर ध्वज सेट किया गया है जैसे कि दो ऑपरेंड घटाए गए थे।
  • एक अस्वीकृति (एनईजी) के दौरान, लेयर ध्वज सेट किया जाता है जब तक कि ऑपरेंड शून्य न हो, जिस स्थिति में इसे साफ़ किया जाता है।
2

हस्ताक्षर किए गए अंकगणित का उपयोग करते समय आमतौर पर कैरी ध्वज सेट किया जाता है। उदाहरण के लिए, दो हस्ताक्षरित जोड़ना (जिसका परिणाम रजिस्टर में फिट नहीं है) संख्याएं अतिप्रवाह ध्वज नहीं बढ़ाएंगी बल्कि केवल ध्वज लेती हैं। हालांकि, हस्ताक्षर किए गए अंकगणित का उपयोग करते समय, इस तरह की घटना में अतिप्रवाह ध्वज सेट किया जाता है।

1

आप उदाहरण प्राप्त कर सकते हैं कि कैरी और ओवरफ्लो झंडे 0 और 1 के बाद सेट किए गए हैं या this answer में एक पूर्ण प्रश्न में पूर्णांक संख्याओं के घटाव के उदाहरण हैं।
आप 8-बिट संख्याओं के लिए उधार निर्देशों के साथ ले जाने और घटाने के साथ अनुकरण करने वाले नमूना सी कोड भी देख सकते हैं और आप इसके साथ खेल सकते हैं, शायद अधिक उदाहरण प्राप्त करें।
127(127) - 255( -1) - 1 = 127(127) CY=1 OV=0
कहाँ प्रत्येक संख्या दोनों अहस्ताक्षरित के रूप में प्रस्तुत किया जाता है और हस्ताक्षर किए parenthesized (2 के पूरक) उसके आगे वाला:

उत्पादन प्रारूप वहाँ कुछ इस तरह है। = से पहले की संख्या एडीसी/एसबीबी से पहले ले जाने वाला ध्वज है। CY= और OV= एडीसी/एसबीबी के बाद कैरी और ओवरफ्लो झंडे दिखाएं।

तुलना बिना उधार के घटाने के समान ही चीज करता है, सिवाय इसके कि यह केवल रजिस्टर, ओवरफ्लो, साइन और शून्य झंडे (और समानता और सहायक वाहक को प्रभावित करता है, लेकिन वे यहां महत्वहीन हैं) पंजीकरण में किसी भी संख्या को संशोधित किए बिना /याद।

संबंधित मुद्दे