これは宿題なので、今のところ手がかりだけを提供し、随時追加します。いくつかのこと:
1/ 何をすべきかを教えてください。それが最も重要なことです。
2/ array1 アドレスを t0 に格納し、最初のループ内で t0 を再利用します。
3/ あなたはアドレスとそのアドレスの内容について混乱しているようです ("la $s0, valuec"
と"addu $t0, $t1, $s0"
)。
アップデート:
実際、私はしばらくサインオフする必要があるので、あなたを慌てさせないように私の解決策を投稿します.
前に言及した混乱は、2 つのアドレスを $t1 と $s0 にロードし、それらを追加して別のアドレスを取得しているという事実でした。これは、データ領域をはるかに超えている可能性があります (実際には、アドレスとオフセット)。
これは基本的に、コードで発生する問題です (ゼロが出力されることとクラッシュすることの両方)。あなたの最善の策は、それを修正し、以下の私のコードを最後の手段として参照して、私がどのようにそれを行ったかを確認することです. コードをコピーしても長期的には役に立ちません。教育者もすべての Web サイトの盗用をチェックしていると想定するのが賢明です。
これは私が思いついたコードです (すぐにテストする必要があります - バグがあるかもしれません)。コメントを詳しく読んで、それが何をしているのかを理解することをお勧めします。
数時間後に戻ってきて、あなたの様子を見に行きます。乾杯。
.text
main:
# Initialization of array pointers and loop
la $t0, array1 # address of array 1
la $t1, array2 # address of array 2
li $t2, 1 # element number
li $t3, 6 # upper limit of elements
# Process each word in array 2, adding 10 and placing
# into array 1.
Loop:
lw $t3, 0($t1) # get word from array 2
addi $t3, $t3, 10 # add 10 to word
sw $t3, 0($t0) # store word into array 1
addi $t0, $t0, 4 # move to next entry in array 1 and 2
addi $t1, $t1, 4
addi $t2, $t2, 1 # increment element number
blt $t2, $t3, Loop # loop until all elements done
# Initialize printing loop by going back to start of array 1
la $t0, array1 # address of array 1
li $t2, 1 # element number
# Loop through array 1, printing each element.
pLoop:
lw $t2, 0($t0) # get word from array 1
li $v0, 1 # 'print' command code
move $a0, $t2 # needs value in $a0
syscall # print it
addi $t0, $t0, 4 # move to next entry in array 1
addi $t2, $t2, 1 # increment element number
blt $t2, $t3, Loop # loop until all elements done
li $v0, 10 # 'terminate' command code
syscall # exit
# Data arrays for array 1 and 2
.data
array1: .word 0,0,0,0,0
array2: .word 1,2,3,4,5