【发布时间】:2012-05-14 02:40:59
【问题描述】:
如果某些内容存储在 0x1001 0000,则下一个内容存储在 0x1001 0004。如果我是正确的,则 32 位体系结构中的内存块每个都是 32 位。那么0x1001 0002会指向32位的后半部分吗?
【问题讨论】:
-
内存地址增加4,而不是4位。
如果某些内容存储在 0x1001 0000,则下一个内容存储在 0x1001 0004。如果我是正确的,则 32 位体系结构中的内存块每个都是 32 位。那么0x1001 0002会指向32位的后半部分吗?
【问题讨论】:
首先,MIPS 架构中的内存地址不会以 4 递增。MIPS 使用字节寻址,因此您可以从内存中寻址任何字节(参见例如 lb 和 lbu 以读取单个字节,lh和lhu 读取一个半字)。
事实是,如果您读取 32 位长度的字(4 个字节,lw),那么两个连续的字将彼此相距 4 个字节。在这种情况下,您将在第一个字的地址上加 4 以获得下一个字的地址。
除此之外,如果您阅读单词,您必须将它们以 4 的倍数对齐,否则您将获得对齐异常。
在您的示例中,如果第一个单词存储在 0x10010000 中,那么下一个单词将存储在 0x10010004 中,当然前半部分/后半部分将存储在 0x1001000 和 0x1001002 中(排序将取决于 endianness 的建筑)。
【讨论】:
您似乎已经自己回答了这个问题! 32位构成4个字节,所以如果你是例如推入堆栈,所有元素都以相同的大小推入堆栈,每个下一项将比下一项提前(或之前)4个字节。
【讨论】: