程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 《C# to IL》第三章 選擇和循環(8)

《C# to IL》第三章 選擇和循環(8)

編輯:關於C語言

“不等於”操作符,也就是!=,是==的相反操作 。它使用了兩個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指令。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved