【问题标题】:Stacks in MIPS. What is the purpose of 4 in addi $sp,$sp,-4?MIPS 中的堆栈。 addi $sp,$sp,-4 中的 4 的目的是什么?
【发布时间】:2012-06-26 07:39:09
【问题描述】:

我正在研究一个使用过程的 MIPS 代码,但我无法理解堆栈 (sp) 和帧指针 (fp) 的用途。

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

问题是我错过了什么?

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

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。在另一个例子中,我看到它没有使用sw $ra,0($sp),而是使用sw $t0,($sp)。这是因为它不需要返回值吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多