2016-09-08 88 views
0

解决方案手册中的答案对于此位域提取问题似乎是错误的。我的问题在下面发布。MIPS指令从寄存器中提取字段


下面是设置: Exercise 2.14.1a

提出的问题是:

查找提取从$ T0一个 场的常数值我的MIPS指令最短序列= 22和j = 5,并将该字段以数据表中显示的格式放入$ t1 。

的解决方案手册给出了这样的答案:

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

我有2个问题:

  1. 零向右。这个建议的答案如何确保寄存器$ t1中“字段”右侧的所有位全部为零?
  2. 右移逻辑。是不是最后的指令应该是sll $t1, $t1, 10而不是?
+0

2.是的,我认为它需要以左移结束将字段放在寄存器的顶部。一个简单的方法来做到这一点将是正确的移动到底部,然后左移到顶部。除非移位指令在MIPS上非常慢,否则两个班次应该比4个指令更好。 –

+0

谢谢,这正是我查看解决方案之前的答案。感谢您的编辑。 –

回答

1

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

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

随着andisll正确的组合,我们可以零,我们需要零的所有位。

  • 右移逻辑。是不是最后的指令应该是sll $ t1,$ t1,10而不是?
  • 这是很清楚,这应该是一个sll操作,而不是srl操作。

    +0

    回答我自己的问题很有趣,所以如果我违反礼仪,请告诉我。 –

    +0

    如果您在任何其他人面前找到解决方案,那么回答您自己的问题的OP会受到鼓励。此外,您可能使用不同的方法为您的问题的不同部分获得了多个答案。因此,如果5个响应者分别提供20%,请提高他们,并发布自己的综合答案[归因很好]。如果一个答案是90%upvote并接受它。 Upvote其他好的答案。这里90%以下的评论就足够了,可能会详述你添加的内容。大多数问题并没有得到自我解答,主要是因为他们从别人那里得到了很好的答案。这主要是为了避免冗余。 –

    +0

    对于简单(r)的东西,您可以编辑您的问题,并将更改后的代码_append_放到底部。 _Never_编辑原始代码 - 它改变了问题的性质,并使响应无效(即它们不再有意义)。如果你愿意,你可以做到这一点。再次,判断电话 –