masm32和masm有什么区别?(注:这是一个提问标题,不需要回答)

7
3个回答

4

这是两个不同版本的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 / .endifinvoke等,这些在其他汇编器中不存在。这是否是一个优势取决于个人口味,我个人更喜欢NASM样式的语法,因为它更规则,并且我发现宏预处理器更方便使用,但这是个人口味问题。

as则有所不同。它使用完全不同的语法和指令名称,与Intel手册中给出的不同。它是大多数Unix变体(以及来自该环境的编译器,如GCC)的默认值,但在该环境之外基本上没有使用。当前版本的GNU as也支持Intel语法,这使得大部分语法差异消失了,但总体而言,as主要用作编译器的后端汇编器,而不是一个完整的宏汇编器,因此与MASM或NASM / YASM相比,其功能集非常有限。


如果我理解正确的话,MASM 6.1是与masm32捆绑在一起的,而官方微软链接是针对MASM 8.0的?这是正确的吗? - Jumbo
虽然TASM已经相当过时了,但Delphi和Free Pascal的内部汇编器(所谓的BASM,但具有TASM风格)仍然存在。但Embarcadero决定在64位上放弃它。 - Marco van de Voort
@Jumbo:不知道MASM32软件包里有什么,但你发的微软链接是MASM 8.0。目前的Windows SDK版本带有MASM 9.0。(或者甚至更新,因为我已经有一段时间没有下载新的SDK了)。 - Fabian Giesen
@Marco:在VC++中,BASM和MS风格的内联ASM之间没有显著的区别(至少我想不出来),而且两者都是MASM风格语法的一个小子集。TASM最初就大多与MASM兼容,所有真正的差异都在宏汇编器功能上(如果我没记错,TASM有理想模式,并且宏预处理器的工作略有不同),这些你根本无法在内联ASM中访问到。 - Fabian Giesen

1

MASM32是一个完整的SDK,就像joni所说的那样。它包含了一个编辑器、一些帮助文件和基本上你需要用MASM语言编写代码的所有东西。此外,值得注意的是,MASM32确实包含MASM的8版本;你没有错过任何东西。我个人推荐使用MASM32作为一个软件包,它使得在MASM中开始变得更加容易,但你也可以从头开始做,并且只使用原始的MASM汇编器并从中找出答案。


1

看起来,MASM32是一个带有编辑器等整个SDK。您可以在这里下载仅用于与Visual C++ 2005 Express Edition一起使用的汇编程序本身(请阅读“系统要求”下面的内容)。因此,如果您想从零开始,下载适合初学者的MASM32 SDK可能更好。只需阅读此处页面以获取有关MASM的更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接