汇编语言语法标准
Assembly language syntax standard
为什么即使对于相同的操作系统和指令集,汇编语言 语法也不同 ?例如 NASM 与 windows 的 MASM 具有 不同的语法 。为什么没有任何语法标准?
出于同样的原因,有多个 Unix shell(bash、zsh、dash、Solaris 的非 POSIX-sh /bin/sh
等):有人决定对该语言(或大部分兼容的语言)进行新的实现,因为他们不喜欢现有语言或其特定实现的某些方面。 (除了特性之外,原因可能包括:旧的实现是非免费的、不能移植到他们想要的平台、速度慢等)
如果你做了一些挖掘并找到了历史,这将是一个更好的问题。哪个先来?
我一直认为 NASM 更明智,内存引用总是使用 [addr]
,而不是试图从符号声明中推断 ope运行d 大小。我认为 NASM 应该允许 mov reg, OFFSET symbol
,这样你就可以明确地将 assemble 写成 mov r32, imm32
,而不管你使用的是哪个 assembler(就像您始终可以对 MASM 使用 [mem]
。)尽管您可以将 OFFSET
定义为扩展为空字符串的宏。
AT&T 语法来自 Unix,使用 AT&T 语法用于 Unix 通常 运行 的 RISC 架构。 GNU gcc(或为 x86 发明 AT&T 语法的人)遵循了这一传统。请参阅 this excellent answer 了解为什么 AT&T 语法如此奇怪(或多或少)的问题。
为什么即使对于相同的操作系统和指令集,汇编语言 语法也不同 ?例如 NASM 与 windows 的 MASM 具有 不同的语法 。为什么没有任何语法标准?
出于同样的原因,有多个 Unix shell(bash、zsh、dash、Solaris 的非 POSIX-sh /bin/sh
等):有人决定对该语言(或大部分兼容的语言)进行新的实现,因为他们不喜欢现有语言或其特定实现的某些方面。 (除了特性之外,原因可能包括:旧的实现是非免费的、不能移植到他们想要的平台、速度慢等)
如果你做了一些挖掘并找到了历史,这将是一个更好的问题。哪个先来?
我一直认为 NASM 更明智,内存引用总是使用 [addr]
,而不是试图从符号声明中推断 ope运行d 大小。我认为 NASM 应该允许 mov reg, OFFSET symbol
,这样你就可以明确地将 assemble 写成 mov r32, imm32
,而不管你使用的是哪个 assembler(就像您始终可以对 MASM 使用 [mem]
。)尽管您可以将 OFFSET
定义为扩展为空字符串的宏。
AT&T 语法来自 Unix,使用 AT&T 语法用于 Unix 通常 运行 的 RISC 架构。 GNU gcc(或为 x86 发明 AT&T 语法的人)遵循了这一传统。请参阅 this excellent answer 了解为什么 AT&T 语法如此奇怪(或多或少)的问题。