汇编语言语法标准

Ven*_*Ven 0 syntax assembly masm nasm

为什么即使对于相同的操作系统和指令集,汇编语言的语法不同?例如NASM不同的语法MASM的窗口.为什么没有任何标准的语法?

Pet*_*des 5

出于同样的原因,有多个Unix shell(bash,zsh,dash,Solaris的非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语法的人)遵循了这一传统.看到这个关于为什么AT&T语法如此奇怪(或多或少)的问题的优秀答案.