在 MIPS 递归中打印列表

Printing list in MIPS recursion

目前,我正在使用MIPS,我想知道我应该对以下代码进行哪些修改(打印列表的递归函数):

printList:
   addi $sp, $sp, -8
   sw $ra, 0($sp)
   beqz $a0, endRec
   lw $t0, 0($a0)
   sw $t0, 4($sp)
   lw $a0, 4($a0)
   jal printList
   lw $a0, 4($sp)
   li $v0, 1
   syscall
   la $a0, str
   li $v0, 4
   syscall
endRec:
   lw $ra, 0($sp)
   addi $sp, $sp, 8
   jr $ra

这样它以“正常”顺序打印列表(例如,如果我在末尾添加元素,1 2 3,我希望它像那样打印它而不是像 3 2 1)。 注意:str 是在数据段中定义的 blanco。 我也知道我可以做反向列表然后调用那个函数,但是有更简单的方法吗?

虽然你在 MIPS 中工作,但这并不是真正的 MIPS 问题,它是递归的一般问题。

在递归中,假设我们有:

recursiveFunction (...) {
    if condition then exit

    // do some work #1

    recursiveFunction (...);

    // do some other work #2
}

在标记为 #1 的部分中完成的工作将在递归之前发生,例如关于递归下降——从某种意义上说,这是向前发生的。

标记为#2 的部分中完成的工作将在递归之后发生,例如关于递归的展开——从某种意义上说,这是倒退的。

如果你把打印放在#2 部分,列表会倒过来。如果您将打印内容放在第 1 部分,列表将向前显示。