2017-09-24 39 views
0

所以,最近我一直在服用裝配類,其中一人給了我一個任務。我編碼了除最後一部分以外的所有內容...我只需要在給定數組中添加數字並打印總和...容易吧? 沒有,我當我運行它說,該行12超出範圍出於某種原因有一個錯誤=/我的代碼有什麼問題? (數組中的添加數字)

所以,這裏是我的代碼:

.data 

array: .word 1,2 
size: .word 2 
la $s0, array 
lw $s1, size 
li $t9, 0 

.text 

loop: 
lw $a0, ($s0) 
add $a0, $a0, $a0 
addi $s0, $s0, 4 
add $t9, $t9, 1 
blt $t9, $s1, loop 

li $v0, 1 
syscall 
+0

哪一行是行12? 'lw $ a0,($ s0)'?什麼是錯誤信息?當你在調試器中運行並查看寄存器值時,你看到了什麼? –

+0

@peter用C科德斯錯誤:\用戶\穆罕默德\桌面\ addingarray.asm 13號線:在0x00400004運行時異常:地址超出範圍00000000 –

回答

2

la $s0, array是在.data部分,所以它從不執行。

如果您使用調試器進行單步調試,您會看到您的程序從不執行數據部分中的指令,並且大概在loop:處開始執行。

在這一點上,$s0恰好仍然是零(根據你的錯誤消息)。無論如何,它不是指向array

+0

是的,這真是棒極了,我甚至注意到一些邏輯錯誤,現在運行十分感謝。 1件事...如果我想比較字符串做我只是使用BEQ BNE?還是有更多的呢?即時通訊有一些問題,我的其他程序 –

+0

我只是想看看,如果一個詞是數組中這裏是我的代碼IDK什麼錯TBH '。數據 陣列:.asciiz「一」,「二」,「三化」 一句話:.asciiz 「九」 msgone:.asciiz 「\ n此詞被發現」 msgtwo:.asciiz 「\找不到n此詞」 大小:.word 4 的.text LA $ S0,陣列 LW $ S1,大小 LA $ A1,字 李$ T9,0 循環: BEQ $ T9,$ S1,失敗 LA $ A0,($ S0) 阿迪$ S0,$ S0,4 加$ T9,$ T9,1個 BEQ $ A1,$ A0,發現 BNE $ A1,$ A0,環 失敗: LA $ A0,msgtwo 李$ V0,4 系統調用 發現: LA $ A0,msgone 李$ V0,4 系統調用 Ĵ做 做:' –

+0

嗯,它不會正確格式=/ –