MASM是微软 Macro Assembler 的缩写,是微软公司为x86 微处理器家族开发的汇编集成开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及win32Asm,是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发。

它支持的宏很灵巧,既广泛又多样性,结构化程序的惯用语法,包含高级架构式的循环、程序调用,以及轮替 (alternation)(因此,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 ,可读性和可维护性提高了很多

MASM 6.00A

未发售的版本

MASM 6.00B

最后一个支持 OS/2 的 MASM 版本,修正了上一版本中的一些错误

MASM 6.10

修正了一些错误,同时增加了 /Sc 选项,可以在产生的 list 文件中列出每条指令使用的时钟周期数

MASM 6.10A

1992 年发布,修正了一些内存管理方面的问题

MASM 6.11

1993 年 11 月发布,支持 Windows NT ,可以编写 win32 程序,同时支持 Pentium 指令,但不支持 MMX 指令集

MASM 6.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

2000 年 4 月发布,位于Visual C++ 6.0 Processor Pack。

MASM 7.0

位于Visual C++ .NET 2002。

MASM 7.1

位于Visual C++ .NET 2003。

MASM 8.0

放在Visual C++ .NET 2005,它也可以汇编x64的代码。

最新版本:14.0

位于Visual C++ 2015及其以后的版本中

在这些新版Visual C++的 bin 目录中,皆有 ml.exe。Visual C++ .NET 2005的相同目录,还有一个 ml64.exe,它可以汇编x64的代码。相关的说明,都包含在这些新版Visual C++的说明文件里。

软件竞争

在 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,其中包括IDE(如WinAsm Studio,RadASM)、除错器(像是OllyDbg),以及反汇编器(如 IDAPro,Interactive Disassembler)

为了 MASM 用户的方便,有masm32的项目把程序员所写的程序库(library)、程序示例 (sample code) 以及说明文件集合在一起。也有很多网上论坛在支持 MASM。

这些也都是沿习着著名的产品,如Visual Basic、Visual C++、EasyCode的IDE一样,为 MASM 提供可视化(visual) 的能力。虽然这个产品上了年纪,但它仍然是最受各方支持的汇编器。

虽然有传言说,微软不再支持发展汇编器,事实上,微软是继续支持发展这个产品。大致来说,支持仅限于添加新的指令集,如出现较新的处理器,以及加强支持 64 比特;往后将不会见到此汇编器被彻底的改头换面。

参考资料

Microsoft Macro Assembler Reference.MSDN.2017-08-09