asm 算出128位 斐波那契数列

      斐波那契数列(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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值