.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 ...