如何解决如何将此代码从 C 转换为 Mips?
谁能帮我把这个 C 代码转换成 Mips? 我真的不知道。任何事情都会有所帮助。谢谢!
int aplica(int (*f)(int),int x)
{
return (*f)(x);
}
int f1(int y){return y+y;}
int f2(int y){return y*y;}
int f3(int y){return -y;}
int (*vf[])={f1,f2,f3},v[3];
void main()
{
register int i;
for(i=0;i<3;++i) v[i]=aplica(vf[i],1+i);
}
解决方法
这似乎是家庭作业,不赞成在这里给出解决方案,但我可以指点迷津。
让我们先修复代码并添加一些输出(但您应该花时间使用调试器逐步完成它):
#include <stdio.h>
#include <stdlib.h>
static int aplica(int (*f)(int),int x)
{
return (*f)(x);
}
static int f1(int y)
{
return y+y;
}
static int f2(int y)
{
return y*y;
}
static int f3(int y)
{
return -y;
}
static int (*vf[3])(int x) = {f1,f2,f3};
static int v[3];
int main(void)
{
register int i;
for (i=0; i<3; ++i) {
v[i]=aplica(vf[i],1+i);
}
for (i=0; i<3; ++i) {
printf("v(%d] = %d,",i,v[i]);
}
putchar('\n');
return EXIT_SUCCESS;
}
编译例如clang -Weverything somips.c -o somips
这是一个简单的程序,包含三个通过函数指针调用它的简单函数。
不要被数组激怒,只需一步一步地做,然后从一个函数开始。实现一个函数指针,通过函数指针调用单个函数。
static int f1(int y)
{
return y+y;
}
(*fp)(int x) = f1;
在 C 中看起来很复杂,但它仍然只是一个指针。
要在 MIPS 中调用函数,请使用 jal
"jump and link" 后跟功能。提示:您可以跳转到带有 jalr
的寄存器中的地址。例如:jalr $t0
。简而言之,这已经是您的函数指针。
您需要记住(或在 Google 的帮助下在 Stackoverflow 上找到它)
- 如何在 MIPS 中执行函数
- 如何在 MIPS 中做指针
- 如何在 MIPS 中处理数组(列表)
(我尝试并 C&P 将它们导入 Google,结果很好)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。