2013-03-15 3 views
-1

Итак, у меня есть эта функция в mips. Я пытаюсь преобразовать его в c.Преобразование 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 тайна (Int N) {

}

это выглядит как-то начинается в 8, но я заблудитесь очень быстро с прыжками в тайну. кажется, что это конечный случай, он равен 0

любые идеи?

ответ

1

Это, по-видимому, запутанный способ вычисления 2^n-1, где n - это вход функции.

A C перевод может выглядеть примерно так:

int mystery(int n) 
{ 
    if (n != 0) { 
    return mystery(n - 1) + mystery(n - 1) + 1; 
    } else { 
    return 0; 
    } 
} 
Смежные вопросы