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

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

編輯:關於C語言

現在我們將研究IL如何處理條件操作符。讓我們考慮C#中的 語句j>i16。IL首先把值j放到棧上,也就是常量值16的前面。隨後它會調用cgt操作,這是它首次在我 們的源代碼中出現。這個指令檢查棧上的第1個值是否大於第2個。如果是,那麼它會把值1(TRUE)放到 棧上,否則它會把值0(FALSE)放到棧上。這個值隨後被存儲到變量i中。使用WritleLine函數,就會生 成布爾值的輸出,從而我們看到顯示True。

同樣,操作符<被轉換為clt指令,它會檢查棧上的 第1個值是否小於第2個。從而我們看到IL具有它自己的一套邏輯操作符,對基本的邏輯運算進行內部處理 。

a.cs

class zzz
{
static bool i;
static int j = 19;
public static void Main()
{
i = j == 16;
System.Console.WriteLine(i);
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.fIEld private static bool i
.fIEld private static int32 j
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldsfld     int32 zzz::j
ldc.i4.s   16
ceq
stsfld     bool zzz::i
ldsfld     bool zzz::i
call void [mscorlib]System.Console::WriteLine(bool)
ret
}
.method public hidebysig specialname rtspecialname static void .cctor() il managed
{
ldc.i4.s   19
stsfld int32 zzz::j
ret
}
}

Output

False

操作符==就是EQUALITY操作符。它也需要棧上的2個操作數 (Operand)來檢查相等性。此後它使用ceq指令來檢查相等性。如果相等,它會把值1(TRUE)放到棧上 ,如果不相等,它會把值0(FALSE)放到棧上。指令ceq是IL的邏輯指令集的不可缺少的一部分。

a.cs

class zzz
{
static bool i;
static int j = 19;
public static void Main()
{
i = j >= 16;
System.Console.WriteLine(i);
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.fIEld private static bool i
.fIEld private static int32 j
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldsfld     int32 zzz::j
ldc.i4.s   16
cgt
ldc.i4.0
ceq
stsfld     bool zzz::i
ldsfld     bool zzz::i
call void [mscorlib]System.Console::WriteLine(bool)
ret
}
.method public hidebysig specialname rtspecialname static void .cctor() il managed
{
ldc.i4.s   19
stsfld int32 zzz::j
ret
}
}

Output

False

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