为什么x86是小端?

bfr*_*rog 44 x86 intel cpu-architecture endianness microprocessors

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

I. *_*edy 62

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

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

  • 旁注:人类主要阅读数字,有时只使用它们进行计算.此外,在处理大量数据时,我们通常不需要确切的数字 - 考虑到这一点 - 大端是人类的明智选择. (16认同)
  • 阿拉伯语是从右到左书写的,这可能解释了我们的编号系统的方向:对于他们来说,它确实是小端的! (15认同)
  • @Marisha注意历史顺序:1)发明阿拉伯数字,小端;2)欧洲文化复制粘贴阿拉伯数字和数学符号,没有调整相反的书面语言方向,导致字节序翻转;3)现代美国文化源自欧洲文化,包括大端数字表示法;4) 计算器被发明,其用户界面和输入风格(最重要的数字在前)变得标准化,首先在美国和欧洲世界;5)现代计算器传入阿拉伯世界;大多数相关人员都认为输入顺序是理所当然的。 (4认同)
  • @pyon 不管是不是在开玩笑,这个小事实可以带来很多深刻的见解——关于历史、关于用户界面、关于事物如何在没有调整的情况下传播,而这些调整本来是有意义的,或者由于诸如倒退等外部因素而孤立地达到最佳状态或交叉兼容性,关于人们如何发现事物直观,主要是因为他们花了足够的时间通过习惯而不是任何内在原因来扭曲他们的思想,以及关于人们如何经常容忍事实上的“标准”的反直觉方面“接口足够多,以至于我们听不到也看不到变化。 (3认同)
  • @qff你是说大端语,因为人们可以从最重要的数字从左到右阅读,它更容易理解数字的数量级?那些通常从右到左阅读的人呢? (2认同)
  • @mtraceur但是......“阿拉伯”数字不是阿拉伯人发明的,它们是在印度发明的,印度大多数文字都是从左到右的,包括首先与印度教数字一起使用的梵文文本。这使得你的“历史排序”相当非历史,或者至少是误导性的不完整。 (2认同)

Han*_*ant 44

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

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

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

他们选择小尾数是可信就此采访了可怜的.它很快就会跳过它而且面试相当分散但第24页的相关部分:

Shustek:所以,例如,首先存储数字最低有效字节,来自这是串行的事实,你需要先处理低位.
可怜: 你必须这样做.你别无选择.

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

Hendrie: 你还记得他们对设计或其中任何细节的任何回击......
可怜: 其中一个是一位而不是8位.他们想要一个8位宽的部分,最终,他们是如何构建它的.
差: 但它还在循环中.但是,你看,有一些有趣的观点是,在这一点上是否会有一个大的结尾或一个小的结尾部分,但我们没有.我们离开了......
Hendrie: 即使你去了8位?
差: 对.这就是英特尔产品线今天就是这样的原因

英特尔的Stan Mazor负责设计4004和8008,详细阐述了英特尔8008微处理器口述历史面板中的"推迟" :

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

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

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

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

因此,正如所述,由于串行端口的工作方式,英特尔最终得到了小端.

  • 我认为上面的评论混淆了串行端口和串行处理器。Datapoint 2200 有一个串行处理器,每次只处理一位,具有 1 位总线、1 位 ALU 和串行移位寄存器存储器。这与串行端口无关。 (4认同)
  • 当然需要坚持使用字节序选择来保持程序在架构更改之间的兼容性.串行端口尚未完全遗留,在嵌入式设计中仍然很常见,许多USB和蓝牙设备供应商通过在其设备驱动程序中模拟串行端口,通过串行端口api向其设备公开接口. (3认同)
  • 在过去的十年中,串行总线通常会出现问题:并行端口和其他一切由USB替代,PCI替换为PCI-express(每个通道是一个单独的串行链路),IDE和SCSI由SATA和SAS取代.HDMI和DisplayPort也是串行协议IIRC.RS232可能已经过时,但一般来说串行绝对不是.IDK对于我提到的任何串行协议的选择是什么. (3认同)

Ted*_*opp 2

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

  • 问题不在于为什么字节序是一个问题,而是为什么英特尔选择小字节序而不是当时更常见的(?)大字节序。 (6认同)