endianess是否依赖于处理器或内存?

时间:2013-02-21 15:11:37

标签: memory language-agnostic hardware endianness cpu-architecture

Endianess确定单词中字节的顺序。让我们考虑以下几 记忆系统:

enter image description here

所以这是一个字节可寻址的32位内存。 如果我将十六进制值'val = 0x56789A'移动到具有字地址0的内存位置,对于大端字节将如下所示:
enter image description here
就像小端的一样:
enter image description here

但是我们知道在寄存器中,值存储为'56789A'hislef,因此如果我们有一个大的endian类型字节排序就没问题,因为值可以按正确的顺序加载。
但是在小端的情况下,订单必须逆转呢?在小端,它将被加载为'9A7856',这是错误的。
那么我们是否将它存储在内存中,(即)有一个不同的组织用于小端类型排序?如 : enter image description here
现在我们可以将字地址位置'0'的值加载到寄存器中以进行任何进一步的操作。 这是一个可能的解决方案。
但是现在它意味着结束将依赖于存储器单元布置而不是处理器......这究竟是如何工作的?
或者说,endianess完全不受内存架构的影响,而只受处理器的影响?那么endianess最终是依赖于处理器还是内存?

1 个答案:

答案 0 :(得分:3)

Endianness实际上是一个接口问题。对于32位寄存器加载,一个接口要求32位值,并且存储器接口提供一个字节数组。有些东西需要解决这个界面。如果它将字节数组解析为低阶字节进入返回值的最高有效位,则它是大端。如果它解析它的低位字节进入返回值的最低有效位,则它是小端。

所以,真正的问题是谁解决了这些接口。从技术上讲,处理器如何从内存中请求数据很重要。如果它通过说“我想要一个32位值”来请求它,则具有字节数组的存储器必须解析它。如果它通过说“我想要4个字节”来请求它,那么处理器必须在将其存储到寄存器之前解决它。

按照惯例,处理器会解析此接口。这允许内存与大端和小端处理器一起工作,因为它可以为两种类型的处理器提供相同的接口(字节数组),只需让处理器解决它无论如何都需要它。存在简单化的风险:处理器将其解析为加载/存储单元和存储器接口单元。寄存器永远不必考虑它,因为当它到达它们时,它是一个32位值,已经由存储器接口单元从它从内存请求的字节数组中解析。