詳解匯編語言開發環境搭建方法
引子
由于這些日子一直都在研究底層的技術,從 Windows 驅動程序,到 Windows 內核等等技術的學習,
讓我對底層的技術越發有興趣了,而剛好,在研究 WRK 時,
對內存管理,寄存器,地址總線,數據總線,控制總線等的理解不夠透徹,
所以越發的想學習匯編程序設計來提升功力,
而由于近來在公司里一直都有項目壓著,所以在公司里也實在不好拿本匯編程序設計看,
所以只好晚上回來學習了, 匯編看了幾個晚上,也算是蠻有感覺的。
今天就先來搭個開發環境再說吧。
開發環境搭配
我介紹四種開發匯編程序的方式:
***種:直接在 Dos 環境下使用 Edit 命令調出源碼編輯框,
生成源碼后,可以使用由微軟提供的 masm 匯編編譯器來對源碼進行編譯,
編譯完后再使用 Linker 連接器即可得到可執行文件,
這種方式現在幾乎被滅絕了(當然使用 masm 匯編編譯器還是很普遍的),
除非你真要在 DOS 環境下運行匯編程序;
第二種:通過簡化***種方式而來;
第三種:直接使用 Masm for Windows 集成實驗環境,這個開發環境呢,非常適合匯編語言的初學者,
因為這個 IDE 本身就是由一些從事匯編程序教學的大學老師開發的出來用于匯編初學者進行學習和實驗的,
所以使用簡單,方便,這里可以對這個 IDE 稍加推薦;
第四種:則是通過 Visual Studio 這個強大的 IDE 來實現匯編程序的編譯,運行和調試,
至于 Visual Studio 就不多做介紹了,.Net 用了這么多年,這東西強大到什么程度那是總所周知的;
***種方式:使用 Edit + MASM 5.0 編譯器 + Linker 連接器
其實這種方式是很簡單的,只是很麻煩,因為簡單而且麻煩,
所以我采用盡可能的將截圖傳上來,然后稍加注解的方式進行介紹,
軟件準備:
需要 MASM 5.0 或者以上的匯編編譯器
首先,是要編輯匯編源代碼:
其實對于源碼的編輯根本不需要向如下這么麻煩,直接拿個記事本就 OK 了
運行 cmd 命令
輸入 Edit 命令從而彈出匯編源碼編輯框
在源碼輸入框中輸入匯編源碼
將編輯好的匯編源碼保存到 xx.asm 文件中
然后就是要編譯編輯好的匯編源代碼
在 Dos 環境下進入到 MASM 5.0 匯編編譯器所在的目錄
然后運行 masm.exe
可以從上面的截圖中看到 [. ASM] 的標記,這個標記代表的是需要在這里輸入要編譯的源程序文件名,
這里有一點特別的是,由于默認的文件擴展名為 .asm ,所以在編譯 .asm 的匯編源程序時可以不用指定源程序所在文件的擴展名。
我們將一開始編輯好的匯編源程序所在的文件輸入以進行編譯
指定文件所在路徑后按 Enter 鍵
此時可以看到編譯器提示需要輸入要編譯出的目標文件的名稱,由于在一開始已經指定了 BoyXiao. asm ,
所以編譯器自動指定了目標文件的名稱為 BoyXiao. obj 的名稱,如果在這里不做修改的話,
則編譯器會以默認目標文件名稱 BoyXiao. obj 進行輸出,在這里我并不改變名稱,所以直接按 Enter 鍵即可
此時又提示需要輸入列表文件的名稱,其實是完全可以不要讓編譯器生成這個 LST 文件的,所以也不需要進行輸入,
直接按 Enter 鍵即可
此時又提示需要輸入交叉引用文件的名稱,這里也完全可以不要讓編譯器生成這個 CRF 文件,
所以也不需要進行輸入,直接按 Enter 鍵即可
至此,匯編源程序編譯成功,
編譯得到的結果就是在我的 E:\Tools\MASM\MASM 5.0 目錄下生成了一個 BoyXiao.obj 文件
下面就是要實現對目標文件的連接
經過編譯操作后,我們得到了一個 .obj 的目標文件,但很顯然,這還并不是一個可執行文件,
下面就需要對目標文件進行連接,從而得到一個可執行文件。
一般來說,需要準備一個連接器,這里我使用的是微軟提供的 Linker 連接器,即 LINK.EXE ,
進入 LINK.EXE 文件所在目錄,直接運行 LINK.EXE
此時提示需要輸入被連接的目標文件的名稱,這里也就是 BoyXiao.obj ,
由于我的 BoyXiao.obj 和 Link.exe 在同一目錄下,所以不需要指定路徑,直接給出 .obj 的名稱即可,
按 Enter 鍵
這里提示需要輸入要生成的可執行文件的名稱,此時如果想要將可執行文件輸入到指定目錄下,
則需要指定目錄,否則只需要指定名稱即可,并且可以看到名稱已有默認值:BOYXIAO.EXE
在這里我選擇默認值,所以直接按 Enter 鍵即可
按 Enter 鍵
又繼續提示需要輸入映像文件的名稱,在這里,不需要生成這個文件,所以直接按 Enter 鍵即可
此時又提示需要輸入庫文件的名稱,由于我們的這個程序中沒有使用任何的子程序,
也就是根本沒有調用什么庫文件,所以這里也可以直接按 Enter 鍵處理
至此,整個目標文件的連接工作結束,得到的結果是一個 EXE 文件
執行匯編程序
其實執行起來是看不到什么結果的,因為上面的匯編代碼沒有輸出任何內容,而只是改變了幾個寄存器的值而已,
自然也就看不到任何的輸出了。
#p#
第二種方式:使用 Edit + MASM 5.0 編譯器 + Linker 連接器 (簡化版)
這種方式其實和***種方式說不上有什么區別,只不過在編譯和連接過程中使用了很多編譯器和連接器的默認設置而已
軟件準備:
和***種方式一樣
編輯匯編源代碼:
和***種方式一樣,也可以是直接使用文本編輯器編輯即可
編譯編輯好的匯編源代碼
直接到 MASM.EXE 文件目錄,然后直接使用 masm 編譯指定路徑的文件即可
特別注意的是,需要在目錄的后面加上 “;”
同樣在 E:\Tools\MASM\MASM 5.0 目錄下生成了 BoyXiao.obj 目標文件
實現目標文件的連接
同樣,直接下到連接器 LINK.EXE 文件所在的目錄,然后直接使用 LINK 連接指定的目標文件即可
同樣需要注意在目錄或文件名的后面加上 “;”
可以看到連接成功了,從而生成了可執行文件,當然這個可執行文件運行的效果和***種方式中一樣,
即看不到任何輸出
#p#
第三種方式:MASM For Windows 集成開發環境
上面的兩種方式都顯得非常麻煩,編譯了還要連接,誰有那么多時間去浪費啊,
所以,下面介紹的這個 MASM For Windows 集成開發環境就顯得非常有優勢了,
軟件準備:
MASM For Windows 集成開發環境,我這里使用的是 2010 版本,大小 15.5 MB
實現 HelloWorld
直接打開 MASM For Windows 集成開發環境,然后找到范例程序,然后直接運行即可
可以看出,使用這個東東確實會方便很多很多
#p#
第四種方式:使用 Visual Studio 來實現開發匯編程序
軟件準備:
既然是使用 Visual Studio 來開發了,自然就需要 Visual Studio IDE 了,
在這里呢,我使用的是 Visual Studio 2010 ,當然 2008 和 2005 都是可以的,
只不過在一些設置上有些許區別而已,在這里,我也不做區分,大家感興趣的可以去網上淘一大把,
然后就是<<Intel 匯編語言程序設計>>中的 Irvine 包,這個在網上也有一大把
VS 2010 設置:
在 VC++ 中新建一個空項目,取名為 Test
定制 VC++ 工程構建規則
設置完 VC++ 生成自定義項文件后,再添加一個 C++ 文件,并注意取名時后綴名記為 .asm
設置 VC++ 工程的項目屬性
需要添加庫路徑,這里的庫路徑指的是 <<Intel 匯編語言程序設計>> 中的 Irvine 庫
設置包含路徑
設置依賴庫文件,添加 Irvine32.lib
設置項目輸出
設置生成匯編代碼列表,添加 $(ProjectName).lst 屬性
Hello World 程序:
直接運行即可
結束語
花了這么多的截圖來介紹這四種匯編程序開發方式,也算是良苦用心了,事實上呢,這四種方式,
我們并沒有必要全部掌握,我們只需找到適合自己的方式即可,
比如,初學的話,我覺得 MASM For Windows IDE 就非常不錯,
而至于系統性的開發,尤其是對于 Win32 匯編程序的開發,則選擇 Visual Studio 是個不錯的選擇。
原文鏈接:http://www.cnblogs.com/BoyXiao/archive/2010/11/06/1870397.html
【編輯推薦】