我的任务是编写一个程序来计算斐波那契数列的前七个值。给出的公式是:
Fib(1) = 1, Fib(2) = 1, Fib(n) = Fib(n-1) + Fib(n-2)
我认为这是一个功能,但我不明白如何将其合并到代码中。我需要将值放在EAX寄存器中。我使用MASM并没有任何区别。任何提示?
答案 0 :(得分:6)
我怀疑这是一项学术任务,所以我只会部分回答这个问题。
斐波那契序列正式定义为非负整数,如下所示:
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开始,R f2 应从1开始。
以下是我们为解决问题而采取的措施:
<强>开始强>
<强>循环强>
完成强>
<强> FinishEven 强>
追踪R n = 5:
我们的表显示F(5)= 5,所以这是正确的。
答案 1 :(得分:1)
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