为什么要在 MIPs 汇编中使用 sll 等移动一点?

Why shift a bit using sll and such in MIPs Assembly?

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

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

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

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

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

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

its pretty much just shifting all the bits left by 1

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

A logical left shift乘以N位可以用作乘以2^N(2的N次方)的快速方法。所以指令 sll $t0, $s0, 2 是将 $s0 乘以 4 (2^2) 并写回 $t0。这很有用,例如当缩放访问字数组时要使用的偏移量时。

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

清除更多内容