что такое int f (int n, int m) в MIPS - PullRequest
0 голосов
/ 02 марта 2019

Я работал над переводом некоторого C-кода в MIPS и застрял в этой одной строке.

int f(int n, int m)

Я знаю, что это должно быть для инициализации переменных, но как это будет выглядеть в MIPS?У меня n = $ a0 и m = $ a1.

Для контекста вот весь код:

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

Я уже понимаю, как работает цикл по какой-то причине.Я застрял на этом.

Ответы [ 2 ]

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

это рекурсивная функция, но любой оптимизирующий компилятор фактически удалит рекурсию.

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

f:
.L3:
        MOV.B   #0, R14
        CMP.W   R12, R14 { JGE        .L1
        ADD.W   R12, R13
        ADD.W   #-1, R12
        BR      #.L3
.L1:
        MOV.W   R13, R12
        RET
0 голосов
/ 02 марта 2019

Это простая c рекурсивная функция.имя функции - f, она принимает два аргумента m и n и просто добавляет последовательность n к 1 в m.

Например, если вы передадите f (3,5), она вернет 3 + 2 + 1 +5 = 11 или f (4,5) вернет 4 + 3 + 2 + 1 + 5 = 15

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