0

キーボードから 4 つの数字を取得して配列に格納しようとしています。次のコードを思いつきましたが、配列の最初の数値を出力しようとすると、0 が出力されます。配列の最初の値が出力されないのはなぜですか?

main: 
li $v0, 5 # read integer 
syscall
add $s0, $v0, $zero #store input1 to s0

li $v0, 5 # read integer 
syscall
add $s1, $v0, $zero #store input2 to s0

li $v0, 5 # read integer 
syscall
add $s2, $v0, $zero #store input3 to s0

li $v0, 5 # read integer 
syscall
add $s3, $v0, $zero #store input4 to s0

.data 
list:   $s0, $s1, $s2, $s3 #set array from keyboard values
.text

#get the array into a register
la $t3, list # put address of list into $t3
lw $t4, 0($t3) # get the value from the array cell

li $v0, 1 # print integer 
move $a0, $t4 # what to print is stored at $s1 
syscall # make system call


exit:    
    li $v0, 10 # exit system call 
syscall

アイデアの出典: http://www.cs.pitt.edu/~xujie/cs447/AccessingArray.htm しかし、キーボードからレジスタに保存された値ではなく、ハードコードされた int を使用しています。助けてくれてありがとう。

4

1 に答える 1

2

これ:

.data 
list:   $s0, $s1, $s2, $s3 #set array from keyboard values
.text

このようには機能しません。swレジスタの値をメモリに格納する必要があります。

したがって、プログラムの開始時に、値を格納するためのスペースを確保します。

.data 
list:  .space 16
.text

次に、値を読み取った後、次のように保存しますsw

sw $s0, list
sw $s1, list + 4
sw $s2, list + 8
sw $s3, list + 12
于 2012-10-05T09:04:17.963 に答える