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的情况下控制台输出示例:
有没有人可以帮助我用MIPS语言翻译这个C / C ++代码?
答案 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为你做的工作可能会被视为作弊。