!= 使用兩個 ceq 指令:第一個比較兩值是否相等,第二個將結果與 0 比較(即邏輯非)。
以下程式使用靜態變數 i,在靜態建構函數 .cctor 中初始化為 1:
// C# 代碼
class zzz {
static int i = 1;
public static void Main() {
while (i <= 2) {
System.Console.WriteLine(i);
i++;
}
}
}
IL 關鍵點:
i 以 ldsfld/stsfld 存取。.cctor 中 ldc.i4.1 stsfld 初始化。IL_0018):載入 i、載入 2、ble.s IL_0002。ble.s 內部結合 cgt 與 brfalse,簡化「小於等於」判斷。.method public hidebysig static void vijay() il managed {
.entrypoint
br.s IL_0018
IL_0002: ldsfld int32 zzz::i
call void [mscorlib]System.Console::WriteLine(int32)
ldsfld int32 zzz::i
ldc.i4.1
add
stsfld int32 zzz::i
IL_0018: ldsfld int32 zzz::i
ldc.i4.2
ble.s IL_0002
ret
}
.method public hidebysig specialname rtspecialname static void .cctor() il managed {
ldc.i4.s 1
stsfld int32 zzz::i
ret
}
輸出:1、2。
IL 透過 ble.s 等複合指令簡化條件判斷,靜態變數在 .cctor 初始化,循環結構同樣以標籤與條件分支實現。