Arrays 不理解在这个问题上左移的目的

Arrays 不理解在这个问题上左移的目的,arrays,mips,Arrays,Mips,我是MIPs的新手,对这个问题的解决方案有些困惑。我试图阅读各种来源,其中没有一个真正解释了移位是如何获得的,或者为什么需要移位 对于下面的C语句,对应的MIPS汇编代码是什么?假设 变量i和j分别分配给寄存器$s3和$s4。假设 数组A和B分别位于寄存器$s6和$s7中 问题是:B[8]=A[i− j] ) 解决办法是: 低于$t0、$s3、$s4 sll$t0,$t0,2 添加$t1、$s6、$t0 lw$t2,0$t1 西南$t2,32($s7) 我不明白为什么在减去I和j之后需要左移。我

我是MIPs的新手,对这个问题的解决方案有些困惑。我试图阅读各种来源,其中没有一个真正解释了移位是如何获得的,或者为什么需要移位

对于下面的C语句,对应的MIPS汇编代码是什么?假设 变量i和j分别分配给寄存器$s3和$s4。假设 数组A和B分别位于寄存器$s6和$s7中

问题是:B[8]=A[i− j] )

解决办法是:

低于$t0、$s3、$s4

sll$t0,$t0,2

添加$t1、$s6、$t0

lw$t2,0$t1

西南$t2,32($s7)


我不明白为什么在减去I和j之后需要左移。我知道它将I和j的结果移位4位,但为什么需要这样做?

需要左移位来计算项A[I-j]的偏移量

数组A和B的每一项都是32位宽(4字节)。但是MIPS有字节寻址,所以数组的每个项都需要4个地址

通过左移2位,实际上等于乘以4。所以(i-j)*4是数组的第
i-j
项的偏移量。
这也是将结果存储在数组第8项中的代码最后一行使用32作为偏移量的原因

需要左移来计算项目的偏移量
A[i-j]

数组A和B的每一项都是32位宽(4字节)。但是MIPS有字节寻址,所以数组的每个项都需要4个地址

通过左移2位,实际上等于乘以4。所以(i-j)*4是数组的第
i-j
项的偏移量。
这也是将结果存储在数组第8项中的代码最后一行使用32作为偏移量的原因

你能澄清哪一个MIPS寄存器对应于原始代码吗?@Johan Ah。很抱歉。在中编辑了该问题。您能否澄清与原始代码相对应的MIPS寄存器之一?@Johan Ah。很抱歉。在中编辑了这个问题。