摘要
本文描述微软公司的宏汇编工具MASM的历史和入门级用法。
MASM简介
微软的宏汇编工具 MASM(Microsoft Macro Assembler)自1979年首次发布以来,经历了多次版本更新和改进。以下是 MASM 的版本历史:
1. MASM 1.0:于1979年首次发布,运行在CP/M系统上,支持8080和Z80处理器。
2. MASM 2.0:于1981年发布,支持8086处理器,是第一个支持Intel 8086系列处理器的汇编器。
3. MASM 3.0:于1982年发布,支持多模块程序的编译,可以生成COM和EXE格式的可执行文件。
4. MASM 4.0:于1984年发布,支持Intel 80286处理器,增加了许多新功能和优化。
5. MASM 5.0:于1987年发布,支持Intel 80386处理器,新增了一些指令,支持更多的操作系统和格式。
6. MASM 6.0:于1992年发布,支持Intel 80486处理器,增加了高级宏语言支持,支持内联汇编。
7. MASM 6.1:于1993年发布,修复了一些漏洞和错误。
8. MASM 6.11:于1994年发布,修复更多的错误和漏洞,提供更好的Windows支持。
9. MASM 6.12:于1995年发布,支持Windows 95和NT操作系统,增加了一些新指令和宏指令。
10. MASM 6.13:于1998年发布,支持Windows 98和NT 5.0操作系统,增加了MMX指令支持。
11. MASM 6.14:于1999年发布,修复了一些错误和漏洞。
12. MASM 7.0:于2000年发布,支持SSE指令集,增加了一些新特性。
13. MASM 8.0:于2002年发布,新增了支持IA-64(Intel Itanium)指令集的汇编器,并对x86架构进行了优化。
14. MASM 9.0:于2004年发布,新增了支持x64指令集的汇编器,并增加了一些新特性和改进。
15. MASM 10.0:于2005年发布,修复了一些错误和漏洞,不再提供对DOS和16位Windows环境的支持。
16. MASM 11.0:于2007年发布,修复了一些错误和漏洞,并增加了对Windows Vista和Server 2008的支持。
17. MASM 12.0:于2009年发布,支持Windows 7和Server 2008 R2,增加了一些新特性和改进。
18. MASM 14.0:于2018年发布,增加了对多核处理器的优化,可以更快地编译大型代码库,提高了编译效率,支持更多的操作系统和CPU架构,可以编译链接到.NET框架、COM对象和其他标准Windows库。
MASM从最初的8086处理器支持到现在的x64指令集支持,历经了40多年的发展,充分体现了微软在汇编开发工具方面的技术积累和丰富经验。
安装MASM
Visual Studio 2022集成了版本号为14.36版本的MASM汇编器,其典型路径如下:
%VS2022_INSTALL_DIR%\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx86\x86\ml.exe
%VS2022_INSTALL_DIR%\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx64\x64\ml64.exe
从如下网站下载masm32 SDK:
下载并解压缩masm32v11r.zip,执行安装程序。此示例将masm32安装到C:\masm32目录下。
创建汇编程序
创建一个文本文件,例如hello.asm,使用任何文本编辑器打开并输入以下代码:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
szCaption db 'hello',0
szText db 'hello, world.',0
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
end start
这段代码会在Windows系统上显示一个带有“Hello, World!”消息的对话框。代码中的.386
和.model flat,stdcall
用于指定代码格式和调用规则。
设置环境变量
创建一个名为masm32vars.bat的批处理文件,将如下命令复制粘贴到文件中。
rem 请根据Masm32软件包的安装目录修改Masm32Dir变量的值
set Masm32Dir=C:\masm32
set include=%Masm32Dir%\Include;%include%
set lib=%Masm32Dir%\lib;%lib%
set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
将masm32vars.bat的文件目录添加到PATH环境变量中。
编译汇编程序
打开cmd.exe,cd进入hello.asm所在的目录。
执行masm32vars.bat:
masm32vars.bat
编译hello.asm:
ml /c /coff hello.asm
此命令会生成一个名为hello.obj的目标文件。
链接目标文件
运行以下命令将目标文件链接到可执行文件中:
link /SUBSYSTEM:WINDOWS /ENTRY:start hello.obj
此命令会创建一个名为hello.exe的可执行文件。
运行程序
双击hello.exe文件或在命令提示符中运行该文件即可在Windows系统上显示一个带有“Hello, World!”消息的对话框。
参考资料
ML 和 ML64 命令行参考 | Microsoft Learn
总结
MASM是一种功能强大的工具,可以用于开发高效、低级别的系统软件,但需要花费一定的学习时间和精力。