用于从寄存器中提取字段的MIPS指令

时间:2016-09-08 09:59:50

标签: assembly bit-manipulation mips cpu-registers mips32

解决方案手册中的答案对于此位域提取问题似乎是错误的。我的问题发布在下面。

以下是设置: Exercise 2.14.1a

提出的问题是:

  

找出提取a的最短MIPS指令序列   来自$ t0的字段,用于常数值i = 22和j = 5,并将字段放入$ t1   以数据表中显示的格式。

解决方案手册给出了答案:

lui $t1, 0x003f
ori $t1, $t0, 0xffe0
and $t1, $t0, $t1
srl $t1, $t1, 5

我有两个问题:

  1. 向右偏零。这个建议的答案如何确保寄存器$ t1中“Field”右边的所有位都是零?
  2. 右移逻辑。不是最后一条指令应该是sll $t1, $t1, 10吗?

1 个答案:

答案 0 :(得分:1)

很明显,解决方案手册中的答案并不理想。

  
      
  1. 向右偏零。这个建议的答案如何确保所有   寄存器$ t1中“字段”右边的位都是零?
  2.   

通过andisll的正确组合,我们可以将所有需要归零的位置归零。

  
      
  1. 右移逻辑。不是最后一条指令应该是sll   $ t1,$ t1,10而不是?
  2.   

很明显,这应该是sll操作,而不是srl操作。