27

有人可以解释一下WordByte可寻址之间有什么不同吗?它与内存大小等有什么关系?

4

3 回答 3

37

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

实际上,内存只能按字节寻址。它的意思是:

  • 二进制地址总是只指向a single 字节
  • 一个只是a group of 字节2, 4,8取决于 CPU 的数据总线size of

要全面了解内存操作,必须熟悉CPU的各种寄存器RAM内存端口。我假设您知道它们的含义:


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

RAMtwo多种内存端口

  1. 32-bits用于数据/地址
  2. 8-bit对于操作码

假设CPU想要从地址开始读取a (比如4 字节) 。CPU 会将地址放在MAR上,向内存控制器芯片发送内存读取信号。在接收到地址读取信号后,内存控制器会将数据总线连接到端口,并从地址开始从端口流出到MDR xyz32-bit 4 bytes xyz

如果CPU想要获取下一条指令,它会将地址放到PC 寄存器中并向内存控制器发送一个获取信号。接收到地址和取指信号后,内存控制器会将数据总线连接到位端口,位于接收到的地址处的字节长操作码将从RAM流出到CPUMDR8a single

这就是我们说某个寄存器内存可寻址字节可寻址的意思。现在,当您输入MAR并打算读取单词而不是(字节编号)时会decimal 2发生什么?binary 22

Word no2表示机器的字节 4, 5, 6, 732-bit实际物理内存中,只能按字节寻址。所以有一个技巧来处理字寻址

MAR放置在地址总线上时,它的位32不映射到32 地址线0-31分别)。相反,MAR bit 0连接到地址总线 line 2MAR bit 1连接到地址总线 line 3,依此类推。MAR2 bits的上部被丢弃,因为它们只需要高于我们机器的任何一个字地址都不是合法的。 使用此映射,当MAR为时,放在总线上,当MAR为时,放在总线上2^3232 bit
1address 42address 8等等。

一开始有点难以理解。我是从Andrew Tanenbaums结构化计算机组织中学到的。

于 2011-02-15T01:00:16.083 回答
9

这张图片应该很容易理解:http: //i.stack.imgur.com/rpB7N.png

简单的说,

• 在字节寻址方案中,第一个字从地址 0 开始,第二个字从地址 4 开始。

• 在字寻址方案中,第一个字的所有字节都位于地址 0,第二个字的所有字节都位于地址 1。

当我们考虑一次处理一个字节的数据的应用程序时,字节寻址能力的优势就很明显了。在字节可寻址系统中访问单个字节只需要发出单个地址。在 16 位字可寻址系统中,首先必须计算包含该字节的字的地址,取出该字,然后从两字节字中提取该字节。尽管字节提取的过程很好理解,但它们的效率不如直接访问字节。出于这个原因,许多现代机器都是字节可寻址的。

于 2016-02-06T04:51:05.997 回答
3

可寻址性是具有自己地址的内存单元的大小。它也是您可以在不影响其邻居的情况下修改的最小内存块。

例如:一台机器,其中字节是正常的 8 位,字大小 = 4 字节。如果它是一台可字寻址的机器,那么就没有int. 处理字符串(例如,类似 的数组char str[])变得不方便,因为您仍然将字符存储在一起。修改只是str[1]意味着加载包含它的单词,进行一些移位/和/或操作以应用更改,然后进行单词存储。

请注意,这与不允许未对齐字加载/存储的机器不同(其中字地址的低 2 位必须为 0)。此类机器通常具有字节加载/存储指令。我们谈论的是没有那个的机器。

CPU 地址实际上可能仍然包含低位,但要求它们始终为零(或忽略它们)。但是,在检查它们是否为零之后,可以将其丢弃,因此内存系统的其余部分只能看到字地址,其中两个相邻字的地址相差 1(而不是 4)。但是,在一个寄存器只能保存 64k 个不同地址的 16 位 CPU 上,您不太可能这样做。每个单独的 CPU 地址将引用不同的 2 字节内存,而不是丢弃低位。2B 字可寻址内存可让您寻址 128kiB 的内存,而不仅仅是 64kiB 的字节可寻址内存。

有趣的事实:ARM 曾经使用地址的低 2 位作为未对齐字加载的随机控制。(但它总是有字节加载/存储指令。)


也可以看看:


请注意,位寻址存储器可能存在,但不存在。8 位字节现在几乎是通用标准。(古代计算机有时有更大的字节,请参阅维基百科字节文章的历史部分。)

于 2016-08-25T01:27:33.873 回答