1
我正在關注MIPS ASM的初學者指南。(ASM)使用更少寄存器的Fibonacci函數?
的問題是:
編寫程序作爲一個計數循環時斐波納契數列的第一 100而言已經計算終止。 使用當前期限的寄存器 以及上一期的註冊表。每個執行循環計算一個新的當前項,然後將舊的當前項複製到前一個項寄存器。
似乎解決方案應該只使用2個寄存器;以前和當前值。另外還有2個計數器和'101'(書中說在註冊表中使用101代表beq指令)
是否有可能從我的解決方案中刪除「總和」寄存器? 我是一個初學者程序員,這是我的想法。
這是錯誤的,因爲它不是計算機1,1,3,5,8 ... 相反,它計算1,3,5,8。按照本書的方法,我不知道如何計算'1'兩次。
我的解決方案,基於這樣一個問題:
## fibonacci series ##
# $7=sum $8=prev $9=current $10=counter $11=101 #
.text
main:
ori $7,$0,0 # init sum 0
ori $8,$0,0 # init prev 0
ori $9,$0,1 # init current 1
ori $10,$0,0 # init counter 0
ori $11,$0,101 # init 101
loop:
beq $10,$11,exit
addu $7,$8,$9 # sum = prev+current
or $8,$0,$9 # copy old current to prev
or $9,$0,$7 # copy sum to new current
addiu $10,$10,1 # counter+1
j loop # go to loop
sll $0,$0,0
exit:
j exit
sll $0,$0,0 # exit
邁克爾已經給出很好的答案,只是想指出的是,你只需要一個寄存器該計數器也是,如果你從100開始,每個循環遞減一次並使用bltz,那麼你總共只有3個寄存器。 – 2013-03-12 18:30:31