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