为什么x86是小端?

时间:2011-03-03 19:33:29

标签: x86 intel endianness cpu-architecture microprocessors

我最近一直在问自己的一个真正的问题是,设计选择带来了x86是一个小端架构而不是大端架构?

3 个答案:

答案 0 :(得分:60)

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

在你完成了足够的汇编编码和调试后,你可能会得出这样的结论:这不是一个奇怪的选择 - 我们人类使用big endian是奇怪的。

答案 1 :(得分:42)

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

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

这不是英特尔最喜欢的产品,他们采用这些定制设计工作来维持其1024位RAM芯片的加速时间。 Tedd Hoff,Stan Mazor和Larry Potter研究了设计并提出了一个带RAM.instead的LSI处理器。这最终变成了8008.穷人和派尔被认为是设计指令集。

他们选择小端是可信的this interview with Poor。它相当快地跳过它,面试相当分散,但第24页的相关部分:

  

<强> Shustek :    因此,例如,存储最不重要的数字   字节优先,来自事实,这是   串行,您需要先处理低位   的差:     你必须那样做。你别无选择。

&#34;没有选择&#34;备注很奇怪,似乎只适用于MSI处理器的位串行设计。也是他们购买移位寄存器而不是RAM的原因。它在第34页再次出现:

  

<强>亨德里:     你还记得任何一次回击吗?   他们关于设计或任何这些细节......
  的差:     其中一个是一位而不是8位。他们想要一个8位宽的部分,最终还是那个   他们是如何建造它的   的差:     但它仍在循环中。但是,你看,有一些有趣的观点是否会成为现实   一个大的结束或一个小的结束部分可能已经改变了,但我们没有。我们离开了...
  的亨德里:     即使你去了8位?   的差:     对。这就是英特尔的原因   产品线就是这样的

英特尔的Stan Mazor,负责设计4004和8008,详细阐述了&#34;推回&#34;在Oral History Panel on Intel 8008 Microprocessor中:

  

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

因此,英特尔希望构建具有8个独立引脚的字节并行CPU,以访问数据总线。英特尔坚持妥协的原因在"Intel Microprocessors: 8008 to 8086"由Stephen P. Morse等人解释:

  

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

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

因此,据说,由于串口工作的方式,英特尔最终得到了小端。

答案 2 :(得分:3)

它反映了考虑内存总是一次组织一个字节与考虑一次组织一个单元之间的差异,其中单元的大小可以变化(字节,字,双字等)< / p>