2012-12-31 46 views
0

程序集中.IF和IF指令有什麼區別? 在文檔.IF:程序集中.IF和IF之間的區別

.IF condition1 
     statements 
    [[.ELSEIF condition2 
      statements]] 
    [[.ELSE 
      statements]] 
     .ENDIF 

和IF:

IF expression1 
     ifstatements 
    [[ELSEIF expression2 
      elseifstatements]] 
    [[ELSE 
      elsestatements]] 
    ENDIF 

回答

4

IF-ELSEIF-ELSE-ENDIF(無點)是編譯時指令。彙編程序將測試條件,並根據結果將只包含結果程序中的一個語句序列。它們的用途與C預處理指令#if#elif#else#endif相同。

.IF-.ELSEIF-.ELSE-.ENDIF(帶點)是執行時指令。彙編器將生成比較和跳轉指令。它們的作用與if (...) { ... } else if (...) { ... } else { ... }中的C語句相同。


注:我用不流利的MASM,所以有可能在這些例子中的符號錯誤。

something EQU 1 

somewhere: 
    mov ax, 42 
    IF something == 1 
    xor bx, 10 
    ELSE 
    mov bx, 20 
    ENDIF 
    add ax, bx 

在編譯過程的預處理階段,編譯器將測試在IFELSEIF語句(沒有點)的條件,並選擇將在節目結束的代碼塊中的一個。上面的代碼變成如下:

somewhere: 
    mov ax, 42 
    xor bx, 10 
    add ax, bx 

又如:

something EQU 1 

somewhere: 
    mov ax, 42 
    mov dx, something 
    .IF dx == 1 
    xor bx, 10 
    .ELSE 
    mov bx, 20 
    .ENDIF 
    add ax, bx 

在編譯過程的預處理階段,編譯器會變成.IF -statements(與點)插入組裝說明。上面的代碼可能變成以下代碼:

something EQU 1 

somewhere: 
    mov ax, 42 
    mov dx, 1 
    cmp dx, 1 
    jnz else_clause 
    xor bx, 10 
    jmp past_endif 
else_clause: 
    mov bx, 20 
past_endif: 
    add ax, bx 

這些條件實際上是在執行時檢查的。

+0

你有什麼例子來說明不同勢? –

+1

根據要求添加示例。 – 2013-01-03 21:49:14

+0

感謝舉例 –

-2

錯誤 「IF-ELSEIF-ELSE-ENDIF(無點)是編譯時指令。彙編器將測試的條件,並基於該結果,將僅包含語句的序列之一所得到的程序,它們用於相同的目的爲C預處理指令的#if,#elif指令,的#else和#endif。

.IF-.elseif僞-的.else-.ENDIF(與點)是execution- (...){...} else if(...){...} else {...} else if(...){...} else {...} 。}「。

。如果標記的代碼部分,其僅被認爲被組裝如果參數(其必須是絕對錶達式)是非零的源程序的一部分的開始。

參考: http://web.mit.edu/gnu/doc/html/as_toc.html#SEC65

+1

這是一個MASM問題。它使用與GNU'as'不同的指令(aka gas)。你的**真**部分只適用於氣體句法。有關不同彙編器的文檔鏈接,請參閱http://stackoverflow.com/tags/x86/info。 –

+0

謝謝,我不知道。 – Rasool

相關問題