【发布时间】:2015-10-22 23:08:05
【问题描述】:
移位量应该是立即数还是存储在寄存器中的值?两者都有效吗?
我有不同的网站告诉我不同的事情,我很困惑。
根据我的研究,应该像这样使用 sll(逻辑左移)指令:
sll $d, $t, h
这使得 $d = $t 向左移动了 h 次。
有人告诉我 h 应该是立即数,但我想知道是否可以将寄存器用作第三个参数,并将该寄存器内的值用作移位量。这也行吗?
【问题讨论】:
移位量应该是立即数还是存储在寄存器中的值?两者都有效吗?
我有不同的网站告诉我不同的事情,我很困惑。
根据我的研究,应该像这样使用 sll(逻辑左移)指令:
sll $d, $t, h
这使得 $d = $t 向左移动了 h 次。
有人告诉我 h 应该是立即数,但我想知道是否可以将寄存器用作第三个参数,并将该寄存器内的值用作移位量。这也行吗?
【问题讨论】:
你是对的。
sll 的具体之处在于它是一条R-format 指令,其中仅使用了两个寄存器,rd 和 rs(目标和源),而 shamt 字段是立即值(常量)。
还有另一条指令sllv 使用第三个寄存器,您可以在其中指定按变量移位(寄存器)。
【讨论】:
sslv 是 MIPS32r2 指令。 MIPS 架构的 MIPS32r2 版本于 2002 年推出,因此尚未得到 SPIM 和 MARS 等常见教育工具的支持。
让我清楚一点 MIPS 32 位中的左移逻辑具有以下语法:
SLL destination, Target, Shift amount(Should be immediate value)
在 8086 中,如果我们希望移位量大于 1,我们必须使用寄存器来存储移位量的值!
【讨论】: