1

以下代码用于实现指令

sllv $s0, $s1, $s2

它使用寄存器 $s2 中值的最低 5 位来指定寄存器 $s1 应左移的数量:

          .data
   mask:  .word  0xfffff83f
          .text
  start:  lw     $t0, mask
          lw     $s0, shifter
          and    $s0,$s0,$t0
          andi   $s2,$s2,0x1f
          sll    $s2,$s2,6
          or     $s0,$s0,$s2
          sw     $s0, shifter
shifter:  sll    $s0,$s1,0

我知道大多数指令在做什么。

然而,我不明白第二个加载字是如何从移位器加载一些东西的,它本身是一个指令而不是一个词。

此外,正如问题所说,当转换为二进制时,十六进制掩码的值在至少 5 个重要位置没有零,所以我不确定它将如何屏蔽至少 5 个 sig 位置。

4

1 回答 1

2

这是一种迂回的做法。它实际上是在修改内存中的指令来执行移位!如果您按照代码进行操作,您将看到sll $s0,$s1,0指令已加载,其sa字段从0to修改$s2,然后保存回内存并执行。

于 2009-06-02T04:04:16.397 回答