为什么GCC默认使用AT&T语法?


9

我认为标题说明了一切:)

GCC使用AT&T / GAS语法有什么特殊的实际原因(我想这主要是历史原因,但我自己找不到)。

注意:我知道这只是默认设置,您可以对其进行切换

注2:我个人认为“英特尔语法”更具可读性,所以这使我感到惊讶。


3
除非您追捕添加了该功能的人员并询问“为什么”,否则答案可能是未知的。

1
@MichaelT我知道这种可能性,但我仍然找到了一个非常有趣的话题……也许有人看到了一些报价。
Vyktor 2014年

像这样的@Vyktor问题有时无法回答,但是我仍然发现计算机科学历史很有趣,即使在“ 主题 ” 的灰色区域

@Snowman同意了,但是如果我想到做GlenH7所做的事情(去gcc历史而不是谷歌搜索why gcc uses at&t),我不会问这个问题。
Vyktor 2014年

Answers:


13

GCC默认情况下使用AT&T语法,因为它最初是在使用AT&T System V(现在称为UNIX)或语法与System V非常相似的系统上编写的。

来自GCC上的Wikipedia

为了引导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开发的历史有很多超出了这个问题的范围。


我不明白我怎么会错过“ 由于Unix是在AT&T贝尔实验室创建的,因此Intel语法在MS-DOS和Windows世界中占主导地位,而AT&T语法在Unix世界中占主导地位。 ”如此直接。
Vyktor 2014年

但是,这个答案没有触及的是为什么GAS在许多其他CPU体系结构中使用“本机”语法。在我看来,x86 CPU实际上是使用AT&T语法的少数几个。
Dolda2000 '16

“ ...为Unix系统和PC提供动力的CPU之间存在根本的体系结构差异。” ??CPU是一样的。指令集架构是相同的。对于相同的基础体系结构,AT&T语法一直是替代符号。对?
Maxpm

1
@Maxpm-CPU不一样,这就是大型字节序与小型字节序体系结构很重要的地方。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.