57

我最近一直在问自己一个真正的问题是,是什么设计选择导致 x86 成为小端架构而不是大端架构?

4

3 回答 3

84

很大程度上,出于同样的原因,当您添加时,您从最低有效数字(右端)开始 - 因为进位传播到更高有效数字。将最低有效字节放在第一位允许处理器在仅读取偏移量的第一个字节后开始添加。

在你完成了足够多的汇编编码和调试之后,你可能会得出这样的结论:奇怪的选择并不是小端序——我们人类使用大端序是很奇怪的。

于 2011-03-11T07:29:23.423 回答
69

这很有考古学意义,但很可能不是英特尔的选择。英特尔设计的处理器具有向后兼容性是主要关注点,可以轻松地将汇编代码从旧架构机械转换为新架构。这将时钟从 8086 降到 8080 到第一个字节序很重要的微处理器,英特尔 8008

该处理器是在 CTC(后来命名为 DataPoint)来英特尔寻求有关其数据终端产品的帮助时启动的。最初由 Victor Poor 和 Harry Pyle 设计,它在 MSI(许多芯片)中具有逻辑处理器设计。他们要求英特尔为他们提供存储解决方案,使用 512 位移位寄存器。

那不是英特尔最喜欢的产品,他们承担了这些定制设计工作,以度过他们的 1024 位 RAM 芯片的加速时间。Tedd Hoff、Stan Mazor 和 Larry Potter 研究了该设计,并提出了一个带有 RAM.in 的 LSI 处理器。这最终成为了 8008。Poor 和 Pyle 因设计指令集而受到赞誉。

从这次对 Poor 的采访中,他们选择了 little-endian 是可信的。它相当快地跳过它,采访相当分散,但第 24 页的相关部分:

Shustek:例如,首先存储数字的最低有效字节是因为这是串行的,您需要先处理低位。
普尔: 你必须那样做。你别无选择。

“别无选择”的说法很奇怪,这似乎只适用于 MSI 处理器的位串行设计。这也是他们购买移位寄存器而不是 RAM 的原因。它再次出现在第 34 页:

Hendrie: 你还记得他们对设计或任何这些细节的任何反对吗?
Poor: 其中之一是一位与 8 位。他们想要一个 8 位宽的部分,最终,这就是他们构建它的方式。
普尔: 但它仍在循环。但是,你看,有一些有趣的点,无论是大结局还是小结局部分都可以在那个时候改变,但我们没有。我们刚刚离开它...
Hendrie: 即使在你去了八位之后?
穷: 对。这就是为什么今天的英特尔产品线如此

从事 4004 和 8008 设计的英特尔的 Stan Mazor在英特尔 8008 微处理器的口述历史面板中详细阐述了“推回” :

最后,Datapoint 的原始设计……他们想要的是一台 [bit] 串行机器。如果你考虑一台串行机器,你必须一次处理所有的地址和数据,这样做的合理方法是:低位到高位,因为这是进位传播的方式。因此,这意味着在跳转指令本身中,将 14 位地址放入串行机器的方式是向后的,正如您所看到的那样,因为这就是您想要处理它的方式。好吧,我们要构建一个字节并行机器,而不是位串行和我们的妥协(本着客户的精神,只是为了他),我们把字节倒过来。我们将低字节[放在首位],然后是高字节。这后来被称为“小尾数”格式,它有点与你认为的自然相反。出色地,我们为 Datapoint 做到了。如您所见,他们从未使用过 [8008] 芯片,因此在某种意义上这是“一个错误”,但 [Little Endian 格式] 一直存在于 8080 和 8086 中,并且 [是] 标志之一这个家庭的。

因此,英特尔希望构建具有 8 个独立引脚的字节并行 CPU,用于访问数据总线。英特尔坚持妥协的原因在Stephen P. Morse 等人的《英特尔微处理器:8008 到 8086》中进行了解释:

这种从 8008 演变而来的所有处理器都受到困扰的反向存储是与 Datapoint 位串行处理器兼容的结果,该处理器从低位到高位处理地址。在 256 x 8 内存芯片流行的早期,这种倒置存储确实有一个优点:它允许所有内存芯片选择一个字节并将其锁存以输出,同时等待选择该芯片的六个高位。这加快了内存访问。

最终CTC没有使用8008,晚了一年才完成,那时他们已经实现了MSI处理器。微处理器设计当然是 CTC 的知识产权,但他们以设计成本与英特尔交换了它的权利。有点错误 :) 关于专利权的诉讼紧随其后。

因此,如前所述,由于串行端口的工作方式,英特尔最终采用了 little-endian。

于 2016-03-28T13:21:06.633 回答
2

它反映了考虑内存总是一次组织一个字节与考虑一次组织一个单元之间的区别,其中单元的大小可以变化(字节、字、双字等)。

于 2011-03-03T19:39:09.360 回答