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