MIPS 指令 sll 的正确语法是什么?

What is the correct syntax of MIPS instruction sll?

移位量应该是立即数,还是存储在寄存器中的值?两者都有效吗?

不同的网站告诉我不同​​的事情,我很困惑。

根据我的研究,sll(逻辑左移)指令应该这样使用:

  sll $d, $t, h

这使得 $d = $t 左移 h 次。

有人告诉我h应该是立即数,但我想知道是否可以将寄存器用作第三个参数,并将该寄存器中的值用作移位量。那也行吗?

你是对的。

sll 的特殊之处在于它是一个 R-format 指令,其中只使用了两个寄存器,rd 和 rs(目标和源),并且 shamt 字段是一个立即值(一个常数).

还有另一个指令sllv,它使用第三个寄存器,您可以在其中指定按变量(寄存器)移位。

让我澄清一点 MIPS 32 位中逻辑左移具有以下语法:

SLL destination, Target, Shift amount(Should be immediate value)

在8086中,如果我们想要移位量大于1,我们必须使用寄存器来存储移位量的值!