匯編語(yǔ)言編譯器是一種軟件編程工具,它采用助記符表達(dá)指令操作碼,采用標(biāo)識(shí)符表示指令操作數(shù)。常用的高級(jí)語(yǔ)言編譯器有微軟的MASM系列和Borland公司的TASM系列編譯器,還有一些小公司推出的或者免費(fèi)的匯編軟件包等。
編譯器介紹
MASM是Microsoft公司推出的匯編編譯器。它的版本從低到高經(jīng)過了很多次的升級(jí)(微軟的通病,升級(jí)補(bǔ)丁多如牛毛)。
每次升級(jí)除了例行的錯(cuò)誤修正外都增加了一些新的功能,以至于到最后高版本和低版本的語(yǔ)法和功能相差很多,向下兼容性也不好。低版本的MASM固然無法編譯高版本的源程序,但高版本的MASM也可能無法正常編譯低版本的源程序,如MASM 4.0寫的源程序常常無法在MASM 6.x上編譯成功。在使用MASM系列編譯器時(shí),如果不先搞清楚特定的語(yǔ)法和編譯選項(xiàng)可以在哪個(gè)版本上用,編譯中就會(huì)錯(cuò)誤連篇。所以在這里有必要了解一下MASM各版本的演變過程
下表列出了不同版本MASM編譯器的區(qū)別。
版 本
簡(jiǎn) 介
MASM 4.00
這是最先廣泛使用的一個(gè)MASM版本,適用于DOS下的匯編編程。它很精巧,但使用起來不是很智能化,需要用戶自己一板一眼地寫出所有的東西。很多教科書上講的8086匯編語(yǔ)法都是針對(duì)這個(gè)版本的,對(duì)程序員來說。它只比用Debug方便一點(diǎn)點(diǎn)。
MASM 5.00
MASM 5.00比4.00在速度上快了很多,并將段定義的偽指令簡(jiǎn)化為類似 .code與.data之類的定義方式,同時(shí)增加了對(duì)80386處理器指令的支持,對(duì)4.00版本的兼容性很好
MASM 5.10
對(duì)程序員來說,這個(gè)版本最大的進(jìn)步是增加了對(duì)@@標(biāo)號(hào)的支持。這樣,程序員可以不再為標(biāo)號(hào)的起名花掉很多時(shí)間。另外,MASM 5.10增加了對(duì)OS/2 1.x的支持
MASM 5.10B
1989年推出,比上一個(gè)版本更穩(wěn)定、更快,它是傳統(tǒng)的dos匯編編譯器中最完善的版本
MASM 6.00
1992年發(fā)布,有了很多的改進(jìn)。編譯器可以使用擴(kuò)展內(nèi)存,這樣可以編譯更大的文件,可執(zhí)行文件名相應(yīng)從Masm.exe改為Ml.exe。從這個(gè)版本開始可以在命令行上用*.asm同時(shí)編譯多個(gè)源文件,源程序中數(shù)據(jù)結(jié)構(gòu)的使用和命令行參數(shù)的語(yǔ)法也更像C的風(fēng)格。最大的改進(jìn)之一是開始支持 .if/.endif這樣的高級(jí)語(yǔ)法,這樣,使用復(fù)雜的條件分支時(shí)和用高級(jí)語(yǔ)言書寫一樣簡(jiǎn)單,可以做到幾千行的代碼中不定義一個(gè)標(biāo)號(hào);另外增加了invoke偽指令來簡(jiǎn)化帶參數(shù)的子程序調(diào)用。這兩個(gè)改進(jìn)使匯編代碼的風(fēng)格越來越像C,可讀性和可維護(hù)性提高了很多
MASM6.00A
未發(fā)售的版本
MASM 6.00B
最后一個(gè)支持OS/2的MASM版本,修正了上一版本中的一些錯(cuò)誤
MASM 6.10
修正了一些錯(cuò)誤,同時(shí)增加了/Sc選項(xiàng),可以在產(chǎn)生的list文件中列出每條指令使用的時(shí)鐘周期數(shù)
MASM6.10A
1992年發(fā)布,修正了一些內(nèi)存管理方面的問題
MASM 6.11
1993年11月發(fā)布,支持Windows NT,可以編寫win32程序,同時(shí)支持Pentium指令,但不支持MMX指令集
MASM6.11C
1994年發(fā)布,增加了對(duì)Windows 95 VxD的支持
MASM 6.12
1997年8月發(fā)布,增加 .686,.686P,.MMX聲明和對(duì)相應(yīng)指令的支持
MASM 6.13
1997年12月發(fā)布,增加了 .K3D聲明,開始支持AMD處理器的3D指令
MASM 6.14
這是一個(gè)很完善的版本,它在 .XMM中增加了對(duì)Pentium III的SIMD指令集的支持,相應(yīng)增加了OWORD(16字節(jié))的變量類型
MASM 6.15
用法
TASM是Borland公司推出的匯編編譯器,也是一種使用很廣泛的編譯器,和MASM相比,TASM的升級(jí)沒有這么頻繁。TASM早在1.0版本就有了對(duì)80386處理器指令的完全支持(MASM要到5.0版本才支持80386指令),1989年推出的1.01版本修正了1.0版的一些錯(cuò)誤;早期的版本還有TASM 3.0和TASM 4.0,其中4.0版是TASM系列編譯器編寫DOS程序使用最廣泛的版本。
到目前為止,TASM的最后一個(gè)版本是5.0版,這個(gè)版本支持win32編程,并單獨(dú)為Win32編程附帶有一整套的32位程序:32位的編譯器TASM32.EXE、鏈接器TLINK32.EXE和資源編譯器BRC32.EXE。與這些32位程序?qū)?yīng)的16位工具在軟件包中依然存在,文件名為TASM.EXE,TLINK.EXE和BRC.EXE等。
TASM 5.0命令行的使用方法是:
TASM32 [選項(xiàng)] 源文件名[,[目標(biāo)文件名],[列表文件名],[索引文件名]][;]
在win32編程時(shí)TASM的常用選項(xiàng)如下表所示。
選 項(xiàng)
簡(jiǎn) 介
/ml,/mx,/mu
對(duì)大小寫是否敏感:ml=全部敏感,mx=全局變量大小寫敏感,mu=不敏感,Win32編程中必須用ml選項(xiàng)
/m#
允許第#次編譯掃描時(shí)可以向前引用,一般使用/m2
/i路徑
設(shè)定include文字所在的路徑
/l,/la
lst文件的格式:/l為正常格式,/la為擴(kuò)充格式
/zi,/zd,/zn
符號(hào)調(diào)試信息的控制:/zi為全部,/zd為僅有行號(hào),/zn為不產(chǎn)生調(diào)試信息
TASM和MASM之間的導(dǎo)入庫(kù)和目標(biāo)文件等不能通用,程序員無法用微軟的鏈接器來鏈接TASM產(chǎn)生的obj文件,反之亦然,這是因?yàn)門ASM的庫(kù)文件和obj文件一直是OMF格式,與Microsoft使用的COFF格式不兼容
NASM
NASM是一個(gè)為可移植性與模塊化而設(shè)計(jì)的一個(gè)80x86的匯編器。它支持相當(dāng)多
的目標(biāo)文件格式,包括Linux和'netbsd/FreeBSD','a.out','ELF','COFF',微軟16
位的'OBJ'和'win32'。它還可以輸出純二進(jìn)制文件。它的語(yǔ)法設(shè)計(jì)得相當(dāng)?shù)暮?jiǎn)
潔易懂,和英特爾語(yǔ)法相似但更簡(jiǎn)單。它支持'Pentium','P6','MMX','3DNow!',
'SSE' and 'SSE2'指令集,
參考資料 >