2012-03-19 80 views
0

所以我遇到問題的麻煩。我認爲a是一組單詞,a的基地址保存在$ a0中。所以對於int a [10],使用mips找到這個數組的總和。我真的不知道從哪裏開始可以有人幫助我開始,我想我應該能夠完成它。謝謝一堆!使用MIPS找到數組的總和

回答

1

由於給出了數組開頭的地址,因此您知道這也是您的第一個元素。由於這是一個int數組,因此我將假定它意味着它將使用mips32上一個字長爲4個字節的存儲空間。因此,[1]位於[0] + 4字節的地址處。 A [2]位於[0] +8字節或[1] + 4字節等的地址處...

由此可見,所有你需要做的只是循環10次,加載一個字每次添加值。

的基本流程是:

  1. 令數= 0,總和= 0(總和爲您的返回值,所以V0 $)
  2. 裝入一個字值從$ A0到寄存器
  3. 設置$ a0 = $ a0 + 4(從[count]移動到[count + 1],mips32上的整數是4個字節)
  4. 設置sum = sum +你裝入word值的寄存器爲
  5. count = count + 1
  6. if count < 10? (設定小於分支)去#2
  7. 跳鏈接(假設我們的總和已經在$ V0)

注意:您將得到基地址必須是字對齊的。

優化注意事項:您可以通過在步驟1之前將某些寄存器設置爲$ a0 + 40來優化執行的指令數。這意味着您可以擺脫第5步,並且如果$ a0小於第6步(最後一個優化是將步驟4移動到步驟6的延遲槽,如果您正在使用模擬器,則可能不支持)