我需要帮助,将C代码转换为Mips,任何事情都值得赞赏

时间:2019-03-02 00:44:56

标签: c mips

我目前正在上课,我们必须将C转换为Mips,但是,我正在为这项作业而苦苦挣扎。有人可以帮助我更好地了解Mips,以便知道如何执行此操作吗?

主要问题:保存寄存器并将其装入堆栈有什么区别? 如何创建一个接受输入参数的函数? 您如何使函数递归?

谢谢!

C代码:

int f(int n, int m) {  
    if (n ≤ 0)  
        return m;  
    else  
        return f(n-1, n+m); 

1 个答案:

答案 0 :(得分:0)

这是GodBolt的输出(带有-O3标志)

f:
    blez    $4,.L7
    move    $2,$5

.L3:
    addu    $2,$2,$4
    addiu   $4,$4,-1
    bne     $4,$0,.L3
    nop

.L7:
    j       $31
    nop

当然,如果您不加理解地按原样打开它,则可能会失败,并且很可能在课堂上遇到麻烦。还要注意,编译器将递归函数替换为迭代函数:)可以随意使用不同的优化级别进行编译,以查看编译器有多混乱。

或者...向您的班级的助教,老师或同学寻求帮助。