Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
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 相同,但要快得多。
sll
sll $t0, $s0, 2
$s0
$t0
add是加法——所以add $t0, $s6, $t0取$s6(A 的基地址)中的值,并将$t0上面刚刚计算的值相加,将结果存入$t0(替换旧值)。这为您提供了 A[f] 的地址
add
add $t0, $s6, $t0
$s6
lw是加载字——因此lw $s0, 0($t0)在 0 字节偏移处加载 4 字节值$t0并将其粘贴到$s0. 给定前两条指令,这是 A[f] 的值
lw
lw $s0, 0($t0)
另外两条指令正在计算 B[g] 的地址$t1
$t1