#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. Только если число является одноэлементным, что означает, что оно имеет только один установленный бит, оно вернет индекс.