3

我正在研究一个使用过程的 MIPS 代码,但我不明白堆栈(sp)和帧指针(fp)的目的是什么。

例如,我研究的代码如下所示。它会打印您输入的数字之前的所有数字,例如 3. 3,2,1,0,并显示它使用了多少堆栈大小。在此示例中,它使用了 16。我将其更改-4-8,但出现错误。但是,我注意到其他一些使用-8.

问题是我错过了什么?

proc:
    addi $sp,$sp,-4     # 
    sw   $ra,0($sp)     # push $ra  
4

1 回答 1

1

在调用函数之前将返回地址压入堆栈。这就是代码的作用。-4 表示通过向上移动堆栈指针在堆栈上“分配”4 个字节,以便可以写入返回地址。

上面的解释假设了寄存器的正常使用。

在我看到代码之前,我无法对 -8 的作用做出结论。但它可能会为函数的参数保留空间。

于 2012-06-26T07:42:42.003 回答