“不等於”操作符,也就是!=,是==的相反操作 。它使用了兩個ceq指令。第1個ceq指令用來檢查棧上的值是否相等。如果它們是相等的,它就會返回 TRUE;否則就返回FALSE。
第2個ceq將前面的ceq結果和FLASE進行比較。如果第1個ceq的結果是 TRUE,那麼最後的答案就是FALSE,反之亦然。
這確實是一種獨創的方式來對一個值求否。
a.cs
class zzz
{
static int i = 1;
public static void Main()
{
while ( i <= 2)
{
System.Console.WriteLine(i);
i++;
}
}
}
a.il
.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.fIEld private static int32 i
.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
}
}
Output
1
2
在介紹完條件語句之後,我們現在將關注於while循環 。這種轉換是必須的,因為我們在諸如while這樣的循環中使用條件語句。包括條件的while循環稍微有點 復雜。
讓我們直接到標號IL_0018上,它位於IL代碼中zzz函數的結尾。這裡存在著一個條件。i的 值(即1)被存儲到棧上。接下來,常量2被放到棧上。
如果你再次訪問C#代碼,那麼while語句中 的條件就是i <= 2。指令ble.s是基於兩個構造函數的:cgt和brfalse。這個指令檢查了第1個值(即 變量i)是否小於等於第2個值。如果是,它就會指示程序跳轉到標號IL_0002。如果不是,程序就移動到 下一個指令。
因此,像ble這樣的指令使我們的工作更加容易,因為我們不必再次使用cgt和 brfalse指令。