JE / JNE和JZ / JNZ之间的区别

时间:2013-01-10 20:53:29

标签: assembly x86

在x86汇编代码中,JEJNEJZJNZ完全相同吗?

3 个答案:

答案 0 :(得分:102)

对于完全相同的事情,

JEJZ只是不同的名称:a ZF(“零”标志)等于1时的条件跳转。

(类似地,JNEJNZ只是条件跳转的不同名称 当ZF等于0时。)

可以交替使用它们,但你使用它们取决于 你在做什么:

    当您明确测试时,
  • JZ / JNZ更合适 对于等于零的东西:

    dec  ecx
    jz   counter_is_now_zero
    
  • JE指令后,
  • JNECMP更合适:

    cmp  edx, 42
    je   the_answer_is_42
    

    (A CMP指令执行减法,并在保留标志的同时抛出结果的值;这就是当操作数相等时得到ZF=1的原因 当他们不是时,ZF=0。)

答案 1 :(得分:33)

来自Intel's manual - Instruction Set ReferenceJEJZ具有相同的操作码(rel {/ 1}} 74 for rel 16/32} 0F 84 1}}和JNEJNZ用于rel8 / 75用于rel 16/32)共享操作码。

0F 85JE他们都会检查JZ(或零标记),尽管手册在第一个ZF rel8和{{的描述中略有不同1}} rel8 JE用法,但基本上它们是相同的。

以下是手册第464,465和467页的摘录。

JZ

答案 2 :(得分:-1)

  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>