鉴于 CPU 的字大小允许它寻址内存中的每个字节。
鉴于通过PAE http://en.wikipedia.org/wiki/Physical_address_extensionCPU 甚至可以使用比字大小更多的位来进行寻址。
CPU 无法一步读取未对齐字的原因是什么?
例如,在 32 位机器中,您可以读取从位置 0 开始的 4 字节块,但无法读取从位置 1 开始的块(可以,但需要几个步骤)。
为什么CPU不能这样做呢?
问题不在于 CPU 寻址内存中任何单个字节的能力。但它是内存,其粒度不一样。
正如 Oli 所说,这是非常特定于体系结构的,但内存芯片通常通过其数据总线宽度来寻址。这意味着给定的地址代表其数据总线的完整“字”。
让我们以 32 位 CPU 为例,它具有连接到存储设备的 32 位宽数据总线。当CPU想要访问地址处的字时0x00000000
,它确实想要访问字节0
, 1
, 2
and 3
。然而,对于存储芯片来说,这是由单个地址表示的0x00000000
.
现在当CPU想要访问地址处的字时0x00000001
,它确实想要访问字节1
, 2
, 3
and 4
。然而,对于存储芯片,这是由地址处的一段字表示的0x00000000
以及地址处的一段单词0x00000001
.
因此需要两个总线周期。
EDIT:添加一些接线图
为了说明这一点,下面是两种相反的寻址方案:
注意 RAM 芯片地址中的位移。
地址将如下所示:
// From the RAM point of view
@0x00000000: Bytes 0x00000000 to 0x00000003
@0x00000001: Bytes 0x00000004 to 0x00000007
访问双字@0x00000001
,您可以看到不可能直接寻址。您需要向 RAM 芯片询问地址处的两个双字0x00000000
and 0x00000001
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)