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