.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. 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】

    Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...

  2. linux安装git服务器和svn服务器

    linux版本 linux版本为CentOS 6.8 (要注意有些软件的安装方法在各个linux版本之间也是存在差异的) git服务器 git服务器需要提供一个UI供开发人员创建项目管理项目,选择使用 ...

  3. python基础之内置函数和匿名函数

      内置函数 学习函数以后多了很多概念,例如函数的命名空间,函数的作用域,函数的调用等等,函数的作用就是为了实现某些功能而方便以后可以调用,内置函数就是这样的一些公共的函数,被称为内置函数. 我们就一 ...

  4. mysql转换表的存储引擎方法

    如果转换表的存储引擎,将会丢失原存储引擎的所有特性. 例如:如果将innodb转换成myisam,再转回innodb,原innodb表的的外键将丢失. 假设默认存储引擎是MyISAM转为InnoDB ...

  5. js创建jsonArray传输至后台及后台解析

    //产品清单 //产品数量长度 var cnbvLength = FieldCount9 + 1; var arrayList=[]; for(var i = 0; i < cnbvLength ...

  6. js小数和百分数的转换

    一.百分数转化为小数 function toPoint(percent){ var str=percent.replace("%",""); str= str/ ...

  7. Windows2003服务器IIS启用Gzip压缩的设置

    http://jingyan.baidu.com/article/148a192178ec834d71c3b12b.html     步骤 1 2 3 本文介绍的HTTP压缩方式,采用的是Window ...

  8. 11 Mysql之配置双主热备+keeepalived.md

    准备 1. 双主 master1 192.168.199.49 master2 192.168.199.50 VIP 192.168.199.52 //虚拟IP 2.环境 master:nginx + ...

  9. 解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题

    问题截图: 解决方案: 1.打开File --> Setting 窗口 2.搜索 Webpack 3.选择如下路径 问题解决

  10. TypeScript如何添加自定义d.ts文件(转)

    方法一:https://dingyuliang.me/angular-6-typescript-2-9-typings-d-ts-cant-find-names/ 方法二:https://www.be ...