我正在尝试学习 windows 的组装,并看到有 2 个组装器:
masm:https ://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
masm32:http : //masm32.com/index.htm
这些是等价的吗?我应该选择哪一个来学习 windows 组装?
我正在尝试学习 windows 的组装,并看到有 2 个组装器:
masm:https ://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
masm32:http : //masm32.com/index.htm
这些是等价的吗?我应该选择哪一个来学习 windows 组装?
它都是 MASM(显然),只是不同的版本。我通常会使用官方(MS)链接。MASM 现在也是 Windows SDK 的一部分 - 如果您安装它,它包含ML.exe
在bin
目录中。
如果你只是用它来学习汇编语言,那么使用的 MASM 版本并没有太大的区别。较新版本的 MASM 添加了对 64 位 ( ML64.exe
) 和更新指令的支持,因为它们被添加到 x86 指令集中,但仅此而已。不同汇编程序之间的主要区别在于不同的方言。x86 汇编语言有 3 种主要方言:MASM 语法、NASM 语法和 Unix 风格的as
语法(以前也有 Borland TASM,但现在几乎已经死了)。MASM、NASM 和 YASM 都使用相同的指令和寄存器名称,但有一些稍微不同的约定(dword ptr [blah]
与dword [blah]
等)和完全不同的宏语言。MASM 也有一些更高级别的结构,例如.if
/ .endif
,invoke
其他汇编程序中不存在的等。这是否是一个优势是一个品味问题,我个人更喜欢 NASM 风格的语法,因为它更规则,我发现宏预处理器更方便使用,但这是一个品味问题。
as
是另一回事。它使用与英特尔手册中给出的完全不同的语法和指令名称。它是大多数 Unix 变体(以及来自该环境的编译器,例如 GCC)的默认值,但在该环境之外基本上未使用。当前版本的 GNUas
也支持 Intel 语法,这使得大多数语法差异消失了,但as
通常主要用作编译器的后端汇编器,而不是成熟的宏汇编器,因此与MASM 或 NASM/YASM。
MASM32 是一个完整的 SDK,就像 joni 所说的那样。它包含一个编辑器、一些帮助文件,以及使用 MASM 语言编写代码所需的所有内容。此外,值得注意的是,MASM32 确实包含 MASM 的第 8 版。你没有错过任何东西。我个人推荐将 MASM32 作为一个包,它使 MASM 的开始变得更加容易,但是您可以从头开始,只使用原始的 MASM 汇编程序并从那里弄清楚。