boolean logic - accessing assembly condition code -


सीएफ़: कैर्री फ़्लैग

जेडएफ: शून्य फ़्लैग < / Strong>

मैं वर्तमान में एटी एंड टी सिंटैक्स का उपयोग करते हुए लिनक्स मंच पर इंटेल एक्स 86 विधानसभा पर एक किताब पढ़ रहा हूं और पुस्तक ने कहा है कि सेटबे डी का प्रभाव क्यूईवलेंट है :

डी & larr; सीएफ़ & amp;

मजबूत> | जेडएफ

यह केवल ~ जेडएफ एंड सीएफ से भिन्न होता है जब सीएफ / जेडएफ या तो 1/1 या 1 / 0. होता है जो एक और अधिक सटीक है?

सेटेबी परिणाम को सेट करता है 1 अगर (ZF = 1) या ( सीएफ = 1) । यदि आप पढ़ रहे दस्तावेज कहते हैं कि यह इसे (ZF = 0) और (सीएफ = 1) पर सेट करता है, तो यह गलत है देखें। नीचे एक विस्तृत विश्लेषण किया गया है:

सेटबे परिणाम को पहले सेट करता है यदि पूर्ववर्ती तुलना के परिणाम b elow-or- योग्य, जब अहस्ताक्षरित पूर्णांक के साथ तुलना की जाती है (हस्ताक्षरित पूर्णांक के समतुल्य <<> < एल ess-or- के लिए setle होगा )।

जब cmp निर्देश किया जाता है, तो गंतव्य संचालन को स्रोत ऑपरेंड से घटाया जाता है, और परिणाम को त्याग दिया जाता है। केवल आउटपुट हालत झंडे की सेटिंग है याद रखें कि जब हम दो संख्यों को घटाते हैं तो AB , हम वास्तव में A + (~ B) +1 दो पूरक में जोड़ते हैं, जहां ~ B है बी में से एक के पूरक (यानी सभी बिट्स रूप से फ़्लिप कर रहे हैं)

के 6 मामलों पर नजर डालते हैं:

 प्रकरण 0:। की तुलना करें 1 0 0 करने के लिए - 1 = 0 + 1 + 1 = 0x00000000 + 0xfffffffe + 1 = 0xffffffff ≠ 0, कोई कैरी नहीं ==> जेडएफ = 0, सीएफ = 0 मामला 1: 0 से 0 0 - 0 = 0 + ~ 0 + 1 = 0x00000000 की तुलना करें + 0xffffffff + 1 = 0x00000000 = 0, ले जाने के साथ ==> जेडएफ = 1, सीएफ = 0 प्रकरण 2: 0 से 1 1 की तुलना करें - 0 = 1 + ~ 0 + 1 = 0x00000001 + 0xffffffff + 1 = 0x00000001 ≠ 0, के साथ सीएफ = 1 केस 3: यूआईएनटीएमएक्स से 0 0 - 4294967295 = 0 + 4294967295 + 1 = 0x00000000 + 0x00000000 + 1 = 0x00000001 ≠ 0, कोई कैरी ==> जेडएफ = 0, सीएफ = 0 प्रकरण 4: 0 तुलना करें UINT_MAX 4294967295 के लिए - 0 = 4294967295 + ~ 0 + 1 = 0xffffffff + 0xffffffff + 1 = 0xffffffff ≠ 0, कैरी के साथ ==> जेडएफ = 0, सीएफ = 1 प्रकरण 5: की तुलना करें यूआई 4294967295 = 4294967295 + ~ 4294967295 + 1 = 0xffffffff + 0x00000000 + 1 = 0x00000000 = 0, कैरी के साथ ==> जेडएफ = 1, सीएफ = 1 

जिन मामलों में पहला तर्क - NT_MAX 4294967295 UINT_MAX को दूसरे के लिए नीचे-बराबर या है मामलों 1, 2, 4 हैं, और 5. इन सभी के लिए (जेडएफ = 1) या संतुष्ट (सीएफ = 1) , और शेष मामलों में तुलना झूठ विपरीत स्थिति को संतुष्ट करती है, (ZF = 0) और (सीएफ = 0) । ध्यान दें कि हमने सीएफ और जेडएफ के सभी संभव संयोजनों को भी आकलन किया है। इसलिए, हम निष्कर्ष है कि setbe के लिए सही व्यवहार (जेडएफ = 1) या (सीएफ = 1) पर स्थापित करने के लिए है।


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -