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

时间:2015-03-31 14:16:11

标签: 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. 先前。必须使用指令jal(跳转和链接)来实现对两个过程G和F的调用

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

在n = 1的情况下控制台输出示例:

  • 结果:G(1)= 4
  • 追踪:G(1) - &gt; F(0) - &gt; F-返回(1) - &gt; F(1) - &gt; F(0) - &gt; F-返回(1) - &gt; F-返回(3) - &gt; G-return(4)

有没有人可以帮助我用MIPS语言翻译这个C / C ++代码?

1 个答案:

答案 0 :(得分:0)

稍微改变了伪语言的高级别&#39;代码是普通的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为你做的工作可能会被视为作弊。