2011-08-31 17 views
11

मैं थोड़ी देर के लिए असेंबली के साथ खेल रहा हूं और कुछ कोड देख रहा हूं। जिसमें AL को पहले 0x84 पर सेट किया गया है, तो cmp AL, 0x30 का उपयोग किया जाता है। यह निर्देश तब ओवरफ़्लो ध्वज को ट्रिगर करता है।क्यों cmp 0x84,0x30 अतिप्रवाह ध्वज ट्रिगर करता है?

जो मैंने पढ़ा है उससे सीएमपी पहले से दूसरे नंबर को घटाना है, फिर झंडे सेट करें, उस स्थिति में यह 0x84-0x30 होना चाहिए परिणाम 0x54 है और कोई ओवरफ़्लो नहीं है।

उत्तर

18

केवल कोई अतिप्रवाह नहीं है अगर आप अहस्ताक्षरित संख्या के रूप में उन मूल्यों की व्याख्या कर रहे हैं - अगर आप की व्याख्या अपने 0x84 के रूप में हस्ताक्षर किए, वहाँ निश्चित रूप से अतिप्रवाह है:

  1. 0x84 एक हस्ताक्षरित 8 बिट मूल्य के रूप में व्याख्या -124
  2. है 48 = -172

-172 एक हस्ताक्षरित 8 बिट मूल्य की सीमा के बाहर (127 करने के लिए -128) है -

  • 0x30 एक हस्ताक्षरित 8 बिट मूल्य के रूप में व्याख्या 48
  • -124 है और टी टोपी क्यों OF ध्वज सेट हो जाता है। आपको CF जांचना चाहिए जो हस्ताक्षरित अतिप्रवाह इंगित करता है।

    Intel 64 and IA-32 Architectures Software Developer’s Manual से

    , खंड 2 सीएमपी के लिए:

    तुलना पहले संकार्य से दूसरे संकार्य घटाकर और फिर उप शिक्षा के रूप में एक ही तरीके से स्थिति निशानी लगाने के द्वारा किया जाता है।

    और उप के लिए:

    उप शिक्षा पूर्णांक घटाव प्रदर्शन करती है। यह हस्ताक्षरित और हस्ताक्षरित पूर्णांक ऑपरेटरों दोनों के परिणाम का मूल्यांकन करता है और क्रमशः हस्ताक्षरित या हस्ताक्षरित परिणाम में ओवरफ़्लो इंगित करने के लिए OF और CF फ़्लैग सेट करता है। एसएफ ध्वज हस्ताक्षरित परिणाम के संकेत को इंगित करता है।

  • +0

    कार्ल सही है। X86 ओवरफ्लो ध्वज का अर्थ वास्तव में * हस्ताक्षरित अतिप्रवाह * है। – wallyk

    +0

    बहुत अच्छा जवाब। – phoxis

    +0

    आपके उत्तर के लिए बहुत बहुत धन्यवाद! – Maciek

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