asm 算出128位 斐波那契数列

举报
福州司马懿 发表于 2021/11/19 06:08:50 2021/11/19
【摘要】       斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibon...

      斐波那契数列(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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117

文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chy555chy/article/details/52137107

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。