2013-01-10 7 views
54

के बीच अंतर x86 असेंबली कोड में JE और JNE बिल्कुल JZ और JNZ जैसा ही है?जेई/जेएनई और जेडजेड/जेएनजेड

+38

लांग जवाब से एक उद्धरण है: हाँ। –

+6

संक्षिप्त उत्तर: नहीं। (लेकिन वे * बिल्कुल * एक ही मशीन कोड के अनुरूप होते हैं, इसलिए वे * वही * एक ही चीज़ करते हैं। उनके पास समान तुलना के लिए अलग-अलग निमोनिक्स होते हैं।) –

+3

जेई का मतलब बराबर है तो कूदें, यह बराबर है यदि पूर्व तुलना में बराबर है जेड फ्लैग सेट, जेड झंडा सेट है अगर जेड झंडा सेट है। वे बिल्कुल वही हैं, कुछ लोग मेरी तुलना के अनुसार सोचना/लिखना चाहते हैं बराबर या बराबर नहीं थे। कुछ लोग जेड फ्लैग सेट या जेड फ्लैग स्पष्ट के संदर्भ में सोचते हैं और लिखते हैं। –

उत्तर

75

JE और JZ बिल्कुल वही बात के लिए सिर्फ अलग अलग नाम हैं: एक सशर्त कूद जब ZF ("शून्य" ध्वज) 1.

के बराबर है (इसी तरह, JNE और JNZ के लिए सिर्फ अलग अलग नाम हैं एक सशर्त कूद जब ZF 0. के बराबर)

आप उन्हें दूसरे के स्थान पर इस्तेमाल कर सकते हैं, लेकिन आप उन्हें 012 के आधार पर का उपयोग करना चाहिएतुम क्या कर रहे:

dec ecx 
jz counter_is_now_zero 
  • JE और JNE एक CMP अनुदेश के बाद और अधिक उपयुक्त हैं: जब आप स्पष्ट रूप से कुछ के लिए परीक्षण कर रहे हैं बराबर होने के शून्य करने के लिए

    • JZ/JNZ अधिक उपयुक्त हैं :

      cmp edx, 42 
      je the_answer_is_42 
      

      (ए CMP निर्देश एक घटाव करता है, और झंडे को रखते हुए, परिणाम के मूल्य को फेंकता है; जिसके कारण आप ZF=1 जब ऑपरेंड बराबर हैं और ZF=0 जब वे नहीं कर रहे हैं।)

  • 30

    Intel's manual - Instruction Set Reference से, JE और JZ ही opcode है (74 rel8 के लिए/rel 16 के लिए 0F 84/32) रिले 16/32 के लिए rel8/0F 85 के लिए JNE और JNZ (75) ऑपकोड साझा करें।

    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). 
    
    संबंधित मुद्दे