【发布时间】:2011-01-03 09:25:18
【问题描述】:
NASM 和 MASM 汇编器在语法上有什么区别?
【问题讨论】:
NASM 和 MASM 汇编器在语法上有什么区别?
【问题讨论】:
NASM 文档的第 2.2 节标题为 Quick Start for MASM Users,其中列出了 NASM 和 MASM 之间的重要区别。
【讨论】:
多么有趣的问题。它们之间的区别是,它们不兼容!但话又说回来,nasm 汇编器之间似乎不兼容。在编译 libvpx 时很难学会。我认为这个例子说明了一切:
ml64.exe (MSVC 2019) -> 抛出
nasm for windows -> 编译一些 *.asm 文件,抛出一些
invalid combination of opcode and operands
嗯?
yasm for windows -> 工作
llvm 汇编器 (debian) -> 抛出:
/usr/lib/llvm-13/bin/llvm-as
https://packages.debian.org/experimental/llvm-13
yasm (debian) -> 工作
nasm (debian) -> 有效
GNU 汇编器 -> ???
https://manpages.debian.org/experimental/binutils-common/as.1.en.html
【讨论】:
.intel_syntax noprefix 模式下使用的语法几乎是 MASM 指令,但带有特定于它们的指令。
nasm -felf64 foo.asm 无论您在什么主机上构建,都应该以相同的方式工作。如果你有一些在 Linux 上而不是 Windows 上汇编的 asm 文件,这可能是因为构建的位数不同(例如 nasm -fwin32 与 nasm -felf64),或者与指令有关的东西,或者 .asm 可能使用了 %if 条件内容an 在 Windows 上做了不同的事情。)没有说明的例子,说 NASM on windows 错误是没有用的。什么,一般在每个文件上?不,当然不是。