这是家庭作业,所以我现在只给你一些线索,并在你进行时添加。有几件事:
1/ 你需要告诉我们它应该做什么。这是最重要的。
2/ 您将 array1 地址存储到 t0 中,然后在第一个循环中重用 t0。
3/ 您似乎对地址和这些地址的内容("la $s0, valuec"
和"addu $t0, $t1, $s0"
)感到困惑。
更新:
实际上我必须暂时退出,所以我会发布我的解决方案,以免让您陷入困境。
我之前提到的混淆是您将两个地址加载到 $t1 和 $s0 中,然后将它们加在一起以获得另一个地址 - 这可能远远超出您的数据区域(您实际上应该添加一个地址和偏移量)。
这基本上就是您的代码存在的问题(打印的零和崩溃)。你最好的办法是解决这个问题,并参考下面的代码作为最后的手段,看看我会怎么做。从长远来看,复制代码对您没有帮助,您最好假设您的教育工作者也在检查所有网站是否存在抄袭行为。
这是我想出的代码(很快,所以你需要测试它——它可能有错误)。我建议您详细阅读评论以了解它在做什么。
我会在几个小时后回来看看你过得怎么样。干杯。
.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