2011-04-22 57 views
1

我有一个简单的c函数,我需要将其转换为MIPS指令进行作业分配。MIPS指令的简单C函数

功能是:

int load(int *ptr) { 
    return *ptr; 
} 

我的MIPS指令,我想出是:

load: 
    move $v0,$a0 
    jr $ra 

这是正确的吗?

+1

你有没有试过运行它?它工作? – Mat 2011-04-22 04:57:58

+1

您以前的[question](http://stackoverflow.com/questions/5751463/how-is-this-mips-assembly-conversion-of-this-c-program)以'j $ ra'结尾;这以'jr $ ra'结尾。差异很重要吗? – 2011-04-22 05:00:37

+0

通常我使用MARS来测试我的工作,但此刻我远离主计算机,根据我的教科书我无法测试 – 2011-04-22 05:00:39

回答

3

让我们来分析一下功能。

首先,这里涉及到的一切类型是什么?

  • ptr是一个指向int
  • 返回值应该是int

接下来,该功能对此有什么作用?

  • 取消引用int指针(即,读出int值,该指针指向)ptr并返回该值。

接下来考虑你的代码在做什么。

  • 您将参数移至返回值。
  • 从函数返回。

这是正确的吗?

我会说不。你基本上已经返回了指针,而不是指针指向的值。

你能做些什么呢?

请记住我们在这里处理的类型以及您对它的处理方式。你有你的论点(类型int *),你返回(int类型)。类型不匹配。我们在C程序中做了什么?我们取消了引用来获取值的指针。换句话说,将int *转换为int。你需要这样做。