我正在尝试学习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)中的默认设置,但在该环境之外基本上未使用。当前版本的GNU as
也支持Intel语法,这使得大多数语法上的区别都消失了,但是as
通常主要用作编译器的后端汇编程序,而不是成熟的宏汇编程序,因此它的功能集仍然非常有限。与MASM或NASM/YASM相比。
关于windows - masm32和masm之间有何区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4075870/