彙編語言編譯器

彙編語言編譯器

彙編語言是一種以處理器指令系統為基礎的低級語言,採用助記符表達指令操作碼,採用標識符表示指令運算元。作為一門語言,對應於高級語言的編譯器,需要一個“彙編器”來把彙編語言原檔案彙編成機器可執行的代碼。常用的高級語言編譯器有Microsoft公司的MASM系列和Borland公司的TASM系列編譯器,還有一些小公司推出的或者免費的彙編軟體包等。

編譯器介紹

MASM是Microsoft公司推出的彙編編譯器。它的版本從低到高經過了很多次的升級(微軟的通病,升級補丁多如牛毛)。

每次升級除了例行的錯誤修正外都增加了一些新的功能,以至於到最後高版本和低版本的語法和功能相差很多,向下兼容性也不好。低版本的MASM固然無法編譯高版本的源程式,但高版本的MASM也可能無法正常編譯低版本的源程式,如MASM 4.0寫的源程式常常無法在MASM 6.x上編譯成功。在使用MASM系列編譯器時,如果不先搞清楚特定的語法和編譯選項可以在哪個版本上用,編譯中就會錯誤連篇。所以在這裡有必要了解一下MASM各版本的演變過程

下表列出了不同版本MASM編譯器的區別。

版 本

簡 介

MASM 4.00

這是最先廣泛使用的一個MASM版本,適用於DOS下的彙編編程。它很精巧,但使用起來不是很智慧型化,需要用戶自己一板一眼地寫出所有的東西。很多教科書上講的8086彙編語法都是針對這個版本的,對程式設計師來說。它只比用Debug方便一點點。

MASM 5.00

MASM 5.00比4.00在速度上快了很多,並將段定義的偽指令簡化為類似 .code與.data之類的定義方式,同時增加了對80386處理器指令的支持,對4.00版本的兼容性很好

MASM 5.10

對程式設計師來說,這個版本最大的進步是增加了對@@標號的支持。這樣,程式設計師可以不再為標號的起名花掉很多時間。另外,MASM 5.10增加了對OS/2 1.x的支持

MASM 5.10B

1989年推出,比上一個版本更穩定、更快,它是傳統的DOS彙編編譯器中最完善的版本

MASM 6.00

1992年發布,有了很多的改進。編譯器可以使用擴展記憶體,這樣可以編譯更大的檔案,執行檔名相應從Masm.exe改為Ml.exe。從這個版本開始可以在命令行上用*.asm同時編譯多個源檔案,源程式中數據結構的使用和命令行參數的語法也更像C的風格。最大的改進之一是開始支持 .if/.endif這樣的高級語法,這樣,使用複雜的條件分支時和用高級語言書寫一樣簡單,可以做到幾千行的代碼中不定義一個標號;另外增加了invoke偽指令來簡化帶參數的子程式調用。這兩個改進使彙編代碼的風格越來越像C,可讀性和可維護性提高了很多

MASM6.00A

未發售的版本

MASM 6.00B

最後一個支持OS/2的MASM版本,修正了上一版本中的一些錯誤

MASM 6.10

修正了一些錯誤,同時增加了/Sc選項,可以在產生的list檔案中列出每條指令使用的時鐘周期數

MASM6.10A

1992年發布,修正了一些記憶體管理方面的問題

MASM 6.11

1993年11月發布,支持Windows NT,可以編寫Win32程式,同時支持Pentium指令,但不支持MMX指令集

MASM6.11C

1994年發布,增加了對Windows 95 VxD的支持

MASM 6.12

1997年8月發布,增加 .686,.686P,.MMX聲明和對相應指令的支持

MASM 6.13

1997年12月發布,增加了 .K3D聲明,開始支持AMD處理器的3D指令

MASM 6.14

這是一個很完善的版本,它在 .XMM中增加了對Pentium III的SIMD指令集的支持,相應增加了OWORD(16位元組)的變數類型

MASM 6.15

用法

TASM是Borland公司推出的彙編編譯器,也是一種使用很廣泛的編譯器,和MASM相比,TASM的升級沒有這么頻繁。TASM早在1.0版本就有了對80386處理器指令的完全支持(MASM要到5.0版本才支持80386指令),1989年推出的1.01版本修正了1.0版的一些錯誤;早期的版本還有TASM 3.0和TASM 4.0,其中4.0版是TASM系列編譯器編寫DOS程式使用最廣泛的版本。

到目前為止,TASM的最後一個版本是5.0版,這個版本支持Win32編程,並單獨為Win32編程附帶有一整套的32位程式:32位的編譯器TASM32.EXE、連結器TLINK32.EXE和資源編譯器BRC32.EXE。與這些32位程式對應的16位工具在軟體包中依然存在,檔案名稱為TASM.EXE,TLINK.EXE和BRC.EXE等。

TASM 5.0命令行的使用方法是:

TASM32 [選項] 源檔案名稱[,[目標檔案名稱],[列表檔案名稱],[索引檔案名稱]][;]

在Win32編程時TASM的常用選項如下表所示。

選 項

簡 介

/ml,/mx,/mu

對大小寫是否敏感:ml=全部敏感,mx=全局變數大小寫敏感,mu=不敏感,Win32編程中必須用ml選項

/m#

允許第#次編譯掃描時可以向前引用,一般使用/m2

/i路徑

設定include文字所在的路徑

/l,/la

lst檔案的格式:/l為正常格式,/la為擴充格式

/zi,/zd,/zn

符號調試信息的控制:/zi為全部,/zd為僅有行號,/zn為不產生調試信息

TASM和MASM之間的導入庫和目標檔案等不能通用,程式設計師無法用Microsoft的連結器來連結TASM產生的obj檔案,反之亦然,這是因為TASM的庫檔案和obj檔案一直是OMF格式,與Microsoft使用的COFF格式不兼容

NASM

NASM是一個為可移植性與模組化而設計的一個80x86的彙編器。它支持相當多

的目標檔案格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微軟16

位的'OBJ'和'Win32'。它還可以輸出純二進制檔案。它的語法設計得相當的簡

潔易懂,和Intel語法相似但更簡單。它支持'Pentium','P6','MMX','3DNow!',

'SSE' and 'SSE2'指令集,

相關詞條

相關搜尋

熱門詞條

聯絡我們