有人可以解释Word
和Byte
寻址之间有什么不同吗?它与内存大小等有什么关系?字寻址和字节寻址的区别
回答
一个字节是用于存储的存储器单元,并且存储器芯片充满了这些字节。内存单元是可寻址的。这是我们可以使用记忆的唯一途径。
实际上内存只能字节寻址。 这意味着一个二进制地址总是指向单个字节。一个字只是一组字节– 2,4,8,具体取决于CPU的数据总线大小。
要充分理解存储器操作,您必须熟悉CPU的各种寄存器和RAM的存储器端口。我假设你知道'MAR存储器地址寄存器','MDR存储器数据寄存器','PC程序计数器寄存器','MBR存储器缓冲寄存器'的含义。 RAM有两个存储器端口:32位用于数据/地址,8位用于OPCODE。
假设CPU想从地址xyz开始读取一个单词(比如说4个字节)。 CPU会将地址放在MAR上,并向内存控制器芯片发送内存读取信号。在接收到地址和读信号后,内存控制器将数据总线连接到32位端口,从地址xyz开始的4个字节将从端口流出到MDR。
如果CPU想要获取下一条指令,它会将地址放到PC寄存器中并向存储控制器发送一个提取信号。接收到地址和提取信号后,存储器控制器将数据总线连接到8位端口,位于接收地址的单字节长操作码将流出RAM到CPU的MDR。
所以这就是我们说某个寄存器是'内存寻址'或'字节寻址'的意思。现在会发生什么事情,当你在MAR上用二进制表示二进制数字时,有意读“2”字,而不是(字节号2)?
字数2表示32位机器的字节数4,5,6,7。实际上,物理内存只能字节寻址。所以有处理'字寻址'的技巧。
当MAR位于地址总线上时,其32位不会分别映射到32位地址线0-31上。相反,MAR位0连接到地址总线2,MAR位1连接到地址总线3,依此类推。 MAR的高2位被丢弃,因为它们只用于高于2^32的字地址,而这些地址对于我们的32位机器都不合法。
使用这种映射,当MAR为1时,地址4被放到总线上,当MAR是2时,地址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字寻址内存可以让你寻址128K字节的内存,而不是64K字节寻址的内存。有趣的事实:ARM使用地址的低2位作为未对齐字加载的混洗控制。 (但它总有一个字节load/store指令。)
参见:
需要注意的是位寻址存储器可能存在,但没有。 8位字节现在几乎是通用的标准。 (古代计算机有时有更大的字节,请参阅wikipedia's Byte article的历史部分。)
- 1. 为什么字节寻址内存而不是4字节寻址内存?
- 2. 直接映射缓存字节寻址
- 3. 字节寻址内存(数据对齐)
- 4. 在C中寻址字符串文字的地址
- 5. 寻址QTableWidget Colums
- 6. LUA表寻址
- 7. 内存寻址
- 8. CUDA线程寻址((threadIdx.x,threadIdx.y,threadIdx.z)和块寻址(blockidx.x,blockidx.y)
- 9. 索引寻址模式和隐含寻址模式
- 10. 动态寻址xml文档字段
- 11. 浏览和寻址QMLComponents
- 12. C寻址和参考
- 13. 寻找字节码
- 14. 在现代计算机中如何实现字节寻址?
- 15. 需要多少位来寻址32个字节?
- 16. DOM寻址与jQuery
- 17. x86寻址模式
- 18. 寻址sys.excepthook错误
- 19. IP寻址计划
- 20. MIPS标签寻址?
- 21. 这些寻址模式有什么区别...?
- 22. 装配中的寻址
- 23. 最快的阵列寻址
- 24. ACALL的寻址方案
- 25. 寻呼和逻辑和物理地址
- 26. 寻找IPMI IP地址
- 27. 变量如何寻址RAM?
- 28. MC8051微控制器寻址
- 29. ASM RIP相对寻址
- 30. Gurux DLMS通信寻址
请参阅[byte-vs. word-addressing schemes](http://tams-www.informatik.uni-hamburg.de/applets/ hades/webdemos/50-rtlib/40-memory/byte-vs-word.html):>基于字节和字的寻址方案演示。 – 2010-04-27 19:41:10