gpt4 book ai didi

有人可以和我一起浏览这个 MIPS 代码吗?

转载 作者:行者123 更新时间:2023-12-02 03:38:37 24 4
gpt4 key购买 nike

enter image description here

enter image description here

我的第一个问题是

  1. 在调整堆栈空间时,为什么选择数字 8?我假设它意味着 8 个字节,但如何确定需要调整 8 个字节?我知道我们应该为所有参数(在本例中为一个参数)分配足够的空间,而且我猜还为返回地址分配空间,但我们如何知道每个参数需要多少字节?

    <
  2. 我试图通读代码以了解发生了什么,但我感到困惑

beq $t0, $zero, L1。

我知道我们从这里分支到 L1,其中 n 减 1,但后来我感到困惑。做

日本事实

意味着我们立即返回到它在顶部显示事实的地方,但这次参数是 n = 1 而不是 n = 2? [假设 n = 2 是我们最初的论点] 我们在什么时候到达它说乘以 $a0 和 $v0 的代码?

老实说,我真的很难思考所有这些。如果我理解的话,每次调用阶乘函数时,都会向堆栈添加一个新的“堆栈帧”……每个帧在堆栈中分配 8 个字节?每个新框架都包含一个返回地址以返回到调用它的过程。如果我理解正确,我很难在代码中看到它。

最佳答案

enter image description here

答案 1 在您的代码注释中:
这个“8”要看你的代码,就是图中的“n”。

8 字节,因为您需要放置两个值。每个整数值有 4 个字节...
值是一个参数和返回地址。
(调用者和被调用函数有两个独立的返回地址,
但在寄存器中只有一个位置。
所以调用者暂时将自己的地址保存在栈中)

关于 beq:正确的。如果 $t0$zero 相等(即 $t0 的值为 0),则跳转到 L1 .

关于 jal...
好吧,用一两个词来表达:这是一个函数调用,没有跳转。

如果您没有函数调用或跳转,您的代码将自上而下处理,每条指令。
想象一下,您的计算机中有一些东西指向您现在所在的位置。
所以,如果要处理jal,就指向jal指令。
那里发生了什么:
你得到了另一个指向事实第一条指令的指令指针,
第一个留在 jal
然后,第二个指针将自上而下的函数,
而第一个留在原处。
直到第二个指针到达他的结尾:jr.
在那里,第二个指针再次被移除,
第一个将从之前停止的地方继续。
...
递归的“魔力”在于,第二个指针可以产生第三个
等着他等等……

关于有人可以和我一起浏览这个 MIPS 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21644275/

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