MASM
MASM 是 Microsoft Macro Assembler 的缩写,它是微软为 x86 微处理器家族,所写的一套巨集组译器。它最初是用来发展在 MS-DOS 上面执行的软体,同时,它也是该系统最流行的组译器。
开发者 | Microsoft |
---|---|
当前版本 | 12.0.21005.1(2013年11月8日 | )
操作系统 | Microsoft Windows and MS-DOS |
类型 | Assembler |
许可协议 | Microsoft EULA |
网站 | www |
它支援的巨集很灵巧,既广泛又多样性,结构化程式的惯用语法,包含高阶架构式的回圈、程序呼叫,以及轮替 (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 位元;往后将不会见到此组译器被彻底的改头换面。