gpt4 book ai didi

c - MIPS 递归出错

转载 作者:行者123 更新时间:2023-11-30 17:09:27 25 4
gpt4 key购买 nike

所以,我在将 C 代码转换为 mips 时遇到了麻烦。任务是为递归函数编写一个 mips 代码,对偶数求和并返回整数。我相信我的 C 代码是正确的:

int sumRec(int arr[], int len){
if(len==0){
return 0;
}
else if(arr[len]%2==0){
return arr[len]+sumRec(arr,len-1);
}
else{
return 0+sumRec(arr,len-1);
}
}

但是,当涉及到将其翻译成MIPS时,我遇到了很大的困难。我认为从逻辑上讲它写得很好,但我不明白为什么我的输出有这么多错误(4 和 7 类型的异常(exception))。这是我的代码:

    .data
test: .word 1, 2, 3, 4, 5
length: .word 5
x: .word 0
y: .word 2
summ: .asciiz "summ: "
nl: .asciiz "\n"

.text

main:
#prints "summ: "
li $v0, 4
la $a0, summ
syscall


#calling sumRec
la $a0, test
la $t0, length
lw $a1, 0($t0)
jal sumRec

#print output
move $a0, $v0
li $v0, 1
syscall

#exit
li $v0, 10
syscall


sumRec:
addi $sp, $sp, -12
addi $t1, $t0, -1 #compute len-1
lw $t6, y
sw $t1, 0($sp) #save len-1 in stack
sw $ra, 4($sp) #save return address
bne $t1, $zero, else_01
li $v0, 0 #set return to 0
addi $sp, $sp, 12
jr $ra

else_01:
li $t7, 4 #t7 = 4
mult $t1, $t7 #len-1 * 4
mflo $t2
add $t2, $t2, $a1
lw $t3, 0($t2)
div $t2, $t6
mfhi $t4
beq $t4, $zero, else_02
sw $t3, 8($sp)
move $a1, $t0
jal sumaRec
lw $t3, 8($sp)
add $v0, $v0, $t3
lw $ra, 4($sp)
addi $sp, $sp, 12
jr $ra

else_02:
move $a1, $t1
jal sumaRec
lw $ra, 4($sp)
addi $sp, $sp, 12
jr $ra

有人可以帮我解决一下吗?我哪里出错了?

最佳答案

数组的最后一个元素是 arr[len-1],而不是 arr[len]

int sumRec(int arr[], int len){
if(len==0){
return 0;
}
else if(arr[len-1]%2==0){
return arr[len-1]+sumRec(arr,len-1);
}
else{
return 0+sumRec(arr,len-1);
}
}

关于c - MIPS 递归出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com