将 C 语言转换为 MIPS 汇编语言

标签 c assembly mips

我有以下 C 代码,我想将其转换为 MIPS 汇编。

int fib_iter(int n) {
  int i, f0, f1, f;
  f0 = 0;
  f1 = 1;
  if (n == 0) return f0;
  if (n == 1) return f1;
  for (i = 2; i <= n; i = i + 1) {
    f = f0 + f1;
    f0 = f1;
    f1 = 1;
  }
  return f;
}

我不知道该怎么做,而且我在任何地方都找不到好的教程。我已阅读有关 MIPS 的维基百科文章( https://en.wikipedia.org/wiki/MIPS_instruction_set ),并发现有关所有汇编命令的表格已经非常有用,但实际上翻译对我来说仍然不清楚。您能否用上面的小示例向我展示如何做然后我可以自己尝试一下吗?谢谢!

最佳答案

我认为你的家庭作业的目的是尝试让你思考像 C 这样的高级语言是如何被编译器翻译成汇编语言的。考虑寄存器、逻辑测试、跳转、堆栈等。

我相信您的小程序将返回斐波那契数列中的第 n 个数字。如果我设置了这个,我会期望编写一个简单的 MIPS 程序集片段来完成同样的事情。

因此,在这个小函数中您需要考虑五个数字,您可以使用五个寄存器(如果您聪明的话,可以使用更少的寄存器)。还有一些相等性检查和循环。

因此,您应该查看 addbnebeqj 指令。另请查看标签(与 bnebeq 一起使用)并决定使用哪种调用约定,以便了解与 一起使用的返回地址和值寄存器j.

祝你好运!

另请参阅 - MIPS Architecture and Assembly Language Overview

关于将 C 语言转换为 MIPS 汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23636644/

相关文章:

c - 尝试从 C 生成汇编代码

c - 标准流管道测试失败

代码:: block - 警告:GDB:无法设置控制终端:不允许操作

在 C 中创建数字目录

assembly - 如果汇编代码指令等同于机器代码指令,我不明白这些汇编代码和机器代码的差异

assembly - 赋值指令未将新值分配给 emu8086 中的符号

c++ - 如何从 GCC/clang 程序集输出中删除 "noise"?

c - Travis 上的 MIPS 交叉编译

assembly - 我们如何在汇编代码 (MIPS) 中取消引用指针?

mips - 学习 MIPS 作为第二汇编语言?