如果没有cmp,je如何工作?

时间:2011-08-28 09:20:10

标签: assembly 64-bit

.L10:
    leal    (%rsi,%rsi,4), %edx
    movsbl  %al,%eax
    addq    $1, %rdi
    leal    -48(%rax,%rdx,2), %esi
    je  .L3

在上面cmp之前只有je,它在这里是如何运作的?

3 个答案:

答案 0 :(得分:10)

  • je将跳转为ZF = 1
  • add修改了ZF
  • leamovsb不会影响任何旗帜。

保持Intel 64 and IA32 Architecture Developer's Manual。您可以在manual Volume 2

中找到Intel 64和IA32架构的所有指令详细信息

答案 1 :(得分:4)

如果在EFLAGS寄存器中设置了ZF标志,则

je跳转。 ZF标志的值由修改它的先前(例如cmp)操作设置。

由于leamovsbl都不会修改ZF标记,但add会修改(比较Intel Developer's Manual,3-36),je会跳转到{{ 1}} iff .L3为零。

答案 2 :(得分:0)

前面的指令设置处理器状态标志。即使未执行cmp,每个条件跳转都会检查某个标志。如果设置了零标志,我相信je会执行。