字可寻址和字节可寻址之间的区别

时间:2010-04-27 19:39:05

标签: memory operating-system cpu-architecture

有人可以解释WordByte可寻址之间的区别吗?它与内存大小等有什么关系?

3 个答案:

答案 0 :(得分:30)

Memory units 可寻址。这是我们使用内存的唯一方法。

实际上,记忆仅为 byte addressable 。这意味着:

  • 二进制地址始终仅指向a single 字节
  • 只是a group of 字节 - 248,具体取决于数据总线size of CPU。

要完全理解 memory operation ,您必须熟悉 CPU 的各种寄存器 RAM 的内存端口。我假设你知道他们的意思:


  • MAR 内存地址寄存器
  • MDR 内存数据寄存器
  • PC 程序计数器寄存器
  • MBR 内存缓冲寄存器

RAM two内存端口

  1. 32-bits 数据 / 地址
  2. 8-bit OPCODE

  3. 假设 CPU 想要从地址中读取a (比如4 字节 xyz以后。 CPU会将地址置于 MAR ,将内存读取信号发送到内存控制器芯片。收到地址读取信号后,内存控制器会将数据总线连接到32-bit < strong>端口和4 bytes地址 xyz开始会从端口流向 MDR

    如果 CPU 想要获取下一个指令,它会将地址放到 PC寄存器上并向内存控制器发送提取信号。收到地址并获取信号后,内存控制器会将数据总线连接到 {{1位于地址 8字节长 操作码会流出<强> RAM 进入 CPU MDR

    当我们说某个寄存器 内存可寻址字节可寻址时,这意味着什么。现在,当您在a singledecimal 2说明 MAR ,并打算阅读 binary时会发生什么,不是(字节没有2)?

    Word 没有2表示字节 2456表示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的历史记录部分。)