【问题标题】:MIPS Load Word PlacingMIPS 加载字放置
【发布时间】:2021-02-16 09:12:04
【问题描述】:

我有一个关于从 MIPS 中的数组加载单词的问题。 如果数组“A”以 100h 的内存位置开始,并且我想将单词加载到寄存器中,如果我执行类似的操作会很好,

lw $t0, 0x100($t2)

尽管偏移位置是内存位置,而偏移 ($t2) 在基地址中?我看到它的方式是 $t2 + 0x100 与 0x100 + $t2。 或者是唯一正确的方法是做什么

lw $t0, $t2(0x100)

?

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

    + 是可交换的,硬件只关心最终地址是什么。

    asm 源语法只允许constant(reg),所以当然要写成A($t2)

    如果允许其他语法,机器代码将是相同的; lw 指令只有一种形式,即带有寄存器和 16 位立即数的 I 型。

    【讨论】:

    • 感谢您的澄清!所以可以肯定的是,写lw $t0 0x100($t2)关于加载字正确吗?这实际上类似于访问数组的元素,如 A[I],但不是括号而是括号?
    • @ApeOut:是的,但请记住,asm 使用 byte 偏移量(不是 C 数组索引),一个单词是 4 个字节。所以你需要add $t2, $t2, 4 将索引推进到下一个元素。所以是的,相似,就像你说的,不完全相同。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多