所以我有点理解命令 sll 正在做什么,因为我读到这个并且它几乎只是将所有位左移 1。我只是想知道我为什么要这样做?
我有一个班级的作业,其中有一个例子......其中 $s6 和 $s7 是数组的基地址,而 $s1/$s2 只是一些变量。
sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
...
为什么要转移一点?简单来说它在做什么?我首先认为这与索引数组中的变量有关……但我不确定。
它几乎只是将所有位左移 1
他们展示的示例是移位 1 位。该sll
指令不仅限于移位1位;您可以在 0..31 范围内指定移位量(移位 0 可能看起来没用,但SLL $zero, $zero, 0
用于NOP
在 MIPS 上对 a 进行编码)。
逻辑左移位N
可用作乘以(2 的 N 次方)的快速方法2^N
。所以指令sll $t0, $s0, 2
乘以$s0
4 (2^2) 并写回$t0
. 这很有用,例如在访问字数组时缩放要使用的偏移量。
将一个数字向左移动一位与将该数字乘以 2 相同。更一般地,将一个数字向左移动 N 位与将该数字乘以 2^N 相同。
当数组的每个元素的大小是 2 的幂时,它被广泛用于计算数组的偏移量。
我在程序中看到在 $s0 和 $s2 寄存器上应用了简单的 sll!在指令 sll $t0, $s0, 2 中,寄存器 $s0 的值将乘以 4。您可以在左移逻辑示例中清除更多内容