【发布时间】:2014-04-13 21:47:20
【问题描述】:
在 ARM 汇编中,我部分能够让以下代码工作。
它应该打印出从 1 到 10,946 的所有偶数斐波那契数。我能够打印出所有这些偶数的总和。但是,我无法让它打印出“2”作为斐波那契数之一——它从“8”开始。我试过改变周围的东西,但它只是把它搞砸了。
这是我的代码:
.equ SWI_PrStr, 0x69
.equ SWI_PrInt,0x6b
.equ Stdout, 1
.equ SWI_Exit, 0x11
.global _start
.text
_start:
MOV R2,#0 @Starting value of 0 to register 1
MOV R3,#1 @starting val of 1 to register 2
LDR R4,=10946 @register gets this value
LOOP:
CMP R5,R4
BGE After
ADD R5,R3,R2 @adding to check if its odd
MOV R2,R3 @ answer is 0
MOV R3,R5 @result is in R5 adds to R2 is 0=1
MOV R7, R5
AND R8, R7, #1
CMP R8, #1
BGE LOOP
MOV R1, R5
SWI SWI_PrInt
LDR R1, =NL
SWI SWI_PrStr
ADD R6,R6,R5 @sum of the even numbers
MOV R0,#Stdout
LDR R1, =NL
SWI SWI_PrStr
B LOOP
After:
MOV R1,R6
SWI SWI_PrInt
SWI SWI_Exit
.data
NL: .asciz"\n"
如何重写代码以便打印出“2”以及所有其他数字?
【问题讨论】:
-
尝试将
MOV R0,#Stdout移至顶部?您在之前的打印中不会这样做,但可能会在第一次循环后工作。