Fibonacci数字使用ARM汇编代码

时间:2014-02-18 02:22:10

标签: assembly arm sum fibonacci

所以我正在尝试编写代码,我完成了以下两个目标:

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

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

必须使用循环

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

首先,我首先使用此代码,然后打印出1到1000之间的所有数字,现在我想调整它以满足上述目标,但我不知道如何从1000改变大小到10946我一直得到错误:值10946不能用operand2格式表示,如果我可以得到一些帮助我非常肯定我可以弄清楚其余的这里是我到目前为止的代码:

 .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"

一切都在加载,除了我现在得到这个无限循环而且我想弄清楚如何只打印偶数并获得所有偶数的总和

1 个答案:

答案 0 :(得分:0)

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

一些例子

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