而在x86汇编中则为vs

时间:2013-03-29 02:24:26

标签: assembly x86

如何区分x86汇编中的while循环与if语句? 说我的程序正在获得这个x86程序集:

  jmp    .L2               # jump to test at end
  .L4:
        movl   -4(%ebp), %eax    # eax = A
        cmpl   -12(%ebp), %eax   # compare A to C
        jge    .L3               # skip next statement if A >= C
        addl   $1, -4(%ebp)      # A++
  .L3:
        subl   $1, -8(%ebp)      # B--
  .L2:
        cmpl   $0, -8(%ebp)      # compare B to 0
        jns    .L4               # restart code if B >= 0

假设x位于-8(%ebp), 在.L2的底部为什么这是一个while循环?

为什么:     while(x >= 0){jump to .L4}

并不是:     if(x >= 0){ jump to .L4} ??

1 个答案:

答案 0 :(得分:1)

因为它是代码中的跳回。换句话说,跳起来(选择你最喜欢的心理模型)。

意味着执行将一次又一次地达到条件跳转,直到条件为false。这是while循环的定义。现在,程序集不包含循环的内置概念(rep前缀除外,但不要去那里)。是的,这是一个有条件的跳转 - 正式的if语句带有goto正文。但它实现了循环的流控制模式。

另一方面,

常规if语句通常作为条件跳转(向下)实现。