我正在关注 MIPS ASM 的初学者指南。
问题是:
将程序编写为一个计数循环,当斐波那契数列的前 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