web-dev-qa-db-ja.com

MIPS-ユーザー入力から配列にintを格納する

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

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

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

最初に文字列を割り当てると、配列は4で割り切れないアドレスで始まり、Wordの位置合わせエラーが発生する可能性があります

6
anon

これを試して:

...
.p2align 2
array: .space 40    #10 element integer array
...
1
Alexey Frunze
  • ストアは

    sw $ v0、array($ t0)

  • la $t0, 0li $t0, 0に置き換えます

  • messの上に配列を設定します

さらに、10項目に達すると、読み取りを再開し、以前の値を上書きします。

1
Patrik

適切な配列入力コード

.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
1