【发布时间】:2021-02-16 09:12:04
【问题描述】:
我有一个关于从 MIPS 中的数组加载单词的问题。 如果数组“A”以 100h 的内存位置开始,并且我想将单词加载到寄存器中,如果我执行类似的操作会很好,
lw $t0, 0x100($t2)
尽管偏移位置是内存位置,而偏移 ($t2) 在基地址中?我看到它的方式是 $t2 + 0x100 与 0x100 + $t2。 或者是唯一正确的方法是做什么
lw $t0, $t2(0x100)
?
【问题讨论】:
我有一个关于从 MIPS 中的数组加载单词的问题。 如果数组“A”以 100h 的内存位置开始,并且我想将单词加载到寄存器中,如果我执行类似的操作会很好,
lw $t0, 0x100($t2)
尽管偏移位置是内存位置,而偏移 ($t2) 在基地址中?我看到它的方式是 $t2 + 0x100 与 0x100 + $t2。 或者是唯一正确的方法是做什么
lw $t0, $t2(0x100)
?
【问题讨论】:
+ 是可交换的,硬件只关心最终地址是什么。
asm 源语法只允许constant(reg),所以当然要写成A($t2)。
如果允许其他语法,机器代码将是相同的; lw 指令只有一种形式,即带有寄存器和 16 位立即数的 I 型。
【讨论】:
lw $t0 0x100($t2)关于加载字正确吗?这实际上类似于访问数组的元素,如 A[I],但不是括号而是括号?
add $t2, $t2, 4 将索引推进到下一个元素。所以是的,相似,就像你说的,不完全相同。