汇编语言语法标准

时间:2015-11-26 12:14:07

标签: assembly syntax nasm masm

为什么汇编语言语法不同,即使对于相同的操作系统和指令集也是如此?例如,对于Windows, NASM 具有不同的语法而不是 MASM 。为什么没有任何语法标准?

1 个答案:

答案 0 :(得分:5)

出于同样的原因,有多个Unix shell(bash,zsh,dash,Solaris&non-POSIX-sh /bin/sh等等):有人决定制作一个新的实现语言(或大多数兼容的语言),因为他们对现有语言或其具体实现并不感兴趣。 (除了功能,原因可能包括:旧的实现是非自由的,不能移植到他们想要的平台,速度慢等等。)

如果你做了一些挖掘并找到了历史,这将是一个更好的问题。哪一个先出现?

我一直认为NASM更加明智,内存引用始终使用[addr],而不是试图从符号声明中推断出操作数大小。我认为NASM应该允许mov reg, OFFSET symbol,所以无论你使用哪个汇编程序,你都可以毫不含糊地写出汇总到mov r32, imm32的内容(就像你总是可以使用[mem]作为MASM一样。)虽然您可以将OFFSET定义为扩展为空字符串的宏。

AT& T语法来自Unix,使用AT& T语法,用于Unix通常运行的RISC架构。 GNU gcc(或者为x86发明AT& T语法的人)遵循这一传统。请参阅this excellent answer,了解为什么AT& T语法如此奇怪(或多或少)。