为什么x86是little endian?

为什么x86是little endian?,x86,intel,endianness,cpu-architecture,microprocessors,X86,Intel,Endianness,Cpu Architecture,Microprocessors,我最近一直在问自己的一个真正的问题是,是什么样的设计选择导致x86成为一种小端体系结构而不是一种大端体系结构?它反映了考虑内存总是一次组织一个字节与考虑内存一次组织一个单元之间的区别,单元的大小可能会发生很大变化(字节、字、dword等)这与添加时至少从最低有效位(右端)开始相同,因为进位会向更高有效位传播。将最低有效字节放在第一位允许处理器在只读取偏移量的第一个字节后开始加法 在你完成了足够多的汇编编码和调试之后,你可能会得出结论,这不是小端,而是一个奇怪的选择。奇怪的是,我们人类使用大端。这

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

它反映了考虑内存总是一次组织一个字节与考虑内存一次组织一个单元之间的区别,单元的大小可能会发生很大变化(字节、字、dword等)

这与添加时至少从最低有效位(右端)开始相同,因为进位会向更高有效位传播。将最低有效字节放在第一位允许处理器在只读取偏移量的第一个字节后开始加法


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

这是非常符合考古的,但很可能不是英特尔的选择。英特尔设计的处理器主要考虑的是向后兼容性,因此可以轻松地将汇编代码从旧体系结构机械转换为新体系结构。这就把时钟从8086调回8080,回到了第一个微处理器上,在这个微处理器上,端性非常重要

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

这不是英特尔最喜欢的产品,他们承担了这些定制设计工作,以在1024位RAM芯片的加速期内生存下来。泰德·霍夫(Tedd Hoff)、斯坦·马佐尔(Stan Mazor)和拉里·波特(Larry Potter)研究了该设计,并提出了一种带有RAM的大规模集成电路处理器。最终成为了8008。Poor和Pyle被认为是设计指令集的功臣

他们选择小恩迪安是可信的。它跳过它相当快,采访相当分散,但第24页的相关部分:

舒斯特克: 例如,存储最不重要的数字 字节第一,来自这样一个事实,即 串行,您需要先处理低位。
差: 你必须那样做。你别无选择。

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

亨德利: 你还记得有人推过你吗 向他们介绍设计或任何这些细节…
差: 其中一个是1位对8位。他们想要一个8位宽的部件,最终,这就是 他们是如何建造的。
差: 但它仍然在循环。但是,你看,有一些有趣的观点是否会有 一个大头或者一个小头的部分在那一点上是可以改变的,但我们没有。我们刚刚离开了…
亨德利: 甚至在你进入8比特之后?
差: 正确的。这就是为什么英特尔 今天的产品线就是这样

英特尔的斯坦·马佐尔(Stan Mazor)设计了4004和8008,他在以下方面详细阐述了“推回”的含义:

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

所以,英特尔想用8个独立的引脚来构建字节并行CPU,以便访问数据总线。Stephen P.Morse等人解释了英特尔坚持妥协的原因:

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

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


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

设计权衡。请看两个例子。旁注:人类大多阅读数字,有时仅用于计算。此外,在处理大量数据时,我们通常不需要精确的数字——考虑到这一点,大端是人类明智的选择。@qff你是说大端是这样的,因为人们可以从左到右读取fr