2011-03-03 91 views
33

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

+0

设计权衡。有关几个示例,请参阅http://en.wikipedia.org/wiki/Endianness#Optimization。 – 2011-03-03 19:42:46

回答

2

它反映考虑存储器之间的差,使其总是被与考虑它在一个时间安排一个字节的时间,其中单元的尺寸可以变化(字节,字,双字等)来组织一个单元

51

很大程度上,出于同样的原因,你在开始时加,因为携带朝着更显著数字传播至少显著位(右端)。首先放置最低有效字节允许处理器在读取偏移量的第一个字节后开始添加。

你已经做了足够的组件的编码和调试,你可以来,这不是小尾数是这样的结论后,奇怪的选择,这是奇怪的是,我们人类使用大端。

+12

附注:人类通常读数字,有时只用它们来计算。此外,我们在处理大量数量时经常不需要确切的数字 - 考虑到这一点 - 大端是人类的明智选择。 – qff 2012-08-29 03:22:27

+0

@qff你是说在大端,因为人们可以从最高位数字左到右读数,这使得更容易理解数字的数量级?对于通常从右到左阅读的人来说呢? – 2013-02-07 17:01:44

+12

阿拉伯语是从右到左书写的,这可能解释我们的编号系统的方向:对他们来说,它确实是小端! – pyon 2013-06-21 19:12:11

33

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

这时候,CTC(后来被命名为数据点)处理器开始来到英特尔索要他们的数据终端产品的帮助。最初由Victor Poor和Harry Pyle设计,它在MSI(许多芯片)中有一个逻辑处理器设计。他们要求英特尔为他们提供一个使用512位移位寄存器的存储解决方案。

这不是英特尔的心仪的产品,他们把对这些类型的定制设计工作生存的加速时间为他们的1024位的RAM芯片。 Tedd Hoff,Stan Mazor和Larry Potter研究了这个设计,并提出了一个RAM处理器。最终成为8008. Poor和Pyle因设计指令集而获奖。

,他们选择小尾数为this interview with Poor可信。它相当快跳过通过它和面试,而采用分散镜头,但相关的部分第24页:

Shustek: 因此,例如,存储号码至少显著 字节首先,从事实来这是 串行,你需要先处理低位。
差: 你不得不这样做的。你没有选择。

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

亨德利: 你从 他们对设计或任何的这些细节记得任何的推背的...
差: 一个他们是8比特的一位。他们想要一个8位宽的部分,并且最终,他们是如何构建它的 。
差: 但它仍在循环。但是,你看,有很多有趣的观点是否会有一个大的结局,或者一个小的结局部分可能在那个时候被改变,但是我们没有。我们刚刚离开它...
亨德里: 即使你去了八位?
差: 没错。这也就是为什么英特尔 产品线是这样今天

最终CTC没有使用8008,这一年结束了为时已晚,他们已经通过实施再微星处理器。微处理器的设计当然是CTC的知识产权,但他们将设计成本交由Intel处理。错误的位:)关于专利权的法律适用于后来。

因此,据了解,由于串行端口的工作方式,英特尔最终以小端技术结束。

+0

嗯,这是一个非常好的答案,我可以正确地说串口是串口工作的,如果情况是big-endian,那么在每次操作中都只是浪费CPU。我想我的理解是正确的,所以第二个问题,仍然是小端是一个要求?我认为串口现在是遗留的,不是吗?或者还有其他什么原因需要设计成小端? – FZE 2016-03-28 13:32:07

+2

确实需要坚持使用字节顺序来保持程序在体系结构更改中的兼容性。串行端口并不完全是遗留的,在嵌入式设计中仍然很常见,许多USB和蓝牙设备供应商通过串行端口api通过仿真设备驱动程序中的串行端口将接口暴露给其设备。 – 2016-03-28 13:45:48

+0

谢谢先生的进一步解释。 – FZE 2016-03-28 14:46:04