2013-03-29 123 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'前綴。它們也可以作爲一個字符串或任何其他數組的循環。 –