【问题标题】:MASM/NASM DifferencesMASM/NASM 差异
【发布时间】:2011-01-03 09:25:18
【问题描述】:

NASM 和 MASM 汇编器在语法上有什么区别?

【问题讨论】:

标签: assembly x86 nasm masm


【解决方案1】:

NASM 文档的第 2.2 节标题为 Quick Start for MASM Users,其中列出了 NASM 和 MASM 之间的重要区别。

【讨论】:

  • 在该部分中声明:“NASM 区分大小写” 但是,MASM 也可以区分大小写,只需使用:option casemap :none
【解决方案2】:

多么有趣的问题。它们之间的区别是,它们不兼容!但话又说回来,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

【讨论】:

  • GAS / llvm-as 在.intel_syntax noprefix 模式下使用的语法几乎是 MASM 指令,但带有特定于它们的指令。
  • nasm -felf64 foo.asm 无论您在什么主机上构建,都应该以相同的方式工作。如果你有一些在 Linux 上而不是 Windows 上汇编的 asm 文件,这可能是因为构建的位数不同(例如 nasm -fwin32nasm -felf64),或者与指令有关的东西,或者 .asm 可能使用了 %if 条件内容an 在 Windows 上做了不同的事情。)没有说明的例子,说 NASM on windows 错误是没有用的。什么,一般在每个文件上?不,当然不是。
猜你喜欢
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 2020-05-13
  • 2020-09-03
  • 2014-01-03
相关资源
最近更新 更多