मैंने सुना है कि x86 तुलना निर्देश: cmp x, y
एक घटाव करता है और परिणाम के आधार पर विभिन्न झंडे सेट करता है।x86 तुलना निर्देश XR का उपयोग घटाव के बजाय
अब, अगर मैं सिर्फ दो ऑपरेटरों के बराबर परीक्षण करना चाहता हूं तो क्या होगा? एक घटाव के बजाय एक एक्सओआर नहीं कर रहा है बहुत तेजी से? मेरा सवाल यह है कि, क्या कोई निर्देश है जो एक्सओआर के साथ तुलना करता है कि दो ऑपरेंड बराबर हैं या नहीं? शायद यह इस तरह दिखेगा: cmpeq x, y
या cmpxor x, y
।
मुझे लगता है कि अगर मैं सिर्फ cmpxor
का उपयोग करके समानता के लिए परीक्षण करना चाहता हूं, तो cmp
से तेज़ होगा, जो एक घटाव करता है। क्या ऐसे निर्देश हैं जैसे cmpxor
जो मुझे एक गति प्रदान करेगा?
मैं यह भी कहना चाहता हूं कि मुझे पता है कि xor
zero flag
सेट करेगा। लेकिन अगर मैं xor x, y
करता हूं, तो यह x
बदल जाएगा। मुझे वह नहीं चाहिए। मैं एक तुलना निर्देश चाहता हूं जो अकेले दोनों ऑपरेशंस छोड़ देगा।
आप क्यों मानते हैं कि एक्सओआर "बहुत तेज" होगा? – jalf
यह "बहुत तेज" नहीं होगा, क्योंकि 'cmp' पहले से ही किसी भी अन्य निर्देश ('xor' सहित) जितना तेज़ है। कुछ μarchs पर, 'cmp' निर्देश को एक आश्रित शाखा निर्देश के साथ सामने के अंत तक एक μop में भी जोड़ा जा सकता है, प्रभावी ढंग से इसे और भी तेज़ बना देता है। यह सब इंटेल के अनुकूलन मैनुअल में प्रलेखित है, जो स्वतंत्र रूप से उपलब्ध है और पढ़ने योग्य है। –
ईरा बैक्सटर ने यह बहुत अच्छा कहा: * तकनीकी रूप से एक एसयूबी को एक्सओआर से अधिक समय लेना चाहिए क्योंकि लेयर को सभी बिट्स के माध्यम से "लहर" करना पड़ता है, जबकि एक्सओआर थोड़ा-सा समानांतर होता है। * यह मेरा तर्क था। – Aaron