所以我理解命令sll正在做什么,因为我读this并且它几乎只是将所有剩余的位移1。我只是想知道为什么我会这样做?
我有一个班级作业,有一个例子...... 其中$ s6和$ s7是数组的基址,而$ s1 / $ s2只是一些变量。
sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
...
为什么要换一点?它用简单的术语做什么?我首先想到它与索引数组中的变量有关...但我不确定。
答案 0 :(得分:3)
它几乎只是将所有剩余的位移1
他们展示的例子是1位的转变。 sll
指令不仅限于移位1位;你可以在0..31范围内指定一个移位量(移位0似乎没用,但SLL $zero, $zero, 0
用于在MIPS上编码NOP
。
N
位A 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
清除更多内容