c - 我需要帮助,将 C 代码翻译成 Mips,任何事情都会受到赞赏

标签 c mips

我目前正在上一个类,我们必须将 C 翻译成 Mips,但是,我正在努力完成这项作业。有人可以帮助我更好地了解 Mips 以便知道如何做到这一点吗?

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

谢谢!

C 代码:

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

最佳答案

这是 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

当然,如果你在不理解的情况下将其按原样交出,那么你就是在失败,并且很可能会给你的类(class)带来麻烦。另请注意,编译器将递归函数替换为迭代函数:) 请随意使用不同的优化级别进行编译,看看编译器有多困惑。

或者...向助教、老师或类的同学寻求帮助。

关于c - 我需要帮助,将 C 代码翻译成 Mips,任何事情都会受到赞赏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54954148/

相关文章:

c - 为什么 printf(i) 在此程序中给出 0 作为输出?

c - 无意的无限 'for' 循环

linux - $gp、.cpload 和 MIPS 上的位置独立性

assembly - 64 位应用程序内存中的布局

string - MIPS 汇编 - 从输入字符串中删除元音

assembly - 负载词和移动词之间的区别?

c - 套接字程序无法 POST - C (Linux)

c - 即使使用正确,Pthreads 也会泄漏内存

一次性更改数组不同索引处的值

assembly - 如何在 MIPS 中遍历数组?