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