Как мне перевести этот код с C на MIPS?

#c #mips

#c #mips

Вопрос:

Это исходный код, который нам дан. Нам нужно перевести следующий код C на MIPS.

 ## int get_singleton(int value) {
##   for (int i = 0 ; i < GRID_SQUARED ;    i) {
##   if (value == (1<<i)) {
##      return i;
##   }
##   }
##   return 0;
## }
get_singleton:
    jr  $ra
  

Пока у меня есть это для моего перевода, но я продолжаю застревать в бесконечном цикле.

 main:
    li  $a0, 0x010
    jal get_singleton

get_singleton:
    li  $v0, 0          # i
    li  $t1, 1
gs_loop:sll $t2, $t1, $v0       # (1<<i)
    beq $t2, $a0, get_singleton_done
    add $v0, $v0, 1
    blt $v0, 9, gs_loop     # repeat if (i < 9)
get_singleton_done:
    jr  $ra
  

Комментарии:

1. вы можете использовать компилятор

2. @user3528438 Ручная компиляция C — обычное упражнение при изучении ассемблера.

3. Что вы ожидали, что произойдет после get_singleton возврата? (подсказка: какая следующая инструкция после jal get_singleton ?)

4. Предполагается, что он возвращает индекс первого вхождения установленного бита в число, указанное в функции main. Только если число является одноэлементным, что означает, что оно имеет только один установленный бит, оно вернет индекс.