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
这是对的吗?我不太确定所以只是寻找确认。
答案 0 :(得分:4)
这是不正确的。请注意,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]
。
答案 1 :(得分:0)
lw - >加载字
语法:lw $ t,offset($ s) 操作:$ t = MEM [$ s + offset]; advance_pc(4);