.model small
;递归fib,使用压缩BCD码,小端派
.data y1 byte 6 dup(0)
y2 byte 6 dup(0)
vis byte 1,1,1,61 dup(0) ;便于调试
num byte 6 dup(0),1,5 dup(0),1, 5 dup(0), 300 dup(0) ;di .stack 4096 .code
main proc far
start:
mov ax,@data
mov ds,ax mov ax,50
call fib mov bx,offset y1
add bx,5
mov cx,6
output:
mov dl,[bx]
mov dh,dl
push cx
mov cl,4
shr dl,cl;取出高四位
pop cx
or dl,30h
mov ah,2h
int 21h
mov dl,dh
and dl,0Fh;取出低四位
or dl,30h
mov ah,2h
int 21h
dec bx
loop output mov ax,4c00h
int 21h
main endp fib proc near ;从ax传参,保证ah为0,然后将计算得到的fib(al)写入表中,再写入y1,返回
push ax ;先备份一下
mov bx,offset vis
xlat
and al,al
jnz returnresult ;查表有结果,直接返回结果 pop ax ;vis数组置位
push ax
mov si,ax
mov [bx+si],1 pop ax
push ax
sub ax,2
call fib ;求fib(n-2)
mov bx,offset y1 ;将fib(n-2)从y1转存到栈 pop ax
push ax
push [bx]
push [bx+2]
push [bx+4] dec ax
call fib
mov bx,offset y1 ;把y1 fib(n-1)的值加到y2上
mov bp,offset y2
pop ds:[bp+4]
pop ds:[bp+2]
pop ds:[bp]
pop ax
push ax mov cx,6
and ax,ax;清空进位标识cf
bcdadd:
mov al,[bx]
adc al,ds:[bp]
daa
mov ds:[bp],al
inc bx
inc bp
loop bcdadd
;最高位应该没有进位了 pop ax ;恢复参数
mov bl,6
mul bl
mov bx,offset num ;bx指向表
add bx,ax
mov bp,offset y2 ;bp指向算出来的y2
mov di,offset y1
mov si,0
mov cx,3
writenum:
mov ax,ds:[bp+si] ;bp默认ss
mov [bx+si],ax ;y2->num
push bx
mov bx,di
mov [bx+si],ax ;y2->y1
pop bx
add si,2
loop writenum
ret returnresult: ;将表中的答案弄到y1
pop ax
mov bl,6
mul bl
mov bx,offset num
mov bp,offset y1
add bx,ax
mov ax,[bx+4]
mov ds:[bp+4],ax
mov ax,[bx+2]
mov ds:[bp+2],ax
mov ax,[bx]
mov ds:[bp],ax
ret
fib endp end start

16位masm汇编实现记忆化递归搜索斐波那契数列第50项的更多相关文章

  1. php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...

  2. 【递归】斐波那契数列第n个数

    递归.递推计算斐波那契数列第n项的值: #include <stdio.h> long long fact(int n); //[递推]计算波那契数列第n个数 long long fact ...

  3. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...

  4. Python递归及斐波那契数列

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...

  5. python递归与非递归实现斐波那契数列

    1.题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). 递归实现: class Solution(): def Fibnacci(self ...

  6. C++用递归实现斐波那契数列

    [题目描述] 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和. 给出一个正整数a,要求菲波那契数列中第a个数是多少. [输入] 第1行是测试数据的组数n, ...

  7. C#求斐波那契数列第30项的值(递归和非递归)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式

    题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...

  9. X86汇编——计算斐波那契数列程序(详细注释和流程图说明)

    X86汇编实现斐波那契数列 程序说明: 输入斐波那契数列的项数, 然后依次输出斐波那契数列, 输入的项数小于256且为数字, 计算的项数不能超过2^16次方, 输入失败是 不会回显数字 因为存结果是A ...

随机推荐

  1. Spring MVC的异步模式(ResponseBodyEmitter、SseEmitter、StreamingResponseBody) 高级使用篇

    DeferredResult高级使用 上篇博文介绍的它的基本使用,那么本文主要结合一些特殊的使用场景,来介绍下它的高级使用,让能更深刻的理解DeferredResult的强大之处. 它的优点也是非常明 ...

  2. 云数据库 Redis 版

    首先观看视频简介 云数据库 Redis 版是一项易于部署和管理的按需数据库服务,与 Redis 协议兼容.云数据库 Redis 版通过从内存缓存中检索数据而提供高速数据读写功能,并通过同时使用内存和硬 ...

  3. 云数据库RDS MySQL 版

    阿里云关系型数据库(Relational Database Service,简称RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于阿里云分布式文件系统和SSD盘高性能存储,RDS支持MySQL. ...

  4. 常用的 Git 命令,给你准备好了!

    分支操作: git branch 创建分支 git branch -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列表 git branch -v 查 ...

  5. CentOS 7 配置 kcptun 实现网站加速

    目的:shadowsocks+kcptun 实现vpn加速(shadowsocks,kcptun在同一台VPS上) 一.shadowsocks安装(参考  https://www.cnblogs.co ...

  6. 04: redis集群

    1.1 主从同步 1.CPA原理 1. CPA原理是分布式存储理论的基石: C(一致性):   A(可用性):  P(分区容忍性); 2. 当主从网络无法连通时,修改操作无法同步到节点,所以“一致性” ...

  7. 什么是DDoS攻击?

    本文转载自知道创宇云安全的知乎回答:DDoS 的肉鸡都是哪来的? 说到DDoS攻击,我们就不得不说“肉鸡”. “肉鸡”可谓是DDoS攻击的核心大杀器,作为一个要发起DDoS攻击的黑客来说,没有肉鸡就是 ...

  8. 21、Nginx 常见问题

    1.多个server_name容易产生冲突,会按照如下顺序匹配 1.首先选择所有的字符串完全匹配的server_name.(完全匹配) 2.选择通配符在前面的server_name,如*.bgx.co ...

  9. 第十篇.4、python并发编程之多线程

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.python ...

  10. asyncio动态添加任务

    asyncio.run_forever()下动态添加任务 方法一.asyncio.run_coroutine_threadsafe(coroutine, loop) 方法二.asyncio.call_ ...