2014-02-19 34 views
0

總結,所以我以前張貼的問題上寫在代碼: 從1開始,打印所有偶數Fibonacci數高達10946(含)斐波納契即使在ARM

打印所有數量的總和你打印。

您必須使用循環

您必須使用條件分支進行測試奇/偶 我意識到我做的一切都是錯的,所以我改寫了我的代碼,並與該

.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中正確加載,但它在我運行時什麼也不做。現在我的問題是我檢查數字是否是偶數,然後將其打印在我的代碼中?以及我打印出所有偶數的總和?我對這個彙編語言的東西很陌生,幫助將不勝感激。

+1

'BNE ODDCHECK' /'BEQ LOOP' < - 其中一個跳躍將被採取。另外,你有一些奇怪的東西,比如'CMP R4,R5',你A)沒有初始化'R5',B)沒有使用'CMP'設置的標誌來做任何事情。 – Michael

回答

4

社區可以回答您的具體問題,但更好的解決方案是幫助您開發一些調試技巧。當某些事情不起作用時,您需要深入研究並找出故障所在。由於您剛接觸ARM程序集,因此請一次嘗試小塊,然後將它們放在一起形成完整的程序。

你能寫一個打印數字的程序嗎?

你可以編寫一個打印一系列數字的循環(比如循環計數器)嗎?

你能寫一個打印fibonnaci序列的循環嗎?

你可以寫一個循環打印甚至斐波納契數字嗎?

讓我們知道您在哪個步驟失敗,爲什麼。