为什么要在 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
清除更多内容
所以我有点理解命令 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
清除更多内容