Assembly 我将如何在ARM中创建斐波那契序列?

Assembly 我将如何在ARM中创建斐波那契序列?,assembly,arm,fibonacci,Assembly,Arm,Fibonacci,我需要做一个ARM组装程序,它将打印出斐波那契序列,我不确定如何处理它。程序将要求用户输入一个数字,当用户输入该数字时,程序应打印出该数字量的斐波那契序列,因此,例如,如果用户输入10,程序将运行打印 “斐波那契数1是1。” “斐波那契数2是1。” 等等 目前,我的代码如下所示: B main maxF DEFW 0 enterI DEFB "Please enter the number of fibonacci numbers to print: ",0 newline

我需要做一个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

我一直在想一个方法,我有一些东西,但我不确定如何做到这一点。我认为程序需要用户输入数字,然后计算该数字,然后打印出寄存器中当前数字的行,分支返回到顶部,在顶部寄存器被下一个值覆盖,然后执行相同的操作,直到该寄存器的值等于用户指定的值,此时寄存器停止

现在代码不可能工作,因为您从未更新过
r3
r4
(您之前的两个斐波那契数)的值,并且您在许多地方覆盖了
r0
(用于循环计数器)。可能还有其他问题


现在还不清楚你被困在哪里——这可能是由于缺乏汇编语言经验和开发算法过程的经验。我的建议是将这两个过程分开。用C(或其他语言,但C是最接近汇编语言的语言,不用它!)编写一些代码,计算第一个
n
Fibonacci数。一旦成功,开始考虑如何在汇编语言中实现相同的东西。

您希望将分支到主指令加载到内存中的什么地方?请向我们展示您为这个问题编写代码的最佳尝试。这是一个标准的家庭作业问题,所以我们希望看到你做出一些努力。如果你想删除你的问题,请删除它。但不要删除所有代码,将其编辑成废话。对不起,这还不够清楚。如果你理解C语言中的一个算法,那么我在回答中提到的第一个错误就没有理由了:你没有更新
r3
r4
,所以你的代码无法正常工作。这不是汇编语言问题,而是算法问题。