我认为标题说明了一切:)
GCC使用AT&T / GAS语法有什么特殊的实际原因(我想这主要是历史原因,但我自己找不到)。
注意:我知道这只是默认设置,您可以对其进行切换
注2:我个人认为“英特尔语法”更具可读性,所以这使我感到惊讶。
why gcc uses at&t
),我不会问这个问题。
我认为标题说明了一切:)
GCC使用AT&T / GAS语法有什么特殊的实际原因(我想这主要是历史原因,但我自己找不到)。
注意:我知道这只是默认设置,您可以对其进行切换
注2:我个人认为“英特尔语法”更具可读性,所以这使我感到惊讶。
why gcc uses at&t
),我不会问这个问题。
Answers:
GCC默认情况下使用AT&T语法,因为它最初是在使用AT&T System V(现在称为UNIX)或语法与System V非常相似的系统上编写的。
为了引导GNU操作系统,Richard Stallman询问了Amsterdam Compiler Kit(也称为Free University Compiler Kit)的作者Andrew S. Tanenbaum,是否可以将该软件用于GNU。当Tanenbaum告诉他,虽然Free University是免费的,但编译器却不是,Stallman决定自己编写。Stallman的最初计划是在Len Tower等人的帮助下,将Lawrence Livermore Laboratory的现有编译器从Pastel重写为C。Stallman为Livermore编译器编写了一个新的C前端,但随后意识到它需要兆字节的堆栈空间,这在只有64K的68000 Unix系统上是不可能的,并得出结论,他将不得不从头开始编写新的编译器。尽管Stallman确实使用了他编写的C前端,但没有Pastel编译器代码出现在GCC中。
请注意以下部分:
Stallman为Livermore编译器编写了一个新的C前端,但随后意识到它需要兆字节的堆栈空间,这在只有64K的68000 Unix系统上是不可能的...
考虑到GCC was first released March 22, 1987
*和System V Release 3 was released in 1986
**,极有可能将GCC写在SVR2或SVR3上。
维基百科的报价清楚地表明,斯托曼正在研究Lawrence Livermore Labs的设备,该设备基于Unix,因此基于SystemV。但是,在那个时候查看可用的MS-DOS / PC-DOS系统也很有趣。根据此时间线,可能是PC-DOS 1的候选版本3.2。
当时,PC(个人计算机)在学术或研究环境中并未得到广泛使用,因为PC的网络设施不如基于Unix的系统所能提供的。对于服务器/终端类型的环境,历史上也有偏好。服务器/终端系统在PC出现之前就已经可用,并且通常提供比PC所能提供的强大得多的处理能力和其他资源。
因此,尽管斯托曼本可以在PC上开发GCC,但由于他的主要工作是在Unix系统上,所以他可能不想这么做。
正如评论中指出的那样,为Unix系统和PC提供动力的CPU之间存在根本的体系结构差异。
将所有这些内容放在一起,很明显,为什么Stallman在开发GCC时选择了AT&T语法而不是Intel。
1 请注意,最简单地说是MS-DOS在3.31版之前被称为PC-DOS 。话虽如此,DOS开发的历史有很多超出了这个问题的范围。