0

配列をループして最終値 0 に到達するプログラムを作成しようとしています。

配列内の各要素を調べながら、値を 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 に格納することについて、誰かが正しい方向に向けてくれるでしょうか?

4

1 に答える 1

1

ランタイム例外、アドレス範囲外というエラーが表示され続けます。理由はありますか?

はいココです:

.text 

li  $s0, 0x10010000          

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

問題:

  1. プログラムが実行を開始する場所を定義していないようです。コードの先頭に何らかのラベルがあると思いますが、何も表示されません。関連する部分が質問に表示されていないだけですか?

  2. コードは、アドレスが register に含まれているメモリ位置から読み取ろうとしてs2いますが、コードはこのレジスタを初期化していません。

  3. また、 を変更することはないs0ため、ループはどうしようもなく終わりがありません。

最終的な値を $v0 に格納することについて、誰かが正しい方向に向けてくれるでしょうか?

に何かを保存しても問題はありませんv0

于 2013-02-22T01:43:17.047 に答える