জে / জেএনই এবং জেজেড / জেএনজেডের মধ্যে পার্থক্য


92

X86- সমাবেশ কোড ইন, হয় JEএবং JNEযেমন ঠিক একই JZএবং JNZ?


60
দীর্ঘ উত্তর: হ্যাঁ
হান্স প্যাস্যান্ট

9
সংক্ষিপ্ত উত্তর: না। (তবে তারা ঠিক একই মেশিন কোডের সাথে সামঞ্জস্যপূর্ণ , তাই তারা ঠিক একই জিনিসটি করে They একই তুলনা করার জন্য তাদের ঠিক আলাদা

4
জে এর অর্থ সমান হলে লাফ দেওয়া, পূর্বের তুলনাতে z পতাকা সেট থাকলে এটি সমান, জেজেডের অর্থ z পতাকা সেট করা থাকলে লাফ দেওয়া। এগুলি হুবহু একই, কিছু লোক আমার তুলনা সমান বা সমান না হয়ে বিবেচনা করতে / লিখতে চায়। কিছু লোকেরা বিবেচনা করে শর্তাবলীতে লিখতে থাকে এটি হ'ল z পতাকা সেট বা z পতাকা পরিষ্কার।
old_timer

উত্তর:


127

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গেলে এবং যখন তা না হয় তখন আপনি পাবেন ))


4
টিএল: ডিআর: একই মেশিন অপারেশন, বিভিন্ন অর্থগত অর্থ। ঠিক যেমন jb/ jc/ jnaeসমস্ত পরীক্ষার সিএফ = 1। দেখুন felixcloutier.com/x86/jcc (অথবা cmovcc বা setcc)
পিটার Cordes

36

থেকে নির্দেশনাবলী রেফারেন্স - ইন্টেলের ম্যানুয়াল , JEএবং JZএকই opcode (আছে 74rel8 জন্য / 0F 84রিল 16/32 জন্য) এছাড়াও JNEএবং JNZ( 75rel8 জন্য / 0F 85রিল জন্য 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).

-5
  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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.