MASMMicrosoft Macro Assembler 的縮寫,它是微軟x86 微處理器家族,所寫的一套巨集組譯器。它最初是用來發展在 MS-DOS 上面執行的軟件,同時,它也是該系統最流行的組譯器。

Microsoft Macro Assembler
開發者Microsoft
目前版本12.0.21005.1(2013年11月8日 (2013-11-08)
作業系統Microsoft Windows and MS-DOS
類型Assembler
許可協定Microsoft EULA
網站www.masm32.com 編輯維基數據

它支援的巨集很靈巧,既廣泛又多樣性,結構化程式的慣用語法,包含高階架構式的迴圈、程式呼叫,以及輪替 (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 StudioRadASM)、除錯器(像是 OllyDbg),以及 反組譯器(如 IDAPro, Interactive Disassembler

為了 MASM 用戶的方便,有MASM32的專案把程式設計師所寫的程式庫 (library)、程式範例 (sample code) 以及說明文件集合在一起。也有很多網上討論區在支援 MASM。

這些也都是沿習著著名的產品,如 Visual Basic、Visual C++、EasyCodeIDE 一樣,為 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/2WinAPI
      • 簡易指令加入流程控制敘述,如 .IF、.While、.Exit......等。
      • 強化對外部函式庫的支援命令,如 proto 與 invoke 等指令,其中最核心的是將 proc 指令包裝成符合高階語言風格(支援 C 與 Pascal 風格)的形式,且 invoke 指令重新包裝 call 與 push/pop 指令,可以更直觀、高階地運用函數。這對呼叫高階語言寫成的函數、特別是繁複的 WinAPI 非常重要。
      • masm 與 link 整合為 ML。
      • NMake 的 makefile 描述結構也產生了巨大的變化。

單獨銷售的最終版本 MASM 是 6.11。自從微軟停止 MASM 單獨銷售之後,至今他們也更新了幾次的 MASM。因為在微軟的作業系統等產品內,還是有大量以匯編語言撰寫的程式碼

在這些新版 Visual C++ 的 bin 目錄中,皆有 ml.exe。Visual C++ .NET 2005 的相同目錄,還有一個 ml64.exe,它可以組譯 x64程式碼。相關的說明,都包含在這些新版 Visual C++ 的說明文件裏。

有些新版的 MASM,也會放在微軟的 SDKDDK 中。 在VisualStudio2010中可用如下方式執行MASM(ML.exe):

   [SetupDir]\VC>ML [SourceFile]

支援

雖然有傳言說,微軟不再支援發展組譯器,事實上,微軟是繼續支援發展這個產品。大致來說,支援僅限於添加新的指令集,如出現較新的處理器,以及加強支援 64 位元;往後將不會見到此組譯器被徹底的改頭換面。

外部連結