有人可以解释以下 MIP 代码吗?
Can someone explain the following MIPs code?
f,g,h,i,j == $s0-$s4。
数组A和B的基址分别是$s6和$s7
sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
lw $s0, 0($t0)
据我了解,第一行采用 f*4 的值并将其存储在 $t0 中。我被告知我们有第一行,因为该数组包含 4 字节的值。请解释其余部分。我知道程序正在某处访问数组,但我不明白语法,它看起来就像数组 A 的基本情况被添加到 f*4 中。谢谢。
sll
是逻辑左移——因此 sll $t0, $s0, 2
取 $s0
(f) 中的值,并将其左移 2 位,结果为$t0
。这与乘以 4 相同,但速度更快。
add
是加法——所以add $t0, $s6, $t0
取$s6
中的值(A的基地址),加上上面刚刚计算的$t0
值,将结果粘贴到 $t0
中(替换旧值)。这为您提供了 A[f]
的地址
lw
是加载字——因此 lw $s0, 0($t0)
在距 $t0
0 字节偏移处加载 4 字节值并将其粘贴到 $s0
中。鉴于前两条指令,这是 A[f]
的值
另外两条指令正在计算$t1
中B[g]的地址
f,g,h,i,j == $s0-$s4。 数组A和B的基址分别是$s6和$s7
sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
lw $s0, 0($t0)
据我了解,第一行采用 f*4 的值并将其存储在 $t0 中。我被告知我们有第一行,因为该数组包含 4 字节的值。请解释其余部分。我知道程序正在某处访问数组,但我不明白语法,它看起来就像数组 A 的基本情况被添加到 f*4 中。谢谢。
sll
是逻辑左移——因此 sll $t0, $s0, 2
取 $s0
(f) 中的值,并将其左移 2 位,结果为$t0
。这与乘以 4 相同,但速度更快。
add
是加法——所以add $t0, $s6, $t0
取$s6
中的值(A的基地址),加上上面刚刚计算的$t0
值,将结果粘贴到 $t0
中(替换旧值)。这为您提供了 A[f]
lw
是加载字——因此 lw $s0, 0($t0)
在距 $t0
0 字节偏移处加载 4 字节值并将其粘贴到 $s0
中。鉴于前两条指令,这是 A[f]
另外两条指令正在计算$t1