为什么在 MIPs Assembly 中使用 sll 等移动一点?

Car*_*son 3 assembly mips sll

所以我有点理解命令 sll 在做什么,当我读到这个时,它几乎只是把所有的位都移了 1。我只是想知道我为什么要这样做?

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

sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
...
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ael 6

它几乎只是将所有位左移 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. 这很有用,例如在访问字数组时缩放要使用的偏移量。