X86 असेंबली कोड में, JE
और JNE
बिल्कुल समान हैं JZ
और JNZ
?
X86 असेंबली कोड में, JE
और JNE
बिल्कुल समान हैं JZ
और JNZ
?
जवाबों:
JE
और JZ
बिल्कुल एक ही चीज़ के लिए अलग-अलग नाम हैं: एक सशर्त कूद जब ZF
("शून्य" ध्वज) 1 के बराबर है।
(इसी तरह, JNE
और JNZ
एक सशर्त कूद के लिए सिर्फ अलग अलग नामों जब हैं ZF
0. के बराबर है)
आप उनका उपयोग परस्पर विनिमय कर सकते हैं, लेकिन आपको उनका उपयोग इस आधार पर करना चाहिए कि आप क्या कर रहे हैं:
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 (राशि 74
rel8 के लिए / 0F 84
rel 16/32 के लिए) भी JNE
और JNZ
( 75
rel8 के लिए / 0F 85
rel के लिए 16/32) शेयर opcodes।
JE
और JZ
वे दोनों ZF
(या शून्य ध्वज) के लिए जांच करते हैं , हालांकि मैनुअल पहले JE
rel8 और JZ
rel8 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>