2017-09-24 5 views
0

最近、私はアセンブリクラスを取っていて、そのうちの1人が私に割り当てを与えました。私は最後の部分を除いてすべてをコーディングしました...私はちょうど与えられた配列の数値を追加し、合計を印刷する必要があります...簡単に右?私のコードで何が問題になっていますか? (配列内の数字を追加する)

.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 Cordes C:\ Users \ Mohamad \ Desktop \ addingarray.asmエラー13行目:0x00400004のランタイム例外:0x00000000の範囲外のアドレス –

答えて

2

la $s0, array.dataセクションにあり、その:それはライン12が何らかの理由で範囲外であることを言うとき、私は実行 いいえ、私はエラーを持っている=、ここに私のコード/

ので

です実行されることはありません。

デバッガをシングルステップで使用した場合、プログラムはデータセクションの命令を実行することはなく、恐らくloop:で実行を開始することがわかります。

この時点で、$s0はまだ(エラーメッセージに従って)ゼロになることがあります。とにかく、それはarrayを指していません。

+0

はい、すごくうまくいっていて、いくつかの論理エラーに気付きました。 1つ以上のこと...もし私が文字列と比較したいのですが、私はちょうどbeq bneを使用しますか?それともそれ以上にあるのでしょうか?私の他のプログラムにいくつかの問題があります。 –

+0

単語が配列に含まれているかどうかは私のコードidk whats wrong tbh '.data 配列:.asciiz" one "、" two "、" three " 単語:.asciiz "\ nのワードが発見された" がmsgtwo:.asciiz サイズ "の\ n言葉が見つかりませんでした": "9" msgoneは.asciiz、ラ$ S0 の.text配列 LWを4 を.WORD $ S1、サイズ ラの$ A1、単語 李$のT9、0 ループ: BEQする$ T9、$ S1、 ラの$ A0に失敗し、($ S0)msgtwo 、 ラの$ A0を:のaddi $ S0、$ S0、4 追加の$ T9、$のT9、1 BEQ $ A1、$ a0が、 BNE $ A1、$ A0、ループ が失敗しました李$ v0と、見つかった4 システムコール : ラの$ A0、msgone 李$ v0と、jは が行わ行わ システムコール: ' –

+0

うーん、それ文句を言わない形式を正しく=/ –

関連する問題