Jack架設WIN32彙編程式的開發環境

magus_yang發表於2020-04-04
 
標 題: Jack架設WIN32彙編程式的開發環境
作 者: Jack Yang
時 間: 2007-02-25 15:18
1.         下載並安裝Ultraedit
http://www.ultraedit.com/
我安裝的版本是12.20b+1官方中文版,安裝路徑不重要。
 
2.         下載並安裝MASM
我安裝的是Version 9,安裝路徑為:D:/masm32
 
3.         make工具
http://211.90.241.130:22366/view.asp?file=53
壓縮包中有兩個make工具
nmake.exe是Microsoft (R) Program Maintenance Utility   Version 1.50
make.exe是MAKE Version 4.0 Copyright (c) 1987, 1996 Borland International
這兩個make工具所支援的Makefile語法和常用的選項大同小異。
把nmake.exe和make.exe解壓到Masm32安裝目錄的bin子目錄下。
 
4.         編寫一個用於設定環境變數的批處理檔案var.bat
檔案的內容如下:
@echo off
rem 請根據 Masm32 軟體包的安裝目錄修改下面的 Masm32Dir 環境變數!
set Masm32Dir=D:Masm32
set include=%Masm32Dir%Include;%include%
set lib=%Masm32Dir%lib;%lib%
set path=%Masm32Dir%Bin;%Masm32Dir%;%PATH%
echo on
 
每開啟一個新的命令列控制檯,就要執行一次var.bat檔案。
省力的做法是把環境變數新增到使用者變數,或系統變數中去。
可以使用下列命令檢視環境變數的設定情況:
C:/>echo %include%
C:/>echo %lib%
C:/>echo %path%
 
5.         編寫makefile
makefile的內容如下:
EXE = Test.exe             #指定輸出檔案
OBJS 
= Test.obj            #需要的目標檔案
RES 
= Test.res              #需要的資原始檔
 
LINK_FLAG 
= /subsystem:windows    #連線選項
ML_FLAG 
= /c /coff            #編譯選項
 
$(EXE): $(OBJS) $(RES)
       Link $(LINK_FLAG) $(OBJS) $(RES)
 
.asm.obj:
       ml $(ML_FLAG) $<
.rc.res:
       rc $<
 
clean:
       del *.obj
       del *.res
 
 
需要注意的地方:
1)        nmake預設將Makefile檔案的第一條規則中的目標檔案作為最終檔案。例子中的最終檔案就是Test.exe
2)        引用EXE或OBJS這些巨集時一定要加上括號,如:$(EXE)、$(OBJS) 、$(RES)
3)        makefile的換行符是“/”,“/”後面不能再加上其它字元,包括註釋和空格
4)        隱含規則中幾個用來指定檔名的特殊預定義巨集
$@ - 目標檔案的全路徑檔名
$*    - 目標檔案的除去副檔名的全路徑檔名
$?    - 所有原始檔(依賴檔案)的檔名
$<   - 原始檔(依賴檔案)的檔名
5)        顯式規則的定義格式:
目標檔案 : 依賴檔案
    命令
6)        隱含規則的定義格式:
.源副檔名.目標副檔名:
    命令
 
用MASM編譯和連結一個Win32彙編源程式常用的命令是:
ml /c /coff xx.asm
link /subsystem:windows xx.obj yy.lib zz.res (普通PE檔案)
link /subsystem:console xx.obj yy.lib zz.res (控制檯檔案)
link /subsystem:windows /dll /def:aa.def xx.obj yy.lib zz.res (DLL檔案)
 
6.         執行nmake.exe
nmake的常用選項如下:
/?   顯示幫助資訊
 /f     指定描述檔案(makefile)的檔名
/x    把螢幕輸出的資訊存到一個檔案中
/a     強制更新所有檔案
/b    檔案時間相等時也要更新檔案
/d    make時顯示檔案新舊資訊
/n    顯示make時要執行的命令,但並不真正執行
/p    make是顯示詳細的資訊
巨集定義    用新的定義覆蓋描述檔案(makefile)中的巨集定義
目標       指定建立描述檔案(makefile)中描述的某個檔案
如:
make clean
用於清除編譯過程中產生的臨時檔案,即執行del *.obj和del *.res兩條命令;
make test.obj
只編譯test.asm生成test.obj檔案;
make test.res
只編譯test.rc生成test.res檔案;
 
 
Win32彙編程式的開發除錯過程:
編譯源程式->切換到MS-DOS視窗->鍵入nmake編譯->執行生成的可執行檔案->切換到文字編輯器修改源程式........如此迴圈往復除錯程式。
 
參考資料:
羅雲彬的《Windows環境下32位組合語言程式設計》(第二版)第二章
 

相關文章