1

これは MIPS プログラミングの非常に初心者向けのプログラムで、ユーザーからの入力を取得して画面に入力データを表示しようとしています。しかし、このプログラムを実行すると、「メモリ範囲外エラー」が発生し、データを表示しようとするとプログラムがクラッシュします。このコードのどこが間違っていますか:

.data 

Array: .space 20

Promt: .asciiz "Enter a String:\n"
Line: .asciiz "\n"

.text

main:

la $a0,Promt
li $v0,4
syscall

la $a0,Array
li $a1,20
li $v0,8
syscall

la $t0,Array  # BASE ADDRESS OF ARRAY
li $t1,4

Loop:

lw $a0,0($t0)

add $t0,$t0,$t1

beq $a0,0, Exit

li $v0,4

syscall


j Loop

Exit:

li $v0,10
syscall

よろしく

4

2 に答える 2

1

2 つの問題:

1) ループ内でsyscallwith を実行しています。$v0 == 4これにより、文字列が address に出力されます$a0。何が入ってい$a0ますか?これは実際の文字列データであり、有効なアドレスではありません。$v0 == 11代わりに、個々の文字を出力することをお勧めします。しかし、それは次の問題につながります。

2) 一度に 4 文字をロードしています。ワードは 4 バイトで、lw「ロード ワード」を意味するものを使用しています。で一度に 1 文字しか出力できず、syscall 11すべてゼロの 4 文字のチャンクがたまたまロードされた場合にのみ、ループが終了します。代わりに、一度に 1 文字ずつロードする必要があります。(load word )の代わりにlb(load byte ) を使用し、の代わりに使用します。lw$t1 == 1$t1 == 4

于 2012-10-08T19:17:14.773 に答える