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
在編譯過程的預處理階段,編譯器將測試在IF
和ELSEIF
語句(沒有點)的條件,並選擇將在節目結束的代碼塊中的一個。上面的代碼變成如下:
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
這些條件實際上是在執行時檢查的。
你有什麼例子來說明不同勢? –
根據要求添加示例。 – 2013-01-03 21:49:14
感謝舉例 –