MASM
開發者 | Microsoft |
---|---|
目前版本 | 12.0.21005.1(2013年11月8日 | )
作業系統 | Microsoft Windows and MS-DOS |
類型 | Assembler |
許可協定 | Microsoft EULA |
網站 | www |
MASM 是 Microsoft Macro Assembler 的縮寫,它是微軟為 x86 微處理器家族,所寫的一套巨集組譯器。它最初是用來發展在 MS-DOS 上面執行的軟體,同時,它也是該系統最流行的組譯器。
它支援的巨集很靈巧,既廣泛又多樣性,結構化程式的慣用語法,包含高階架構式的迴圈、程式呼叫,以及輪替 (alternation)(因此,MASM 算是高階組譯器的一個範本)。MASM原本是由微軟公司維護的,但從6.12版後不再單獨銷售,而是隨附在微軟軟體開發套件與C語言編譯器下,近期版本的MASM也包含在微軟開發工具Visual Studio中。
競爭
[編輯]在 1990 年代初期,不管如何,有一些可供選擇的組譯器,像是 Borland TASM、共享版的 A86,以及(在 90 年代末期)NASM,都開始取得 MASM 的一些市場份量。但是在 1990 年代終,有兩種因素,使得 MASM 保住大部分的市場份量:
於是,微軟停止把 MASM 作為商業產品一樣的出售,並開始當成免費散佈的 DDK(驅動器發展套件)之一部分;其次,MASM32 開發包、Iczelion's Win32 教材的出現,讓視窗應用程式的設計,更方便使用 MASM.
後來在 2000 年,MASM 6.15 的發行,一樣是 Visual C++ Processor Pack 的一部份,費用全免。結果,在 Visual C++ 6.0 後來的所有版本,所包含的 MASM 之版本,都相等該 Visual C++ 的版本。後來在 Visual C++ 2005,64 位元版的 MASM 出現了(檔名為 ml64.exe
)。加上有龐大數量已安裝 MASM 的使用者群基礎,這些因素,使得MASM仍能繼續生存而不被淘汰。
支援 MASM 的專案
[編輯]有許多正在進行的軟體開發專案,都有支援到 MASM,其中包括 IDE(如 WinAsm Studio,RadASM)、除錯器(像是 OllyDbg),以及 反組譯器(如 IDAPro, Interactive Disassembler)
為了 MASM 使用者的方便,有MASM32的專案把程式設計師所寫的程式庫 (library)、程式範例 (sample code) 以及說明文件集合在一起。也有很多網路論壇在支援 MASM。
這些也都是沿習著著名的產品,如 Visual Basic、Visual C++、EasyCode 的 IDE 一樣,為 MASM 提供 視覺化 (visual) 的能力。雖然這個產品上了年紀,但它仍然是最受各方支援的組譯器。
MASM 的版本
[編輯]- 商業軟體時期的 MASM 主要版本:
- 4.x 1980 年代末期最流行的版本,很多組合語言入門書都以它為範本。
- 5.x 開始強化組譯器簡易指令(點指令),以簡化程式架構。稍晚的組合語言入門書亦大量運用此一版本。
- 6.x 版本為了支援 Windows,有幾個重大特色:
- 支援 flat 與 386 以上 CPU保護模式。
- 整合 PWB(Programmer's WorkBench) 開發環境。這軟體在同時期的 Quick BASIC 也找得到。
- 支援 DOS Extender,內建 DOS/16M。
- 開始支援 OS/2 與 WinAPI。
- 簡易指令加入流程控制敘述,如 .IF、.While、.Exit......等。
- 強化對外部函式庫的支援命令,如 proto 與 invoke 等指令,其中最核心的是將 proc 指令包裝成符合高階語言風格(支援 C 與 Pascal 風格)的形式,且 invoke 指令重新包裝 call 與 push/pop 指令,可以更直觀、高階地運用函式。這對呼叫高階語言寫成的函式、特別是繁複的 WinAPI 非常重要。
- masm 與 link 整合為 ML。
- NMake 的 makefile 描述結構也產生了巨大的變化。
單獨銷售的最終版本 MASM 是 6.11。自從微軟停止 MASM 單獨銷售之後,至今他們也更新了幾次的 MASM。因為在微軟的作業系統等產品內,還是有大量以組合語言撰寫的程式碼。
- 6.15 版是放在 Visual C++ 6.0 Processor Pack 中。
- 7.0 版是放在 Visual C++ .NET 2002。
- 7.1 版是放在 Visual C++ .NET 2003。
- 8.0 版是放在 Visual C++ .NET 2005,它也可以組譯 x64 的程式碼。
在這些新版 Visual C++ 的 bin 目錄中,皆有 ml.exe。Visual C++ .NET 2005 的相同目錄,還有一個 ml64.exe,它可以組譯 x64 的程式碼。相關的說明,都包含在這些新版 Visual C++ 的說明文件裡。
有些新版的 MASM,也會放在微軟的 SDK 和 DDK 中。 在VisualStudio2010中可用如下方式執行MASM(ML.exe):
[SetupDir]\VC>ML [SourceFile]
支援
[編輯]雖然有傳言說,微軟不再支援發展組譯器,事實上,微軟是繼續支援發展這個產品。大致來說,支援僅限於添加新的指令集,如出現較新的處理器,以及加強支援 64 位元;往後將不會見到此組譯器被徹底的改頭換面。