Мне нужно сделать программу сборки ARM, которая распечатает последовательность Фибоначчи, и я не уверен, как к ней приблизиться. Программа запросит у пользователя число, и когда он введет это число, программа должна распечатать последовательность Фибоначчи для этого количества чисел, поэтому, например, если пользователь введет 10, программа выполнит печать
«Число Фибоначчи 1 равно 1».
«Число Фибоначчи 2 равно 1».
и т. Д.
В настоящее время мой код для этого выглядит следующим образом:
B main
maxF DEFW 0
enterI DEFB "Please enter the number of fibonacci numbers to print: ",0
newline DEFB "\n",0
fibbo DEFB "Fibonacci number ",0
is DEFB " is ",0
end DEFB ".\n",0
errorM DEFB "Error, try again!\n",0
ALIGN
main ADR R0, enterI
SWI 3
MOV R1, #0
MOV R2, #10
MOV R3, #0 ;lastNumber variable
MOV R4, #1 ;numberbeforeLast variable
MOV R5, #0 ;currentNumber variable
start SWI 1 ;take user input
CMP R0, #10 ;compare R0 with #10 (enter)
BEQ _end ;if equal, go to _end
CMP R0, #48 ;compare R0 with #48 (0)
BLT _error ;if less than, go to _error
CMP R0, #57 ;compare R0 with #57 (9)
BGT _error ;if greater than, go to _error
SUB R0, R0, #48 ;R0 = R0 - #48
SWI 4 ;print the above
MUL R1, R1, R2 ;Multiply the R1 register by R2 and store in R1
ADD R1, R1, R0 ;Add the R1 register to R0 and store in R1
B while_cond
while_loop
ADD R5, R3, R4 ;currentnumber = lastnumber + numberbeforelast
ADR R0, fibbo
SWI 3
STR R5, maxF
LDR R0, value
SWI 4
ADR R0, is
SWI 3
while_cond
CMP R0, #0
BGT while_loop
_end SWI 2
_error ADR R0, errorM
SWI 3
B main
Я думал о подходе к этому, и у меня есть кое-что, но я не уверен, как это сделать. Я думал, что программа ожидает ввода от пользователя для числа, а затем выполняет вычисление для этого числа, а затем распечатывает строку для числа, находящегося в настоящее время в регистре, и переходит обратно вверх, где регистр перезаписывается следующее значение и затем делает то же самое, пока значение этого регистра не станет равным значению, указанному пользователем, то есть когда оно останавливается.