or eax,eax
और test eax,eax
के बीच क्या अंतर है? मैंने देखा है विभिन्न compilers एक ही तुलना के लिए दोनों का उत्पादन और प्रलेखन वे बिल्कुल वही बात करते हैं, तो मैं सोच रहा हूँ क्यों वे नहीं है सब test eax,eax
का उपयोग हो जाता है जहाँ तक। यह and eax,eax
के बारे में सोच या तो के रूप में एक समान फैशन में झंडे स्थापित करेगा लेकिन मैं इसे या तो FreePascal, डेल्फी, या MSVC++ में नहीं देखा है।अंतर
मैंने डेल्फी में कुछ एएसएम ब्लॉक संकलित किए और असेंबलर स्रोत की जांच की और सभी 3 रूप ओपकों में सटीक समान लंबाई हैं और इंटेल प्रदर्शन पीडीएफ की भी जांच की है और यह कहता है कि उनके पास समान विलंबता और थ्रूपुट है।
संपादित करें:
सवाल विशिष्ट मामलों test eax,eax
, or eax,eax
और and eax,eax
बीच अंतर के बारे में विशेष रूप है। सभी 3 रजिस्टरों, झंडे, ओपोड लंबाई, विलंबता, थ्रूपुट के लिए पूरी तरह से समान परिणाम देते हैं। और फिर भी अगर 0 परीक्षण, नहीं तो शून्य के लिए, या यदि हस्ताक्षर किए, कुछ compilers test eax,eax
जबकि कुछ का उपयोग or eax,eax
का उपयोग करेगा, और मैं सोच रहा था कि वे क्यों नहीं सब test eax,eax
का उपयोग कर के बाद से यह बहुत थोड़ा साफ कोड बनाता है।
EDIT2:
संदर्भ मैं घर पर हूँ और केवल है और पुराने MSVC++ और डेल्फी यहाँ है, लेकिन शून्य अगर एक चर के परीक्षण के लिए, MSVC++ test eax,eax
करता है, जबकि डेल्फी or eax,eax
करता है।
रजिस्टर नाम के आधार पर, मैंने अनुमान लगाया है [टैग: x86]। यदि यह गलत है, तो कृपया अपने प्रश्न को उचित प्रोसेसर आर्किटेक्चर के साथ दोबारा टैग करें। एक से अधिक है, और उनमें से प्रत्येक की अलग-अलग असेंबली भाषाएं हैं। –
आप सही थे x86 के लिए, मेरा बुरा यह वहां नहीं डालने के लिए था। – Marladu
लिंक किए गए डुप्लिकेट पर मेरा जवाब इस बारे में अधिक जानकारी देता है कि 'टेस्ट' बेहतर क्यों है, जिसमें कुछ कारणों का उल्लेख नहीं किया गया था। इन दिनों 'या एक ही,' पर विचार करने का एकमात्र कारण पी 6-पारिवारिक सीपीयू के लिए है, जहां एक रजिस्टर को फिर से लिखना इसे ऑर्डर-ऑफ-ऑर्डर कोर में "लाइव" रखता है, संभवतः बाद में निर्देशों के बाद रजिस्टर-स्टॉल स्टॉल से बच/घटाता है एक ही रजिस्टर पढ़ें। लेकिन टेस्ट/जेसीसी का मैक्रो-फ़्यूज़न आमतौर पर उस से अधिक होता है, जब तक कि प्रयोग एक विशिष्ट हॉटस्पॉट लाभ नहीं दिखाते। लेकिन शायद वह, और केवल जड़ता नहीं, यही कारण है कि डेल्फी 'या' का उपयोग करता है। –