【问题标题】:Why are memory addresses incremented by 4 in MIPS?为什么内存地址在 MIPS 中增加 4?
【发布时间】:2012-05-14 02:40:59
【问题描述】:

如果某些内容存储在 0x1001 0000,则下一个内容存储在 0x1001 0004。如果我是正确的,则 32 位体系结构中的内存块每个都是 32 位。那么0x1001 0002会指向32位的后半部分吗?

【问题讨论】:

  • 内存地址增加4,而不是4位

标签: memory mips


【解决方案1】:

首先,MIPS 架构中的内存地址不会以 4 递增。MIPS 使用字节寻址,因此您可以从内存中寻址任何字节(参见例如 lblbu 以读取单个字节,lhlhu 读取一个半字)。

事实是,如果您读取 32 位长度的字(4 个字节,lw),那么两个连续的字将彼此相距 4 个字节。在这种情况下,您将在第一个字的地址上加 4 以获得下一个字的地址。

除此之外,如果您阅读单词,您必须将它们以 4 的倍数对齐,否则您将获得对齐异常。

在您的示例中,如果第一个单词存储在 0x10010000 中,那么下一个单词将存储在 0x10010004 中,当然前半部分/后半部分将存储在 0x1001000 和 0x1001002 中(排序将取决于 endianness 的建筑)。

【讨论】:

    【解决方案2】:

    您似乎已经自己回答了这个问题! 32位构成4个字节,所以如果你是例如推入堆栈,所有元素都以相同的大小推入堆栈,每个下一项将比下一项提前(或之前)4个字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多