1

MIPS ASM の初心者向けガイドに従っています。

質問は:

フィボナッチ数列の最初の 100 項が計算されたときに終了するカウント ループとしてプログラムを作成します。 今期用レジスターと前期用レジスターを使用します。ループを実行するたびに、新しい現在の用語が計算され、古い現在の用語が前の用語レジスタにコピーされます。

ソリューションでは 2 つのレジスタのみを使用する必要があるようです。以前の値と現在の値。そして、カウンターと '101' 用に別の 2 (この本では、beq 命令のレジスターで 101 を使用すると書かれています)

ソリューションから「合計」レジスタを削除することはできますか? 私は初心者のプログラマーで、これは私の心を吹き飛ばしています。

1,1,3,5,8 を計算しないので間違っています...代わりに 1,3,5,8 を計算します。本の方法に従って '1' を 2 回計算する方法がわかりません。

質問に基づく私の解決策:

## 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
4

1 に答える 1

1

はい、可能です:

addu $9,$9,$8    # current += prev
sub  $8,$9,$8    # prev = current - prev  (== old current)
于 2013-03-12T18:19:52.213 に答える