【问题标题】:Understanding Assembly MIPS .ALIGN and Memory Addressing了解汇编 MIPS .ALIGN 和内存寻址
【发布时间】:2013-11-05 16:38:37
【问题描述】:

我正在学习这门课程,但我真的很难理解指令 .align 的概念。

这是一个例子,我看不懂:

我知道数据段里面有地址,以0x10010000、0x10010020等开头。

而且我知道,在每个地址内部,有 8 个内存字段,每个字段有 32 位。

现在,我不明白的是,地址 0x10010010 内的var2 是如何以及为什么? str1 在地址 0x10010003 内,因为我们为 var1 保留了 3 位。

最后一件事是,.align' doing? when I tested it in Mars4, it only shifted the data into the next memory field when I usedalign 3` 及以上的指令到底是什么,但我真的不明白。

如果这让大家很困惑,我很抱歉,我在这里有点绝望。

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

    对齐对于 MIPS 处理器很重要,它只喜欢从内存中读取多字节值的地址是数据大小的倍数。

    .ASCIIZ 字段可以放置在任何地方,因为一次读取一个字节的字符串。所以把它放在 0x10010003 就可以了。

    .WORD 字段必须与 4 的倍数对齐。因此它不能放在 0x1001000E,即字符串之后的下一个可用位置。汇编器有意移动该值并留下两个未使用的字节。到下一个 4 倍数的地址,0x10010010。

    .ALIGN 指令是一种覆盖默认对齐规则的方法。指令之后的下一个字段将对齐到 2 的 n 次幂的倍数,其中 n 是 .ALIGN 值。在您的情况下,这是 pow(2, 3) = 8 个字节。

    这就是您所看到的情况,如果没有 .ALIGN 指令,.HALF 字段将存储在 0x10010014。不是 8 的倍数,所以移动到 0x10010018。

    这个例子是人为的,没有明显的理由在这里使用 .ALIGN 指令,因为 .HALF 只需要对齐到 2 的倍数,所以将它存储在 0x10010014 就可以了。

    【讨论】:

    • 正在电话上输入我的答案,而没有答案...你的答案就不需要另一个了。
    • 谢谢大家的回答!问:0x10010010怎么是4的倍数?
    • 0x10010010 = 2^28 + 2^16 + 2^4,即 4 的乘积。如果计算对您没有意义,请再次阅读十六进制数。
    • 实际上,如果我指的是十六进制数字,我应该把它写成 0x10010010 = 16^7 + 16^4 + 16^1。
    • 4 是 4 的倍数 8 是 4 的倍数 12 是 4 的倍数 继续往下看 0x10010010 是 4 的倍数 0x10010010 / 4 == 16781328 / 4 = 4195332.0 没有余数。
    【解决方案2】:

    某些汇编指令暗示数据是对齐存储的,这意味着从一个 2 的幂次方 的地址开始。首先回顾一下 MIPS 中的几个约定:

    (1) 一个“字”是 4 个字节(你有时会看到它被定义为 2 个字节),

    (2) 一个半字 (.half) 是 2 个字节,并且

    (3) .asciiz null 终止字符串(如在 C 中)。

    使用这个,您已经解释了 var1 和 str1 是如何存储的。为什么 var2 之前有 2 个空字节的缓冲区?因为它被声明为.word,并且(由上面的(1))将存储在4的倍数的内存位置开始。如果你声明它是.half,你在str1之间没有2个空字节和 var2。

    var2 被声明为 .half - 它是一个 16 位(2 字节)的地址,适合一个。但是,在声明它之前,对齐已更改为 3。现在,检查第一句话:这是 power 您将 2 提高到;所以我们实际上对齐到 8。这意味着在被覆盖之前,变量将按声明放置,但另外它们的初始存储位置必须是 8 的倍数。因此,汇编器插入 4 个空字节以将 var3 存储为 8 的倍数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 2015-03-22
      • 2020-01-16
      • 2013-04-08
      相关资源
      最近更新 更多