有人可以解释Word
和Byte
可寻址之间的区别吗?它与内存大小等有什么关系?
答案 0 :(得分:30)
Memory units 可寻址。这是我们使用内存的唯一方法。
实际上,记忆仅为 byte addressable 。这意味着:
a single
字节。 a group of
字节 - 2
,4
,8
,具体取决于数据总线size of
CPU。要完全理解 memory operation ,您必须熟悉 CPU 的各种寄存器和 RAM 的内存端口。我假设你知道他们的意思:
RAM 有two
种内存端口:
32-bits
数据 / 地址 8-bit
OPCODE 。 假设 CPU 想要从地址中读取a
字(比如4
字节) xyz
以后。 CPU会将地址置于 MAR ,将内存读取信号发送到内存控制器芯片。收到地址和读取信号后,内存控制器会将数据总线连接到32-bit
< strong>端口和4 bytes
从地址 xyz
开始会从端口流向 MDR 强>
如果 CPU 想要获取下一个指令,它会将地址放到 PC寄存器上并向内存控制器发送提取信号。收到地址并获取信号后,内存控制器会将数据总线连接到 {{1位于地址的8
字节长 操作码会流出<强> RAM 进入 CPU 的 MDR 。
当我们说某个寄存器 内存可寻址或字节可寻址时,这意味着什么。现在,当您在a single
中decimal 2
说明 MAR ,并打算阅读字 binary
时会发生什么,不是(字节没有2
)?
Word 没有2
表示字节 2
,4
,5
,6
表示7
机器。 实际内存仅字节可寻址。因此,有一个技巧来处理字寻址。
当 MAR 放置在地址总线时,其32-bit
位不会映射到32
地址行< / strong>(分别为32
)。相反, MAR 0-31
连接到地址总线 bit 0
, MAR line 2
连接到< strong>地址总线 bit 1
等等。 MAR 的上限line 3
将被丢弃,因为仅2 bits
上方的字地址才需要它们2^32
这些都不属于32 bit
机器
使用此映射,当 MAR 为1
时,address 4
将放在总线上,当 MAR 为{{ 1}},2
放在总线上,依此类推。
一开始理解起来有点困难。我是从 Andrew Tanenbaums 的结构化computer organisation 中学到的。
答案 1 :(得分:4)
此图片应易于理解: http://i.stack.imgur.com/rpB7N.png
简单地说,
•在字节寻址方案中,第一个字从地址0开始,然后 第二个字从地址4开始。
•在字寻址方案中,定位第一个字的所有字节 在地址0中,第二个字的所有字节都位于地址1中。
当我们考虑一次处理一个字节数据的应用程序时,字节可寻址性的优势很明显。在字节可寻址系统中访问单个字节仅需要发出单个地址。在16位字可寻址系统中,首先必须计算包含字节的字的地址,获取该字,然后从双字节字中提取字节。尽管很好地理解了字节提取的过程,但它们的效率低于直接访问字节的效率。出于这个原因,许多现代机器都是字节可寻址的。
答案 2 :(得分:1)
可寻址性是具有自己地址的内存单元的大小。它也是你可以在不影响其邻居的情况下修改的最小内存块。
例如:一台机器,其中字节是正常的8位,字大小= 4字节。如果它是可单词寻址的机器,那么int
的第二个字节的地址就不存在了。处理字符串(例如像char str[]
这样的数组)变得不方便,因为您仍然存储打包在一起的字符。仅修改str[1]
意味着加载包含它的单词,执行一些移位/和/或操作以应用更改,然后执行单词存储。
请注意,这与不允许未对齐字加载/存储(其中字地址的低2位必须为0)的机器不同。这种机器通常有一个字节加载/存储指令。我们甚至没有谈论机器。
CPU地址实际上可能仍包含低位,但要求它们始终为零(或忽略它们)。然而,在检查它们为零之后,可以将其丢弃,因此存储器系统的其余部分仅看到字地址,其中两个相邻字具有相差1(而不是4)的地址。但是,在一个16位CPU上,寄存器只能容纳64k个不同的地址,你不可能这样做。每个单独的CPU地址将引用不同的2字节内存,而不是丢弃低位。 2B字可寻址存储器可以让你处理128kiB的存储器,而不仅仅是带有字节可寻址存储器的64kiB。
有趣的事实:ARM曾经使用地址的低2位作为未对齐字加载的随机控制。 (但它总是有字节加载/存储指令。)
另见:
请注意,可以存在位寻址存储器,但不存在。现在,8位字节几乎是普遍标准的。 (古代计算机有时会有更大的字节,请参阅wikipedia's Byte article的历史记录部分。)