joek1975
joek1975

Reputation: 3583

MASM/NASM Differences

What are the syntax differences between the NASM and MASM assemblers?

Upvotes: 56

Views: 45323

Answers (2)

Greg Hewgill
Greg Hewgill

Reputation: 993065

Section 2.2 of the NASM documentation is titled Quick Start for MASM Users which lists the important differences between NASM and MASM.

NASM version 2.15 added some MASM compatibility, including a %use masm macro package. See section 6.5 masm: MASM compatibility. Even without the macro package, ? and DUP work in data directives like db, and displacement[base+index] is allowed instead of the usual [rdi+4] syntax which NASM used to require.

Also related, How to know if an assembly code has particular syntax (emu8086, NASM, TASM, ...)? discusses some of the syntax differences.

Upvotes: 57

WRFan
WRFan

Reputation: 157

What an interesting question. The difference between them is, they are not compatible! But then again, nasm assemblers are not compatible amongst themselves, it seems. Learned it the hard way, while compiling libvpx. I think this single example says it all:

ml64.exe (MSVC 2019) -> throws

nasm for windows -> compiles some *.asm files, throws on some

invalid combination of opcode and operands

Huh?

yasm for windows -> works

llvm assembler (debian) -> throws:

    /usr/lib/llvm-13/bin/llvm-as

https://packages.debian.org/experimental/llvm-13

yasm (debian) -> works

nasm (debian) -> works

GNU assembler -> ???

https://manpages.debian.org/experimental/binutils-common/as.1.en.html

Upvotes: -3

Related Questions