Assembly 使用ARM汇编代码的斐波那契数

Assembly 使用ARM汇编代码的斐波那契数,assembly,arm,sum,fibonacci,Assembly,Arm,Sum,Fibonacci,因此,如果我实现以下两个目标,我将尝试编写一个代码: 从1开始,打印最大10946的所有偶数斐波那契数(含) 打印您打印的所有数字的总和 必须使用循环 必须使用条件分支来测试偶数/奇数 首先,我有这段代码,我以前用它来打印从1到1000的所有数字,现在我想调整它,以满足上述目标,但我不知道如何将大小从1000更改为10946,我不断得到错误:如果我可以得到一些帮助,值10946不能以操作数2格式表示我很确定我能搞定剩下的部分,这是我目前掌握的代码: .equ SWI_PrStr, 0x69

因此,如果我实现以下两个目标,我将尝试编写一个代码:

从1开始,打印最大10946的所有偶数斐波那契数(含)

打印您打印的所有数字的总和

必须使用循环

必须使用条件分支来测试偶数/奇数

首先,我有这段代码,我以前用它来打印从1到1000的所有数字,现在我想调整它,以满足上述目标,但我不知道如何将大小从1000更改为10946,我不断得到错误:如果我可以得到一些帮助,值10946不能以操作数2格式表示我很确定我能搞定剩下的部分,这是我目前掌握的代码:

 .equ SWI_PrStr, 0x69 
    .equ SWI_PrInt,0x6b 
    .equ Stdout, 1 
    .equ SWI_Exit, 0x11 
    .global _start
    .text
    _start:


    MOV R4, #1 @start at this register

    LOOP:
    CMP R4, #10946 @going to check numbers to 10946

    BGE After: 
    MOV R0, #Stdout 
    MOV R1, R4
    SWI SWI_PrInt @Print out all the numbers
    LDR R1, =NL 
    SWI SWI_PrStr
    ADD R4, R4, #2 
    B LOOP

        After:
        SWI SWI_Exit
    .data
    NL: .asciz"\n"
现在我想我已经找到了第一部分,我得到了这个:

.equ SWI_PrStr, 0x69 
.equ SWI_PrInt,0x6b 
.equ Stdout, 1 
.equ SWI_Exit, 0x11 
.global _start
.text
_start:

LDR R1,=1 @start at 1
LDR R4, =10946 @going to check numbers to 10946

LOOP: 
MOV R0, #Stdout 
MOV R1, R4
SWI SWI_PrInt @Print out all the numbers
LDR R1, =NL 
SWI SWI_PrStr
ADD R4, R4, #2 
B LOOP

    After:
    SWI SWI_Exit
.data
NL: .asciz"\n"

除了我现在得到这个无限循环之外,所有的东西都在加载,我正试图找出如何只打印出偶数,并得到所有偶数的总和。

展开@Michael的评论。ARM数据处理指令中的立即数值可以是具有32位二进制表示的任何正整数,其1适合于2位对齐的8位块,该块可以在位0处环绕

一些例子

0b00000000111111110000000000000000 ; valid
0b10010000000000000000000000000011 ; valid
0b00000000000000000000001111101000 ; (1000 in decimal) valid
0b00000000000000000010101011000010 ; (10946) invalid

ARM指令不能对任意大的瞬间进行编码。使用LDR=将10946加载到寄存器中,然后在使用值10946的任何位置使用该寄存器。好的,我现在执行了LDR,我想如何打印出从1到10946的所有偶数