-1

您如何区分 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}??

4

1 回答 1

1

因为这是代码的跳转。换句话说,跳起来(选择你最喜欢的心智模型)。

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

if另一方面,常规语句通常实现为有条件的向前(向下)跳转。

于 2013-03-29T02:32:20.623 回答