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 位元;往后将不会见到此汇编器被彻底的改头换面。