c++ - MIPS 语言中的嵌套和递归过程

标签 c++ c mips

F和G是两个程序,定义如下(在伪语言高级中 级别):

int G(int n) {
int b = 0;
int u = 0;
for (int k = 0; k <= n; k++) {
    u = F(k);
    b = (b*b)+u;
}   
return b;
}

int F(int m) {
    if(m == 0) {
       return 1; 
    } 
    else {
       int p = F(m-1);
       return (2*p)+m;
    }
 }

 System.out.println(G(n));     //where n is a natural number

使用 QtSpim,编写并测试一个程序,该程序读取第一个自然数 n,并显示在控制台上:

  • 过程 G (n) 返回的值,按所述实现 G 和 F 之前。对G、F这两个过程的调用必须使用指令jal(跳转和链接)来实现

  • 具有嵌套调用序列的轨道(参数之间有 括号)以及各种嵌套调用返回的值(括号之间的返回值),对于 G 和 F

n = 1 时的控制台输出示例:

  • 结果:G (1) = 4
  • 轨迹:G (1) -> F (0) -> F-return (1) -> F (1) -> F (0) -> F-return (1) -> F-return (3) ) -> G-return (4)

有谁可以帮我把这段C/C++代码翻译成MIPS语言吗?

最佳答案

稍加改动,“伪语言高级”代码就是纯 C(89)。您必须更改 F 和 G 的顺序或添加前向声明。顺便说一句,只有 F 是递归的,并且没有任何嵌套。 G 只是调用 F。

#include <stdio.h>

int F(int m)
{
  if(m == 0) {
    return 1; 
  } 
  else {
    int p = F(m-1);
    return (2*p)+m;
  }
}

int G(int n)
{
  int b = 0;
  int u = 0;
  for (int k = 0; k <= n; k++) {
    u = F(k);
    b = (b*b)+u;
  }   
  return b;
}

int main(int argc, char** argv)
{
  printf("%u\n", G(2));
  return 0;
}

进入 C 语言后,您可以调用 gcc 为 MIPS 编译它(您可以选择处理器或通用 ISA 的名称):

gcc -Wall -std=c99 -march='mips3' -S -c filename.c

您的代码已最终编译为 MIPS。当然,如果这是家庭作业,让 gcc 为你做这些工作可能会被视为作弊。

关于c++ - MIPS 语言中的嵌套和递归过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29370772/

相关文章:

c++ - visual studio 2015 控制台不等待键

c++ - 在 MFC 组合框中设置文本而不将其添加到列表中

c - 如何在该 MIPS 代码的基本数组中存储偏移量?

c++ - 显式指定要写入 std::ostringstream 的指定字符串

c - 在 C 中打印二进制字符

c - 从 bsearch 和 lfind 确定索引?

c - 你如何找到图中所有可达的节点

linux - 如何在 x86 平台上运行 MIPS 二进制文件?

assembly - MIPS 组件,lui 0x1001

c++ - 带有自定义小部件的 QItemDelegate