ユーザー入力を配列に格納しようとしていますが、swを使用すると、「ストアアドレスがワードバウンドに整列されていません」というエラーが表示されます。私の目標は、配列から10個の整数を読み取ることですが、最初の桁を入力した後、swコマンドでエラーが発生します。何が間違っているのかわかりません。数時間かけてそれを理解しようとしました。どんな助けでも大いに感謝され、役に立つとマークされます。
.data
mess: .asciiz " Enter 10 numbers to be stored in the array. "
array: .space 40 #10 element integer array
.globl main
.text
main:
jal read
b done
read:
la $t0, 0 #count variable
b readLoop
jr $ra
readLoop:
beq $t0, 40, read #branch if equal to 40, 10 items
li $v0, 4 #Print string
la $a0, mess #load Prompt
syscall
li $v0, 5 #read int
syscall
sw $v0, array #store input in array ERROR HERE
addi $t0, $t0, 4 #add by 4 to count
b readLoop
print:
done:
これは私のために働いた。上で動かない理由がわかりません
.data
list: .space 16
.globl main
.text
main:
li $v0, 5
syscall
sw $v0, list
move $a0, $v0
li $v0, 1
syscall
データセグメントの文字列にスペースを割り当てる前に、配列にスペースを割り当ててみてください。
array: .space 40 #10 element integer array
mess: .asciiz " Enter 10 numbers to be stored in the array. "
最初に文字列を割り当てると、配列は4で割り切れないアドレスで始まり、Wordの位置合わせエラーが発生する可能性があります
これを試して:
...
.p2align 2
array: .space 40 #10 element integer array
...
ストアは
sw $ v0、array($ t0)
la $t0, 0
をli $t0, 0
に置き換えます
mess
の上に配列を設定します
さらに、10項目に達すると、読み取りを再開し、以前の値を上書きします。
適切な配列入力コード
.data
myarray:.space 40
st:.asciiz "Enter the 10 Elements"
.text
li $v0,4
la $a0,st
syscall
jal fun
li $v0,10
syscall
fun:
li $v0,5
syscall
beq $t0,40,exit
sw $v0,myarray($t0)
add $t0,$t0,4
j fun
exit:
jr $ra