【发布时间】:2018-11-11 15:21:47
【问题描述】:
我需要制作一个 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
我一直在考虑解决这个问题的方法,我有一些东西,但我不确定如何去做。我在想该程序需要用户输入数字,然后它对该数字进行计算,然后打印出当前在寄存器中的数字行,分支回到寄存器被覆盖的顶部下一个值,然后做同样的事情,直到该寄存器的值等于用户指定的值,也就是它停止的时候。
【问题讨论】:
-
您希望从何处加载到主指令的分支?请向我们展示您为这个问题编写代码的最佳尝试。这是一道标准的家庭作业题,所以我们希望看到你付出一些努力。
-
如果您想删除您的问题,请将其删除。但是不要把它编辑成废话,把所有的代码都删掉。