如何将此代码从 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,结果很好)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...