为什么在MIPs Assembly中使用sll等转移一下?

时间:2015-09-09 19:15:14

标签: assembly mips sll

所以我理解命令sll正在做什么,因为我读this并且它几乎只是将所有剩余的位移1。我只是想知道为什么我会这样做?

我有一个班级作业,有一个例子...... 其中$ s6和$ s7是数组的基址,而$ s1 / $ s2只是一些变量。

sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
...

为什么要换一点?它用简单的术语做什么?我首先想到它与索引数组中的变量有关...但我不确定。

3 个答案:

答案 0 :(得分:3)

  

它几乎只是将所有剩余的位移1

他们展示的例子是1位的转变。 sll指令不仅限于移位1位;你可以在0..31范围内指定一个移位量(移位0似乎没用,但SLL $zero, $zero, 0用于在MIPS上编码NOP

NA logical left shift可以用作乘以2^N(2到N的幂)的快速方法。因此,指令sll $t0, $s0, 2$s0乘以4(2 ^ 2)并写回$t0。这很有用,例如缩放在访问字阵列时使用的偏移量。

答案 1 :(得分:2)

将数字向左移动与将该数字乘以2相同。 更一般地,将数字N位向左移位与将该数字乘以2 ^ N相同。

当数组的每个元素的大小为2的幂时,它被广泛用于计算数组的偏移量。

答案 2 :(得分:0)

我在程序中看到在$ s0和$ s2寄存器上应用了简单的sll! 在指令sll $ t0,$ s0,2中,寄存器$ s0的值将乘以4。 您可以在Shift left logical example

清除更多内容