8

ユーザー入力を配列に格納しようとしていますが、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
4

5 に答える 5

8

データ セグメント内の文字列にスペースを割り当てる前に、配列にスペースを割り当ててみてください。

  array: .space 40    #10 element integer array
  mess: .asciiz " Enter 10 numbers to be stored in the array. "

最初に文字列を割り当てると、配列が 4 で割り切れないアドレスから開始し、ワード アラインメント エラーが発生する可能性があります。

于 2014-10-28T08:00:09.427 に答える
2

適切な配列入力コード

.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
于 2018-01-09T18:11:00.827 に答える
1

これを試して:

...
.p2align 2
array: .space 40    #10 element integer array
...
于 2013-04-14T06:03:45.173 に答える