Windows10下搭建組合語言開發環境(利用DOSBOX和MASM32)
------------------------------------ 版權資訊 ------------------------------------
此文連結: http://blog.csdn.net/doniexun/article/details/45438457
此文作者: Windness
版權說明: 此文為作者經過檢索網上資源及根據個人開發經驗整理所得,所有參考文獻均已在文末標註,轉載請務必保留本文連結及作者資訊!
------------------------------------ 版權資訊 ------------------------------------
學一門語言,最好的方法便是在實踐中學習。對於不少初學者來說,首先要面臨的是如何搭建開發平臺/環境的問題。由於組合語言的特殊性,不少初學者會擔心自己直接對暫存器進行操作會不會導致系統崩潰或者系統硬體損壞,再加上現如今高階程式設計語言大行其道,真正需要寫組合語言的情境已經不那麼多了,所以不少初學組合語言的同學都還停留在紙上談兵的狀態。
本人初次學習組合語言已經是五年前,但一直都未親自實踐過,最近工作上需要用到反彙編二進位制可執行檔案,因此計劃重新拾起曾經學過的組合語言,以便能夠順利完成手頭上的專案。以下是搭建基於DOSBOX+MASM32的組合語言開發環境記錄。
1 工具準備
1)下載DOSBOX
工具介紹:DOSBox 是一個 DOS 模擬程式,由於它採用的是 SDL 庫,所以可以很方便的移植到其他的平臺。目前,DOSBox 已經支援在 Windows、Linux、Mac OS X、BeOS 、palmOS、Android 、webOS、os/2等系統中執行。不少DOS下的遊戲都可以直接在該平臺上執行。
工具官網:http://www.dosbox.com/
專案主頁:http://sourceforge.net/projects/dosbox/
下載連結:http://sourceforge.net/projects/dosbox/files/dosbox/0.74/DOSBox0.74-win32-installer.exe/download(32位)
說明:由於專案已經停更,目前官網上指出,DOSBOX可以執行於32位和64位的Windows Vista和Windows 7之上,根據本人親測,亦可在32位和64位的Windows 10上執行DOSBOX,因此有需要的童鞋可以試試。
2)下載MASM32
工具介紹:MASM32是國外的MASM愛好者Steve Hutchesson自行整理和編寫的一個軟體包,目前最高版本為11r版。MASM32並非指Microsoft的MASM巨集彙編器,而是包含了不同版本工具組建的彙編開發工具包。它的彙編編譯器是MASM6.0以上版本中的Ml.exe,資源編譯器是Microsoft Visual Studio中的Rc.exe,32位連結器是Microsoft Visual Studio中的Link.exe,同時包含有其他的一些如Lib.exe和DumpPe.exe等工具。
工具官網:http://www.masm32.com/
下載連結:http://www.masm32.com/downloads
注意:也可以直接下載由參考資料3作者提供的masm工具壓縮包,裡面包含必要的彙編、連結、除錯工具,百度網盤下載連結:https://pan.baidu.com/s/1skL2bVJ,密碼:7uv1。
2 安裝工具
1)安裝DOSBOX
安裝下載到的DOSBox0.74-win32-installer.exe,直接一路Next完成安裝。
2)配置DOSBOX
建立一個用於儲存彙編工具(如MASM、Link、DEBUG等工具)和彙編檔案(*.asm)的目錄,如:D:\DEBUG。
開啟DOSBOX的安裝根目錄(預設安裝路徑:C:\Program Files\DOSBox-0.74;若是64位的系統,則預設安裝路徑:C:\Program Files (x86)\DOSBox-0.74),雙擊檔案DOSBox 0.74 Options.bat,執行該批處理檔案後系統會用文字文件Notepad開啟配置檔案dosbox-0.74.conf。
將游標定位到dosbox-0.74.conf檔案的[autoexec]節點(一般在該檔案末尾),在檔案中新增以下內容:
- MOUNT C D:\DEBUG # 將目錄D:\DEBUG掛載為DOSBOX下的C:
- set PATH=$PATH$;D:\DEBUG # 將D:\DEBUG寫入環境變數PATH中
3)安裝MASM32
可解壓安裝下載到的masm32v11r.zip,按預設配置安裝即可。
安裝結束後,可直接利用masm32v11r中的gedit.exe程式編寫、編譯和連結asm彙編程式。
注意:MASM32的替代方案:
可直接從其他電腦或從上述網盤地址提供的壓縮包將彙編工具DEBUG.EXE、EDIT.EXE、LINK.EXE、MASM.EXE等工具複製到D:\DEBUG資料夾下(複製時注意不能將32位系統中找到的上述工具複製到64位系統中使用)。
3 樣例程式
注意:當進入DOSBOX編輯介面,隨意可以按Windows鍵退出DOSBOX編輯介面;以下命令的拼寫忽略大小寫。
1)執行DOSBOX,在命令符C:\>下輸入命令:EDIT 檔名.asm,啟動EDIT.EXE進入程式碼編輯狀態,並輸入如下樣例程式:
- code segment
- assume cs:code
- start:
- mov ax,5h
- mov bx,6h
- add ax,bx
- mov ah,4ch ; 呼叫DOS的4C號功能
- int 21h ; 退出DEBUG狀態,返回DOS
- code ends
- end start
2)儲存檔案後返回DOSBOX的命令列,輸入命令:MASM 檔名.asm,生成目標檔案檔名.OBJ(生成過程中可以修改目標檔名,直接回車可保持預設目標檔名)。
注意:此時可能生成三個檔案:*.obj、*.lst和*.crf檔案(Windows10 x64系統可能只會生成*.obj檔案)。其中,列表檔案*.lst和交叉引用檔案非必選,前者是組合語言彙編的機器語言與組合語言對照表,可用於除錯;後者給出了使用者定義的所有符號和對每個符號定義、引用的行號。
3)輸入命令:LINK 檔名.OBJ,連結生成可執行檔案檔名.EXE。
注意:由於在上述程式碼中未定義堆疊段,故在連結時會提示:LINK : warning L4021: no stack segment,因不會影響執行檔案的生成,故暫時忽略。
另外,此時可能生成兩個檔案:*.exe和*.map檔案(Windows10 x64系統可能只會生成*.exe檔案)。其中,地址對映檔案*.map給出記憶體地址分配的有關資訊。
4)輸入命令:DEBUG 檔名.EXE,在DEBUG的命令提示符“-”出現後開始除錯,以下是部分除錯命令及截圖:
輸入命令:R,檢視程式執行前的暫存器組初始值;
輸入命令:U,檢視程式反彙編程式碼。從反彙編程式碼中可看出,變數會被彙編為直接定址方式,使用變數在資料段內的有效地址表示。
輸入命令:T,單步除錯;
輸入命令:D,觀察記憶體變化(D後不帶地址或範圍,預設顯示上一個D命令之後的80位元組內容);
輸入命令:G 地址,程式從當前位置直接執行到指定地址處停下。
輸入命令:E 地址修改記憶體中的內容,如:E DS:0100,輸入空格可逐個位元組修改,回車停止修改。
4 參考資料
1)MASM百度百科:http://baike.baidu.com/view/1754206.htm
2)DOSBOX百度百科:http://baike.baidu.com/view/716885.htm
3)Win8下用DOSBox編寫組合語言:http://www.tuicool.com/articles/v2A3mm
相關文章
- Linux下搭建Go語言開發環境LinuxGo開發環境
- Go語言開發環境搭建Go開發環境
- Windows 下GO語言開發環境搭建+LiteID配置WindowsGo開發環境
- GO語言eclipse開發環境搭建GoEclipse開發環境
- macOS 下搭建 Go 語言開發環境-Go 學習記錄MacGo開發環境
- go語言環境搭建Go
- Windows10系統下Hadoop和Hive開發環境搭建填坑指南WindowsHadoopHive開發環境
- 小白學習Golang(二)Go語言開發環境搭建Golang開發環境
- 小白學習Golang(四)Go語言開發環境搭建Golang開發環境
- Windows10系統下使用Docker搭建ClickHouse開發環境WindowsDocker開發環境
- 在Windows10搭建WebAssembly開發環境WindowsWeb開發環境
- go語言grpc環境搭建GoRPC
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- 有Go語言實戰培訓班嗎?go語言開發環境搭建Go開發環境
- 【R語言入門】R語言環境搭建R語言
- Windows10 Java Spring boot 開發環境搭建WindowsJavaSpring Boot開發環境
- MAC環境下PHP開發除錯環境搭建MacPHP除錯
- mac下搭建android 開發環境MacAndroid開發環境
- Flutter開發環境Window下搭建Flutter開發環境
- macOS下搭建Flutter開發環境MacFlutter開發環境
- linux下搭建wails開發環境。LinuxAI開發環境
- Go語言VSCode開發環境配置GoVSCode開發環境
- Golang(go語言)開發環境配置Golang開發環境
- win10怎麼搭建c語言環境_win10如何搭建c語言環境Win10C語言
- 自然語言處理之:搭建基於HanLP的開發環境自然語言處理HanLP開發環境
- MAC 下的PHP開發環境搭建MacPHP開發環境
- Ubuntu下Python & Django開發環境搭建UbuntuPythonDjango開發環境
- Go語言環境搭建(Windows版本)2020GoWindows
- Java 語言概述與開發環境(1)Java開發環境
- Java 語言概述與開發環境(2)Java開發環境
- Windows配置R語言、RStudio開發環境WindowsR語言開發環境
- linux下使用vscode和makefile搭建C++開發環境LinuxVSCodeC++開發環境
- 智慧合約開發環境搭建及Hello World合約開發環境
- Get Started:Mac下搭建PHP開發環境MacPHP開發環境
- Windows下React Native開發環境的搭建WindowsReact Native開發環境
- 【記錄】WSL 下搭建前端開發環境前端開發環境
- MACOS 下搭建 E9 開發環境Mac開發環境
- linux(統信)下搭建electron開發環境Linux開發環境