#mips #fibonacci
#mips #фибоначчи
Вопрос:
Я пытаюсь составить последовательность Фибоначчи с помощью MIPS, и это код, который у меня есть до сих пор.
main:
li $t1, 0
li $t2, 1
add $t3, $t1, $t2
loop:
add $t3, $t1, $t2
la $t1, ($t3)
add $t3, $t1, $t2
la $t2, ($t3)
j loop
Он работает нормально, пока не дойдет до 8, затем следует добавить 5, чтобы получилось 13, но вместо этого в регистре отображается 0x0000000d, затем он полностью запутывает последовательность, каким-то образом появляется 15, затем 22, затем 37.
Я предполагаю, что это как-то связано с переносом, но как мне на самом деле справиться с этим, чтобы он правильно выполнял последовательность?
Спасибо
Комментарии:
1. d в шестнадцатеричном формате равно 13. Ваш отладчик показывает вам шестнадцатеричное число, но 13 десятичных знаков — это то же числовое значение, что и d hex. В некоторых отладчиках есть опция отображения в десятичной системе счисления: например, в меню настроек MARS установлен флажок «Значения, отображаемые в шестнадцатеричной системе счисления» — вместо этого снимите флажок для десятичных значений.
2. Не используйте
la
для копирования значений между регистрами: используйтеmove
вместо этого.3. Благодаря вам обоим, теперь это работает. Но он начал работать отлично, как только я снял флажок показывать в шестнадцатеричном формате, я хочу понять, почему он давал мне 15, затем 22 в последовательности вместо 13, затем 21, наверняка он должен был давать мне те же значения, но в шестнадцатеричном формате раньше? Немного запутался в этой части. Спасибо
4. Это всегда работало. Параметр отображения просто изменил радиус отображения отладчика, но в остальном не изменил поведение симулятора или программы.