如何将单词存储到用户以前在MIPS中输入的地址中?
我刚开始学习MIPS,我被这段代码困住了 程序概述:首先,用户输入一个数字,该数字应该是存储最终结果的地址,然后输入数组信息,计算不均匀数的乘积,程序将乘积存储在用户输入的地址和寄存器$s3中 问题概述:问题在于将产品存储到用户输入的内存地址中,您可以在主过程末尾附近找到以#error注释的代码行。我收到了错误信息:“地址无法到达”。是什么导致了这个问题?我试了很多东西,但我想不出来 示例测试用例:如何将单词存储到用户以前在MIPS中输入的地址中?,mips,mips32,Mips,Mips32,我刚开始学习MIPS,我被这段代码困住了 程序概述:首先,用户输入一个数字,该数字应该是存储最终结果的地址,然后输入数组信息,计算不均匀数的乘积,程序将乘积存储在用户输入的地址和寄存器$s3中 问题概述:问题在于将产品存储到用户输入的内存地址中,您可以在主过程末尾附近找到以#error注释的代码行。我收到了错误信息:“地址无法到达”。是什么导致了这个问题?我试了很多东西,但我想不出来 示例测试用例: 124000#内存中需要存储最终结果的位置 10#数组长度 1 3 5 7 8 9 4 6 10
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
你不能想写就写。地址必须在数据段内的某个位置。让用户输入地址似乎是一个非常奇怪的想法。这真的是你应该做的吗,或者你可能误解了说明?