IL系列文章之一 Say Hello to IL

2021-04-13 01:00:22 字數 1195 閱讀 2441

.net出現這麼久了,很多人已經能夠熟練的運用c#進行軟體開發,也有一些像我這樣的人喜歡去研究一下.net的內部執行機制。我這裡來談談il(intermediate language),雖然我們不太可能直接用il來開發軟體,但是il的確是了解.net內部機制的一道大門。

visual studio.net給我們提供了兩個與il有關的工具ila**和ilda**,他們是il編譯器和il反編譯器,有關它們的使用方法大家可以參看msnd文件,我這裡就不再說了。不過在開始談論il,我還要談下clr基礎。

clr(common language runtime),msdn文件也有一些對它的描述,我這裡的描述只是對msdn文件的一些補充,以使讀者更好的理解clr。clr是.net框架的核心,可以把它想象成是乙個可以執行il code的cpu。就普通的intel cpu而言,它是依靠register和stack來執行程式,而clr則是乙個只依靠stack來執行程式的cpu。舉乙個例子,如果我們要進行1+2的運算,則il指令會現將1和2移到stack的頂部再進行add運算,add把1和2從stack頂部移走,再將運算結果3放到stack頂部。clr的stack不是以byte的形式存在,也不是以word的形式存在,而是slot。slot是一種能夠容納任何型別實體的結構,就是說我們能夠把int放到stack中,也可以把float放到stack中,stack中的內容可能是int->float->object a->object b->int,一切皆有可能。實體被移到stack頂部的過程叫做loading(簡寫成ld),把實體從stack頂部移走的過程叫做storing(簡寫成st)。

好,現在讓我們開始和il親密接觸吧!看看我們的第乙個il程式——「hello world」。

.assembly printstring {}

//console.writeline("hello, world)"

.method static public void main() il managed

儲存程式為

hello.il

,然後就是編譯它。開啟「

visual studio .net

命令提示」,切換到

hello.il

所在的目錄,輸入「

ila** hello.il

」,enter

。ila**

會提示你編譯成功,輸入「

hello

」,enter

。就可以看到我們的程式的執行結果了。

《python系列文章之一 python環境搭建》

python系列文章主要從入門的角度來 python。本節文章講述如何搭建python的開發環境。windows系統 mac系統 其他系統 請根據自己的作業系統選擇相應的python安裝包並安裝 2.設定相關的環境變數 系統環境變數path中新增python的安裝路徑和script路徑 3.檢視安裝...

IO系列文章之一 UNIX IO模型的學習與總結

原先對於io模型的認識總是很模糊,前段時間系統的學習了一下,分享出來,希望對看到的人有幫助。unix網路程式設計中,將io模型劃分為5種 1 阻塞io 2 非阻塞io 3 訊號驅動io 4 io復用 5 非同步io 1 io操作的2個步驟 以上5種io操作都分成了兩個步驟 發起io請求和實際io操作...

SQL Server Index系列之一

agenda index structures primary key and clustered index constraints and indexes syntax for creating and managing indexes special indexes index access ...