看到最近園裡很多人在討論彙編和il。忍不住要說兩句。先看看什麼是彙編。首先要知道的是彙編是和cpu指令有關的。intel和amd cpu的指令集是不一樣的(當然,可能有一部分指令是相同的的)。這就要對不同的cpu實現相應的彙編器,彙編器的功能就是將彙編助記符號(象add、mov)翻譯成相對某類cpu的機器碼,最終生成象exe、dll、so等二進位制檔案。
既然不同的cpu的機器指令不完全相同,那麼我們如何編寫跨cpu的程式呢?當然, 乙個好主意是有一種通用的語言,通過這種語言的編譯器,可以將源**轉換(編譯)成不同cpu的指令。但這有乙個問題,就是需要為各種cpu實現不同的編譯器,比較麻煩。為了更方便,可以先將這種語言轉換成組合語言。然後再使用不同cpu平台的彙編器轉換成機器碼。這樣編譯器可以只有乙個,而彙編器需要對不同的cpu來實現。不過彙編器的實現可以編譯器容易得多哦。剛才說的這種語言就是高階語言,象c、c++語言。 在這裡,組合語言不僅僅是起到了助記符的作用,還起到了對cpu的抽象作用。如對於不同的cpu,某個助記指令可以對應的cpu指令碼不同。
再看看il,由於不同的基於.net的語言有不同的語法。而clr對語言的語法並不感興趣,而只對實際的執行指令感興趣,就象cpu,只對機器指令感興趣一樣。因此,需要一種描述clr可識別的執行指令的語言,這就是il。我們可以和彙編的位置進行對比。在.net中,clr是.net虛擬機器,相當於「cpu+作業系統」的地位。而vb.net、c#相當於高階語言,和c、c++是一樣的。而il呢,正好相當於彙編的地位,承前啟後。clr將il再編譯成機器指令是非常快的。因此,可以得出乙個結論。如果說il就是彙編,那麼這個彙編並不是相對於cpu的,而是相對於clr的,也就是說,il是clr的彙編。而clr可以被稱為.net虛擬機器,因此,可以將il稱為虛擬彙編。
高階組合語言和低階組合語言的差別
80 86不支援像 if while repeat for break breakif try 這樣的機器指令。hla只要一遇到這些語句,就把他們編譯成乙個或多個真正的機器的指令 本書的目的 the art of assembly language 在於傳授你低階組合語言,談論第一章的高階結構只是實...
c語言和組合語言的區別
什麼是c語言 c語言是一門通用 計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式 編譯 處理低階 儲存器 產生少量的 機器碼以及不需要任何執行環境支援便能執行的程式語言 儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平台的特性,以乙個標準規格寫出的c語言程式可在許多電腦平台...
關於組合語言入門
組合語言我終於入門了,不管怎樣,我覺得只要是自己能繼續自己學習下去就算把一門語言入門了。昨天微型計算機上機實驗的時候題目很有難度,我乙個也沒有做出來,很受打擊。作為乙個立志在明年進入中科院軟體所的人,我怎麼可以這樣子?這麼關鍵的課程,怎麼可以落下。我感到很內疚。然而,此刻我終於不內疚了。在網上搜尋到...