彙編程式開發環境搭配
引子
由於這些日子一直都在研究底層的技術,從 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 檔案
執行彙編程式
其實執行起來是看不到什麼結果的,因為上面的彙編程式碼沒有輸出任何內容,而只是改變了幾個暫存器的值而已,
自然也就看不到任何的輸出了。
第二種方式:使用 Edit + MASM 5.0 編譯器 + Linker 聯結器 (簡化版)
這種方式其實和第一種方式說不上有什麼區別,只不過在編譯和連線過程中使用了很多編譯器和聯結器的預設設定而已
軟體準備:
和第一種方式一樣
編輯彙編原始碼:
和第一種方式一樣,也可以是直接使用文字編輯器編輯即可
編譯編輯好的彙編原始碼
直接到 MASM.EXE 檔案目錄,然後直接使用 masm 編譯指定路徑的檔案即可
特別注意的是,需要在目錄的後面加上 “;”
同樣在 E:\Tools\MASM\MASM 5.0 目錄下生成了 BoyXiao.obj 目標檔案
實現目標檔案的連線
同樣,直接下到聯結器 LINK.EXE 檔案所在的目錄,然後直接使用 LINK 連線指定的目標檔案即可
同樣需要注意在目錄或檔名的後面加上 “;”
可以看到連線成功了,從而生成了可執行檔案,當然這個可執行檔案執行的效果和第一種方式中一樣,
即看不到任何輸出
第三種方式:MASM For Windows 整合開發環境
上面的兩種方式都顯得非常麻煩,編譯了還要連線,誰有那麼多時間去浪費啊,
所以,下面介紹的這個 MASM For Windows 整合開發環境就顯得非常有優勢了,
軟體準備:
MASM For Windows 整合開發環境,我這裡使用的是 2010 版本,大小 15.5 MB
實現 HelloWorld
直接開啟 MASM For Windows 整合開發環境,然後找到範例程式,然後直接執行即可
可以看出,使用這個東東確實會方便很多很多
第四種方式:使用 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 是個不錯的選擇。
相關文章
- Jack架設WIN32彙編程式的開發環境Win32開發環境
- 彙編環境配置
- 編譯環境 Golang開發環境 vscode+git編譯Golang開發環境VSCodeGit
- Linux 開發環境 -- C/C++開發環境編譯安裝Linux開發環境C++編譯
- LAMP環境搭配與配置LAMP
- 編寫開發環境很難嗎開發環境
- Python程式碼編輯器和整合開發環境有哪些?Python開發環境
- qgroundcontrol開發環境搭建原始碼編譯開發環境原始碼編譯
- 彙編學習小記(一)-熟悉DEBUG環境
- emacs開發環境配置(4)——rust開發環境Mac開發環境Rust
- 配置開發環境、生成環境、測試環境開發環境
- RK3288 Linux SDK 編譯開發環境搭建Linux編譯開發環境
- 微信程式開發系列教程(一)開發環境搭建開發環境
- 基於Gulp小程式開發工作流,區分開發環境和生產環境開發環境
- 一、開發環境開發環境
- 開發環境配置開發環境
- PHP開發環境PHP開發環境
- Flutter開發入門之開發環境搭建(VSCode搭建Flutter開發環境)Flutter開發環境VSCode
- python下多環境開發(虛擬環境)Python
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- 用 Spring 區分開發環境、測試環境、生產環境Spring開發環境
- 迪文屏OS彙編程式碼開發-串列埠篇串列埠
- js開發環境配置JS開發環境
- 1 – 搭建開發環境開發環境
- Androdi開發環境搭建開發環境
- react 配置開發環境React開發環境
- Linux 環境 + 本地開發Linux
- Cordova 開發環境搭建開發環境
- GeoServer開發環境搭建Server開發環境
- Qt開發環境搭建QT開發環境
- 前端開發環境搭建前端開發環境
- QEMU 開發環境搭建開發環境
- Python IDE開發環境PythonIDE開發環境
- 搭建go開發環境Go開發環境
- JAVA開發環境搭建Java開發環境
- Ubuntu開發環境配置Ubuntu開發環境
- weex開發環境配置開發環境
- 搭建VUE開發環境Vue開發環境