将mips转换为c

时间:2013-03-15 17:35:56

标签: mips

所以这里我有mips的这个功能。我正在尝试将其转换为c。

1 mystery:  bne $0, $a0, recur  # 
2           li $v0, 0       #
3           jr $ra          #
4 recur:        sub $sp, $sp, 8     #
5           sw $ra, 4($sp)  #
6           sub $a0, $a0, 1     #
7           jal mystery         #
8           sw $v0, 0($sp)  #
9           jal mystery         #
10          lw $t0, 0($sp)  #
11          addu $v0, $v0, $t0  #
12          addu $v0, $v0, 1    #
13          add $a0, $a0, 1     #
14          lw $ra, 4($sp)  #
15          add $sp, $sp, 8     #
16          jr $ra          #

我的意思是看这个,它看起来像递归

int mystery(int n){

}

看起来好像从8点开始,但是我很快就迷失了神秘感。 似乎最终的情况是它等于0

任何想法?

1 个答案:

答案 0 :(得分:1)

这似乎是一种计算2^n-1的复杂方式,其中n是函数的输入。

C翻译可能如下所示:

int mystery(int n)
{
  if (n != 0) {
    return mystery(n - 1) + mystery(n - 1) + 1;
  } else {
    return 0;
  }
}