我刚刚开始学习 MIPS,但我一直坚持使用此代码。
程序概述:首先用户输入一个数字,该数字应该是最终结果的存储地址,然后输入数组信息,计算奇数的乘积,程序将乘积存储在地址用户输入和寄存器 $s3
问题概述: 问题在于将产品存储到用户输入的内存地址中,您可以在主程序末尾附近找到#error注释的代码行。我收到错误消息:“地址遥不可及”。什么可能导致这个问题?我尝试了很多东西,但我无法弄清楚。
示例测试用例:
124000 # 需要存放最终结果的内存位置
10 # 数组长度
1 3 5 7 8 9 4 6 10 4 # 数组编号
输出:945
这是我的代码:
.data
numbers: .space 80
.text
main:
li $v0, 5
syscall
move $s0, $v0 # $s0 = the address where I need to store the product
li $v0, 5
syscall
move $s1, $v0 # $s1 = size of numbers array
move $t0, $zero # $t0 = counter for the loop
la $t1, numbers # $t1 = address of numbers
numbersInputLoop:
beq $t0, $s1, endOfInput
addi $t0, $t0, 1
li $v0, 5
syscall
move $t2, $v0
sw $t2, 0($t1)
addi $t1, $t1, 4
j numbersInputLoop
endOfInput:
jal calculateProduct
# storing in memory and in register s3
sw $v1, 0($s0) # error
move $s3, $v1
move $a0, $v1
li $v0, 1
syscall
li $v0, 10
syscall
# end of main and beginning of procedure
calculateProduct:
addi $sp, $sp, -8
sw $s0, 0($sp)
sw $s1, 4($sp)
li $t2, 1 # product
move $t0, $zero # counter
la $t1, numbers
loop:
beq $t0, $s1, endOfLoop
addi $t0, $t0, 1
lw $t3, 0($t1)
li $t4, 2
div $t3, $t4
mfhi $t5
beq $t5, $zero, else
mult $t2, $t3
mflo $t2
else:
addi $t1, $t1, 4
j loop
endOfLoop:
lw $s1, 4($sp)
lw $s0, 0($sp)
addi $sp, $sp, 8
move $v1, $t2
jr $ra