addi $s7, $s7, -4
add $s7, $s7, $s1
lw $s0, 4($s7)
假设整数变量 i 和 j 在寄存器 $s0 和 $s1 中。假设整数数组 X 的基地址在寄存器 $s7 中。
到目前为止,我有这个:
X = X - 4
X = X + j
i = X - 4 + j
这个对吗?我不太确定,所以只是在寻找确认。
addi $s7, $s7, -4
add $s7, $s7, $s1
lw $s0, 4($s7)
假设整数变量 i 和 j 在寄存器 $s0 和 $s1 中。假设整数数组 X 的基地址在寄存器 $s7 中。
到目前为止,我有这个:
X = X - 4
X = X + j
i = X - 4 + j
这个对吗?我不太确定,所以只是在寻找确认。
这是不正确的。请注意,lw
指令从内存中读取一个字。
在 C 中,它看起来像
//int *x;
x--; // addi $s7, $s7, -4 decrements pointer to x one element
x = (int*)((char*)x + j); // add $s7, $s7, $s1 increments the address pointed by x j elements
i = *(x+1); // lw $s0, 4($s7) reads the next element pointed by x
OP评论后的附录:
如果j = $s7
是 4 的倍数(注意每个整数占用 4 个字节),那么它可以在 C 中重写为i = x[j/4]
.
lw-->加载字
语法:lw $t, offset($s) 操作:$t = MEM[$s + offset]; Advance_pc (4);