我是 MIPS 编程的新手,一直在努力理解 MIPS 程序及其流程。谁能帮我理解它。下面是代码。我的疑问是在RTN
函数 where$ra
应该在 a 之后返回jr $r
的位置以及将在sw $ra, 8($sp)
堆栈之后存储的内容,因为当该语句第一次执行时, 的值是$ra
什么?它是一些垃圾值还是我们需要假设一些值才能理解程序?
f: addi $sp, $sp, -12
sw $ra, 8($sp)
sw $s0, 4($sp)
sw $a0, 0($sp)
bgt $a0, $0, L1
add $v0, $0, $0
j RTN
L1: addi $t0, $0, 1
bne $t0, $a0, L2
add $v0, $0, $t0
j RTN
L2: subi $a0, $a0,1
jal f
add $s0, $v0, $0
sub $a0, $a0,1
jal f
add $v0, $v0, $s0
RTN: lw $a0, 0($sp)
lw $s0, 4($sp)
lw $ra, 8($sp)
addi $sp, $sp, 12
jr $ra