Мне нужна помощь, перевод кода C в Mips, все ценится - PullRequest
0 голосов
/ 02 марта 2019

В настоящее время я учусь в классе, где мы должны перевести C на Mips, однако я борюсь с этим заданием.Кто-нибудь может помочь мне лучше понять Mips, чтобы знать, как это сделать?

основные вопросы: в чем разница между сохранением регистра и загрузкой его в стек?Как создать функцию, которая принимает входные аргументы?Как сделать функции рекурсивными?

Спасибо!

C Код:

int f(int n, int m) {  
    if (n ≤ 0)  
        return m;  
    else  
        return f(n-1, n+m); 

1 Ответ

0 голосов
/ 02 марта 2019

Вот вывод GodBolt (с флагами -O3)

f:
    blez    $4,.L7
    move    $2,$5

.L3:
    addu    $2,$2,$4
    addiu   $4,$4,-1
    bne     $4,$0,.L3
    nop

.L7:
    j       $31
    nop

Конечно, если вы превратите это в «как есть», не понимая этого, вы ошибаетесь сами и вполне можете столкнуться с проблемамитвой класс.Также обратите внимание, что компилятор поменял вашу рекурсивную функцию на итеративную :) Не стесняйтесь компилировать с различными уровнями оптимизации, чтобы увидеть, насколько грязным может быть компилятор.

Или ... спросите TA, учителя илисокурсники вашего класса за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...