2013-03-29 76 views
-1

如何区分while循环与x86汇编中的if语句? 说我的程序得到这个x86汇编:而如果在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}

+0

我不明白你的问题。是什么让你认为.L2作为一个while循环?它做了一个比较,然后跳转或不跳转,就像if语句一样。 – kronion

回答

1

因为它是一个跳回代码。换句话说,跳起来(选择你最喜欢的心智模式)。

意思是说,待病情出来是假的执行一次又一次地达到这一条件跳转。这就是while循环的定义。现在,程序集不包含循环的内置概念(除了前缀rep,但我们不要去那里)。是的,这是一个有条件的跳转 - 正式的声明与goto正文。但它实现了循环的流量控制模式。

定期if语句,在另一方面,通常被作为一个条件跳转进(向下)来实现。

+0

不可思议,非常感谢。 –

+2

86具有特定的循环指令('LOOP','LOOPNE'和'LOOPE'),所以我会说这确实* *有一个内置的循环概念,但他们很绝未使用的这些天,但(对于不同原因)。 – Necrolis

+0

另外,请注意'REP'前缀。它们也可以作为一个字符串或任何其他数组的循环。 –