2013-02-22 42 views
0

我試圖創建一個循環訪問數組以達到最終值0的程序。我的MIPS彙編程序有什麼問題?

在遍歷數組中的每個元素時,我需要將值增加2並將最終結果存儲在$ V0。 (我不知道如何做到這一點)

這裏是我到目前爲止的代碼:

.data 
list: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 

.text 

li $s0, 0x10010000   

increment:   
beq $s0, $zero, EndLoop  
lw $s1, 0($s2) 
sw $s1, 0($s2) 
la $s2, list 
la $s1, list 
lb $s2, 0($s1)   
addi $s2, $s2, 2   
sb $s2, 0($s1)   
addi $s1, $s1, 1   

j increment     

EndLoop: 

我的問題是:

我總是收到一個錯誤說運行時異常,地址超出範圍。 任何想法爲什麼?

任何人都可以指出我正確的方向將最終值存儲在$ v0中嗎?

回答

1

我一直收到一個錯誤,說運行時異常,地址超出範圍。任何想法爲什麼?

當然,在這裏:

.text 

li $s0, 0x10010000   

increment:   
beq $s0, $zero, EndLoop  
lw $s1, 0($s2) 

問題:

  1. 你似乎並不確定你的程序應該開始執行。我希望在代碼的開頭有一些標籤,但我什麼都看不到。相關部分是否在問題中沒有顯示?

  2. 您的代碼試圖從其地址包含在寄存器s2中的內存位置讀取,但是您的代碼不會初始化此寄存器。

  3. 此外,你永遠不會修改s0,所以循環是無望的無盡。

任何人都可以點我在繞$ V0存儲的最終值正確的方向?

我看到在v0中存儲任何東西都沒有問題。

+0

我用s0是因爲它在說明中指出:「在開始循環之前,您應該初始化$ s0來保存數組的基地址,$ s1保存數組的索引」 – user1902535 2013-02-22 01:51:51

+0

代碼有問題,無關緊要說明中的內容。在調試器中運行它。實際上,這是你在問別人分析你的代碼或者爲你調試之前必須先做的事。 – 2013-02-22 01:55:28

+0

我在調試器中運行過它,它告訴我第12行[lw $ a1,0($ a2)]有錯誤。這給出了我在主文章中提到的錯誤。 – user1902535 2013-02-22 02:10:48