我的第一个问题是
在调整堆栈空间时,为什么选择了数字8?我想它意味着8个字节,但如何确定需要调整8个字节?我知道我们应该为所有参数(在这种情况下,一个参数)分配足够的空间,并且我猜还要为返回地址分配空间,但我们怎么知道每个参数需要多少字节?
我试图阅读代码以理解发生了什么,但我感到困惑
beq $t0, $zero, L1.
从这里我知道我们会跳转到L1,其中n减1,但然后我就困惑了。jal fact是什么意思?
意味着我们立即返回到顶部的fact位置,但这次参数是n = 1而不是n = 2吗?[假设n = 2是我们最初的参数]我们什么时候到达代码,指示将$a0和$v0相乘?
老实说,我非常难以理解所有这些。如果我理解正确,每次调用阶乘函数时,都会向堆栈添加一个新的“堆栈帧”...每个帧将8个字节分配到堆栈中?并且每个新帧都包含返回地址以返回到调用它的过程。如果我理解正确,我很难在代码中看到它。