Assembly X86斐波那契程序
我的任务是写一个程序来计算斐波那契数列的前七个值。给出的公式为:Assembly X86斐波那契程序,assembly,x86,masm,Assembly,X86,Masm,我的任务是写一个程序来计算斐波那契数列的前七个值。给出的公式为: Fib(1) = 1, Fib(2) = 1, Fib(n) = Fib(n-1) + Fib(n-2) 我相信这是一个函数,但我不知道如何将它合并到代码中。我需要将这些值放在EAX寄存器中。我用的是MASM,这没什么区别。有什么提示吗?我怀疑这是一项学术作业,所以我只想部分回答这个问题 斐波那契序列正式定义为非负整数,如下所示: F(n) = n | n < 2 = F(n
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
您只需使用几个寄存器即可完成此操作,让我们来确定它们:
- Rn(请求的斐波那契数)
- Rf1(用于计算斐波那契数)
- Rf2(也用于计算斐波那契数)
- Rx(保存返回值的寄存器。可与任何其他寄存器重叠)
我们的表格显示F(5)=5,这是正确的。这可能是一个家庭作业,所以我会这样对待它。从1开始的第7个斐波那契数是13,所以只要
mov eax,13
就完成了。或者你没有给出完整的要求。我写了一篇文章,包括一个由两个版本展开的版本,处理奇偶输入的开销最小,以及一个使用SSE向量的版本,这样它可以在32位CPU上进行64位数学运算。请参阅该问题的另一个答案,了解一些有趣的斐波那契数学(例如,在O(log(N))时间内计算Fib(N)的函数)。谢谢,有用,但仍不符合我的水平。也许你可以用外行的话修改一下公式?
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
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