在x86汇编代码中,JE
和JNE
与JZ
和JNZ
完全相同吗?
答案 0 :(得分:102)
JE
和JZ
只是不同的名称:a
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
(A CMP
指令执行减法,并在保留标志的同时抛出结果的值;这就是当操作数相等时得到ZF=1
的原因
当他们不是时,ZF=0
。)
答案 1 :(得分:33)
来自Intel's manual - Instruction Set Reference,JE
和JZ
具有相同的操作码(rel {/ 1}} 74
for rel 16/32} 0F 84
1}}和JNE
(JNZ
用于rel8 / 75
用于rel 16/32)共享操作码。
0F 85
和JE
他们都会检查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>