2017-06-30 8 views
6

इंटेल सॉफ्टवेयर विकास मैनुअल neg अनुदेश के बारे में इस का कहना है:एनईजी निर्देश x86 पर एडजस्ट फ्लैग (एएफ) कैसे सेट करता है?

सीएफ झंडा 0 पर सेट है, तो स्रोत संकार्य 0 है; अन्यथा यह 1 पर सेट है। ओएफ, एसएफ, जेडएफ, एएफ, और पीएफ झंडे परिणाम के अनुसार सेट हैं।

यह स्पष्ट है कि परिणामस्वरूप एसएफ, जेडएफ और पीएफ सेटिंग का मतलब है, और मुझे लगता है कि छोटे नकारात्मक संख्या को अस्वीकार करने का प्रयास करते समय ऑफ सेट किया गया है। लेकिन एएफ के बारे में क्या?

मैंने सोचा कि एएफ सेट किया जाएगा जैसे neg %eaxnot %eax + add $1, %eax द्वारा प्रतिस्थापित किया गया था। लेकिन नहीं। वास्तविक CPU सेट एएफ पर 0x6ffffef5 को नकारात्मक करना, भले ही 1 से 0x9000010a जोड़ना एएफ सेट नहीं करता है।

xor %ecx, %ecx 
sub %eax, %ecx 

:

उत्तर

5

neg सेट क्या आप 0.

निर्देश का यह क्रम से एक sub साथ मिल चाहते हैं, उसके हूबहू सभी झंडे (वायुसेना सहित) तथा इससे neg %eax करने के लिए सभी झंडे सेट इंटेल का दस्तावेज वास्तव में यह निर्दिष्ट करता है, लेकिन छद्म कोड ऑपरेशन अनुभाग में नहीं है या neg के लिए निर्देश-सेट संदर्भ (वॉल्यूम 2) प्रविष्टि के ध्वज प्रभावित प्रभावित खंड में नहीं है।

the Description section for neg का मूल पाठ इस डला शामिल हैं:

7.3.2.4 तुलना:

इस आपरेशन 0.

से संकार्य घटाकर करने और Volume 1 में बराबर है और साइन चेंज निर्देश

[सीएमपी के बारे में एक पैराग्राफ]

एनईजी (नकारात्मक) निर्देश शून्य से हस्ताक्षरित पूर्णांक ऑपरेंड को घटाता है।

इस दस्तावेज़ के अस्तित्व a comment on an earlier duplicate of this question जो के रूप में सीधे शब्दों में नहीं किया गया है द्वारा बताया गया।

मुझे नहीं पता था कि वॉल्यूम 1 में निर्देशों को समझाते हुए एक संपूर्ण अनुभाग था। यह पता चला है कि व्यक्तिगत निर्देशों के बारे में इंटेल को जो भी कहना है, वो वॉल्यूम 2 ​​इंसिन सेट संदर्भ में नहीं है।


कुछ सबूत है कि neg इंटेल CPUs पर एक sub अनुदेश के रूप में ही UOP के लिए आंतरिक रूप से डीकोड नहीं है। (उदाहरण के लिए neg [mem] एएलयू सेशन के साथ लोड को माइक्रो-फ्यूज कर सकता है, साथ ही स्टोर-एड्रेस और स्टोर-डेटा यूपीएस को माइक्रो-फ्यूज कर सकता है। inc [mem] केवल स्टोर को माइक्रो-फ्यूज कर सकता है, इसलिए यह 3 कुल फ़्यूज्ड-डोमेन यूओएस है)।

+1

मैंने कोशिश की है और ऐसा लगता है कि यह काम करता है। – tbodt

+0

@tbodt: अच्छा, मेरे सिद्धांत का परीक्षण करने के लिए धन्यवाद। –

+0

* "कुछ सबूत हैं कि इंटेल सीपीयू पर एक उप निर्देश के रूप में आंतरिक रूप से एक ही यूओपी को नकारात्मक डीकोड करता है।" * दिलचस्प ... यह [जिस व्यवहार से मैंने हाल ही में सवाल किया] [https://stackoverflow.com/questions/44330079/why- करता है-इंटेल-कंपाइलर-प्राथमिक-negadd-over-sub) और भी आश्चर्यजनक। यदि 'neg' को' sub' के रूप में आंतरिक रूप से डीकोड किया गया है, तो 'उप'' पर 'neg' +' add' में संभवतः कोई लाभ नहीं हो सकता है। शायद मुझे आधिकारिक तौर पर इसे एक बग के रूप में रिपोर्ट करनी चाहिए। क्या इंटेल के पास कोई समस्या ट्रैकर है? –

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