masm32和masm的区别?
Posted
技术标签:
【中文标题】masm32和masm的区别?【英文标题】:Difference between masm32 and masm? 【发布时间】:2010-11-02 08:08:26 【问题描述】:我正在尝试学习 windows 汇编,发现有 2 个汇编器:
masm:https://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
masm32 : http://masm32.com/index.htm
这些是等价的吗?我应该选择哪一个来学习 windows 的组装?
【问题讨论】:
【参考方案1】:两者都是 MASM(显然),只是版本不同。我通常会使用官方(MS)链接。
MASM 现在也是 Windows SDK 的一部分 - 如果您安装它,它会在 bin
目录中包含 ML.exe
。
如果你只是用它来学习汇编语言,那么使用的 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)的默认设置,但在该环境之外基本上未使用。当前版本的 GNU as
也支持 Intel 语法,这使得大部分语法差异消失了,但 as
通常主要用作编译器的后端汇编器,而不是成熟的宏汇编器,所以它仍然有与 MASM 或 NASM/YASM 相比,功能集非常有限。
【讨论】:
如果我理解正确,那么 MASM 6.1 是用 masm32 打包的,对吗?微软的官方链接是针对 MASM 8.0 的吗?这是正确的吗? 虽然 tasm 已经死了,但 Delphi 和 Free Pascal 的内部汇编器(所谓的 BASM,但具有 TASM 风格)仍然存在。但 Embarcadero 决定将它用于 64 位 @Jumbo:不知道 MASM32 包中有什么,但您发布的 MS 链接是 MASM 8.0,是的。当前版本的 Windows SDK 附带 MASM 9.0。 (或者甚至更新,有一段时间没有下载新的 SDK)。 @Marco:BASM 和 VC++ 中的 MS 样式内联 ASM 之间没有显着差异(我能想到),两者都是 MASM 样式语法的一小部分。 TASM 一开始主要是 MASM 兼容的,所有真正的区别都在于宏汇编器功能(TASM 具有理想模式,如果我没记错的话,宏预处理器的工作方式略有不同),你不能在一开始就在内联 ASM 中访问地点。【参考方案2】:看起来,MASM32 是一个带有编辑器等的完整 SDK。您可以下载的 here 只是与 Visual C++ 2005 Express Edition 一起使用的汇编程序本身(请参阅“系统要求”)。因此,如果您想从零开始,请下载 MASM32 Sdk,据我所知,它更适合初学者。只需阅读此处的this 页面以获取有关 MASM 的更多信息。
【讨论】:
【参考方案3】:MASM32 是一个完整的 SDK,就像 joni 所说的那样。它包含一个编辑器、一些帮助文件,以及使用 MASM 语言编写代码所需的所有内容。此外,值得注意的是,MASM32 确实包含 MASM 的第 8 版。你没有错过任何东西。我个人推荐将 MASM32 作为一个包,它使开始使用 MASM 变得更加容易,但是您可以从头开始,只使用原始的 MASM 汇编程序并从那里弄清楚。
【讨论】:
以上是关于masm32和masm的区别?的主要内容,如果未能解决你的问题,请参考以下文章