【发布时间】:2014-02-19 19:23:35
【问题描述】:
所以我之前发布了一个关于在哪里编写代码的问题: 从 1 开始,打印直到 10946(含)的所有偶数斐波那契数
打印您打印的所有数字的总和。
你必须使用循环
您必须使用条件分支来测试偶数/奇数 我意识到我做错了,所以我重写了我的代码并想出了这个
.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
LOOP:
LDR R4,=10946 @register gets this value
ODDCHECK:
CMP R4,R5
ADD R4,R2,R3 @adding to cehck if its odd
TST R4,#1
MOV R3,R2 @ answer is 0
MOV R2,R4 @result is in R4 adds to R2 is 0=1
BNE ODDCHECK
BEQ LOOP @exiting the loop if it reaches final number
MOV R0,#Stdout
MOV R1,R5
SWI SWI_PrInt @Print out all the numbers
LDR R1, =NL
SWI SWI_PrStr
B LOOP
After:
SWI SWI_Exit
.data
NL: .asciz"\n"
这在 ARM 中正确加载,但是当我运行它时它什么也不做。现在我的问题是我检查数字是否是偶数然后在我的代码中打印它?以及我是否打印出所有偶数的总和?我对这种汇编语言非常陌生,非常感谢您的帮助。
【问题讨论】:
-
BNE ODDCHECK/BEQ LOOP总是进行。此外,你还有一些奇怪的事情,比如CMP R4,R5,你 A) 没有初始化R5和 B) 没有使用CMP设置的标志来做任何事情。