私の課題は、フィボナッチ数列の最初の 7 つの値を計算するプログラムを作成することです。与えられた式は次のとおりです。
Fib(1) = 1, Fib(2) = 1, Fib(n) = Fib(n-1) + Fib(n-2)
それは機能だと思いますが、コードに組み込む方法がわかりません。値を EAX レジスターに配置する必要があります。私はMASMを使用していますが、違いはありません。ヒントはありますか?
これは学術的な課題だと思うので、質問に部分的に答えるだけにします。
フィボナッチ数列は、非負の整数に対して次のように正式に定義されています。
F(n) = n | n < 2
= F(n - 1) + F(n - 2) | n >= 2
これは与える:
n | F(n)
0 | 0
1 | 1
2 | 1
3 | 2
4 | 3
5 | 5
6 | 8
7 | 13
etc etc...
いくつかのレジスタでそれを行うことができます。それらを識別しましょう。
R nは、関数の引数として渡されます。R f1は0から始まり、Rf2は1から始まります。
答えを得るために私たちが行うことは次のとおりです。ルーチンごとに分割します。
始める
ループ
終了
FinishEven
R n = 5のトレーススルー:
この表は、F(5)= 5であることを示しているので、これは正しいです。
TITLE Chapter 4 Exercise 6 (ch04_06.asm)
Comment !
Description: Write a program that uses a loop to calculate the first
seven values in the Fibonacci number sequence { 1,1,2,3,5,8,13 }.
Place each value in the EAX register and display it with a
call DumpRegs statement inside the loop.
Last update: 05/02/2002
!
INCLUDE Irvine32.inc
.code
main PROC
mov eax,1
call DumpRegs
mov ebx,0 ; initial setup
mov edx,1
mov ecx,6 ; count
L1:
mov eax,ebx ; eax = ebx + edx
add eax,edx
call DumpRegs ; display eax
mov ebx,edx
mov edx,eax
Loop L1
exit
main ENDP
END main