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

《C# to IL》第一章 IL入門(1)

編輯:關於C語言

1-

我們用C#、VB.NET語言編寫的代碼最終都會被編譯成程序集或IL。因此用VB.Net編寫的代碼 可以在C#中修改,隨後在COBOL中使用。因此,理解IL是非常有必要的。

一旦熟悉了IL,理解.NET 技術就不會有障礙了,因為所有的.NET語言都會編譯為IL。IL是一門中性語言。IL是先發明的,隨後才有 了C#、VB.Net等語言。

我們將在一個短而精辟的程序中展示IL。我們還假設讀者至少熟悉一 門.Net語言。

a.il

.method void vijay()
{

}

隨後,我們用IL編寫了一個非常短小的IL程序——它顯然是不能工作的,並 將它命名為a.il。那麼我們怎麼才能把它編譯為一個可執行程序呢?不需要為此而焦急,Microsoft提供 了一個ilasm程序,它的唯一任務就是從IL文件中創建可執行文件。

在允許這個命令之前,要確保 你的變量路徑被設置為framework中的bin子目錄。如果不是,請輸入命令如下:

set path=c:\progra~1\microsoft.Net\frameworksdk\bin;%PATH%

現在,我們使用如下命令:

c:\il>ilasm /nologo /quIEt a.il

這樣做會生成下面的錯誤:

Source file is ANSI

Error: No entry point declared for executable

***** FAILURE *****

將來,我們將不會顯示由ilasm生成的輸出的第一行 和最後一行。我們還將移除非空白行之間的空白行。

在IL中,允許我們使用句點.作為一行的開始 ,這是一條指令,要求編譯器執行某個功能,如創建一個函數或類,等等。任何開始於句點的語句都是一 條實際俄編譯器指令。

.method表示創建一個名為vijay的函數(或方法),並且這個函數返回 void,即它不返回任何值。因為缺少較好的命名法則,函數名稱vijay顯得很隨意。

匯編器顯然理 解不了這個程序,從而會顯示“no entry point”的消息。這個錯誤信息的生成是因為IL文件 能夠包括無數的函數,而匯編器無法區分哪個會被首先被執行。

在IL中,首先被執行的函數被稱 為進入點(entrypoint)函數。在C#中,這個函數是Main。函數的語法是,名稱之後是一對圓括號()。 函數代碼的開始和結束用花括號{}來表示。

a.il

.method void vijay()
{
      .entrypoint
}

c:\il>ilasm /nologo /quIEt a.il

Source file is ANSI

Creating PE file

Emitting members:

Global Methods: 1;

Writing PE file

Operation completed successfully

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