首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 到 IL 深度解析:第3章 選擇與循環 (8) - while 循環與靜態變數的 IL 實現

     編輯:關於C語言

不等於操作符 (!=) 的 IL 實現

!= 使用兩個 ceq 指令:第一個比較兩值是否相等,第二個將結果與 0 比較(即邏輯非)。

while 循環範例與靜態欄位

以下程式使用靜態變數 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 初始化,循環結構同樣以標籤與條件分支實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved