斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
第一项固定是0,第二项固定是1。数列从第3项开始,每一项都等于前两项之和。
刚刚整理电脑的时候发现一份大学时期写的《用汇编计算128位斐波那契数列》,特此分享给大家。
TITLE Fibonacci Sequence
include irvine32.inc
.data
xh qword 0
xl qword 1
yh qword 0
yl qword 1
zh qword 0
zl qword 0
over1 byte 0
strTitle byte 'TITLE:128位2进制数计算"斐波那契数列"',0
str1 byte "("
str2 byte ")"
str3 byte "斐波那契元素个数为:",0
.code
displayHex proc
mov eax,dword ptr xh+4
call writehex
mov eax,dword ptr xh
call writehex
mov eax,dword ptr xl+4
call writehex
mov eax,dword ptr xl
call writehex
mov ebx,dword ptr xl+4
cmp ebx,0
jnz NEXT_1
mov al,str1
call writechar
mov eax,dword ptr xl
call writedec
mov al,str2
call writechar
NEXT_1:
call crlf
ret
displayHex endp
plus2 proc
mov eax,dword ptr xh
mov edx,dword ptr xh+4
mov dword ptr zh,eax
mov dword ptr zh+4,edx
mov eax,dword ptr xl
mov edx,dword ptr xl+4
mov dword ptr zl,eax
mov dword ptr zl+4,edx
mov eax,dword ptr yh
mov edx,dword ptr yh+4
mov dword ptr xh,eax
mov dword ptr xh+4,edx
mov eax,dword ptr yl
mov edx,dword ptr yl+4
mov dword ptr xl,eax
mov dword ptr xl+4,edx
;Y=X+Y即现在的 Y=Y+Z
mov eax,dword ptr zl
mov edx,dword ptr zl+4
add dword ptr yl,eax
;jnc为进位标志CF=0;jc为进位标志CF=1
;adc为 result=val1+val2+CF
adc dword ptr yl+4,edx
mov eax,dword ptr zh
mov edx,dword ptr zh+4
adc dword ptr yh,eax
adc dword ptr yh+4,edx
jnc NEXT_2
mov al,1
mov over1,al
NEXT_2:
ret
plus2 endp
;============
main proc ;主函数
mov ecx,400
mov edx,offset strTitle
call writestring
call crlf
BEGIN:
;输出xh和xl中的数
call displayHex
;确认最高位是否溢出
mov al,over1
cmp al,0
jnz NEXT_end0
call plus2
Loop BEGIN
;结束
NEXT_end0:
;统计输出总个数
mov al,str1
call writechar
mov edx,offset str3
call writestring
dec ecx
mov eax,400
sub eax,ecx
call writedec
mov al,str2
call writechar
call crlf
;停止等待
call readchar
exit
main endp
end main