3

所以我有点理解命令 sll 正在做什么,因为我读到这个并且它几乎只是将所有位左移 1。我只是想知道我为什么要这样做?

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

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

为什么要转移一点?简单来说它在做什么?我首先认为这与索引数组中的变量有关……但我不确定。

4

3 回答 3

7

它几乎只是将所有位左移 1

他们展示的示例是移位 1 位。该sll指令不仅限于移位1位;您可以在 0..31 范围内指定移位量(移位 0 可能看起来没用,但SLL $zero, $zero, 0用于NOP在 MIPS 上对 a 进行编码)。

逻辑左移位N可用作乘以(2 的 N 次方)的快速方法2^N。所以指令sll $t0, $s0, 2乘以$s04 (2^2) 并写回$t0. 这很有用,例如在访问字数组时缩放要使用的偏移量。

于 2015-09-09T19:24:53.767 回答
2

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

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

于 2015-09-09T19:22:07.050 回答
0

我在程序中看到在 $s0 和 $s2 寄存器上应用了简单的 sll!在指令 sll $t0, $s0, 2 中,寄存器 $s0 的值将乘以 4。您可以在左移逻辑示例中清除更多内容

于 2017-02-26T18:29:55.810 回答