X86 असेंबली कोड में, JEऔर JNEबिल्कुल समान हैं JZऔर JNZ?
X86 असेंबली कोड में, JEऔर JNEबिल्कुल समान हैं JZऔर JNZ?
जवाबों:
JEऔर JZबिल्कुल एक ही चीज़ के लिए अलग-अलग नाम हैं: एक सशर्त कूद जब ZF("शून्य" ध्वज) 1 के बराबर है।
(इसी तरह, JNEऔर JNZएक सशर्त कूद के लिए सिर्फ अलग अलग नामों जब हैं ZF0. के बराबर है)
आप उनका उपयोग परस्पर विनिमय कर सकते हैं, लेकिन आपको उनका उपयोग इस आधार पर करना चाहिए कि आप क्या कर रहे हैं:
JZ/ JNZजब आप शून्य के बराबर कुछ के लिए स्पष्ट रूप से परीक्षण कर रहे हैं तो अधिक उपयुक्त हैं:
dec ecx
jz counter_is_now_zero
JEऔर JNEएक CMPनिर्देश के बाद अधिक उपयुक्त हैं :
cmp edx, 42
je the_answer_is_42
(एक CMPनिर्देश एक घटाव प्रदर्शन करता है, और झंडे को रखते हुए, परिणाम के मूल्य को दूर फेंक देता है; यही कारण है कि ZF=1जब आप ऑपरेंड बराबर होते हैं और ZF=0जब वे नहीं होते हैं तो आप प्राप्त करते हैं।)
jb/ jc/ jnaeसभी परीक्षण सीएफ = 1। देखें felixcloutier.com/x86/jcc (या cmovcc या setcc)
से इंस्ट्रक्शन सेट संदर्भ - इंटेल के मैनुअल , JEऔर JZएक ही opcode (राशि 74rel8 के लिए / 0F 84rel 16/32 के लिए) भी JNEऔर JNZ( 75rel8 के लिए / 0F 85rel के लिए 16/32) शेयर opcodes।
JEऔर JZवे दोनों ZF(या शून्य ध्वज) के लिए जांच करते हैं , हालांकि मैनुअल पहले JErel8 और JZrel8 ZFउपयोग के विवरण में थोड़ा भिन्न है , लेकिन मूल रूप से वे समान हैं।
यहाँ मैनुअल के पृष्ठों 464, 465 और 467 से एक उद्धरण है।
Op Code | mnemonic | Description
-----------|-----------|-----------------------------------------------
74 cb | JE rel8 | Jump short if equal (ZF=1).
74 cb | JZ rel8 | Jump short if zero (ZF ← 1).
0F 84 cw | JE rel16 | Jump near if equal (ZF=1). Not supported in 64-bit mode.
0F 84 cw | JZ rel16 | Jump near if 0 (ZF=1). Not supported in 64-bit mode.
0F 84 cd | JE rel32 | Jump near if equal (ZF=1).
0F 84 cd | JZ rel32 | Jump near if 0 (ZF=1).
75 cb | JNE rel8 | Jump short if not equal (ZF=0).
75 cb | JNZ rel8 | Jump short if not zero (ZF=0).
0F 85 cd | JNE rel32 | Jump near if not equal (ZF=0).
0F 85 cd | JNZ rel32 | Jump near if not zero (ZF=0).
je : Jump if equal:
399 3fb: 64 48 33 0c 25 28 00 xor %fs:0x28,%rcx
400 402: 00 00
401 404: 74 05 je 40b <sims_get_counter+0x51>