2016-09-08 89 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_編輯原始代碼 - 它改變了問題的性質,並使響應無效(即它們不再有意義)。如果你願意,你可以做到這一點。再次,判斷電話 –