所以,这是我需要转换为 mips 程序集的 c++ 代码。
int sum( int arr[], int size ) {
if ( size == 0 ) return 0 ;
else
return sum( arr, size - 1 ) + arr[size-1];
}
这是我的尝试:
.data
arr: .word 5 1 2 3 4
sum:
li $v0, 0
beq $a1, $zero, out
addi $sp, $sp, -12
sw $ra, 8($sp)
sw $s1, 4 ($sp)
sw $s0, 0($sp)
move $s0, $a0
move $s1, $a1
addi $a1, $a1, -1
jal sum
addi $s1, $s1, -1
sll $s1, $s1, 2
addu $s0, $s0, $s1
lw $t0, 0($s0)
add $v0,$v0, $t0
lw $s0, 0($sp)
lw $s1, 4($sp)
lw $ra, 8($sp)
addi $sp, $sp, 12
jr $ra
out:
jr $ra
main:
la $a0, arr
li $a1, 5
jal sum
move $a0, $v0
li $v0, 1
syscall
li $v0, 10
syscall
因此,我在递归调用中保留了 3 个变量:ra、a0 和 a1。但是当我尝试访问数组的内存时,可能出现了错误读取的异常。但我找不到问题。