.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. oracle数据库表恢复到特定时间点

    某一张表被应用软件里误操作把数据都清空了,现在想恢复到清空之间,比如2013年8月13日14点以前,应该怎样操作? 通过这个问题可以引发一系列的知识点串联. 1.如果开启闪回可以使用闪回表. 怎样查看 ...

  2. FFmpeg4.0笔记:封装ffmpeg的解码功能类CDecode

    Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff CDecode.h /********************** ...

  3. IOS订阅优惠-PHP生成ECDSA算法签名

    <?php use Ramsey\Uuid\Uuid; class ItunesSignatureGenerator { private $appBundleID = 'www.u17.com' ...

  4. javaagent项目中使用

    相关代码参考:http://blog.csdn.net/catoop/article/details/51034778 近期项目中需要对SpringMVC中的Controller方法进行拦截做预处理, ...

  5. pytorch中torch.narrow()函数

    torch.narrow(input, dim, start, length) → Tensor Returns a new tensor that is a narrowed version of  ...

  6. MySQL主从延时这么长,要怎么优化?

    MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么主从延时这么大? 答:MySQL使用单线程重放RelayL ...

  7. 小程序之textarea层级最高问题

    1.textarea位于底部固定定位按钮下方,会导致点击底部按钮,textarea获取到焦点. 解决方法如下 view与textarea之间在聚焦和失去焦点进行切换 cursor-spacing是te ...

  8. 第十六篇 JS实现全选操作

    JS实现全选   嗨,同学们好,老师这里是专门教同学解决一些针对性的问题,所以说综合起来,就要靠同学自己了. 这节课我们学一个很实用的东西,全选操作!比如淘宝这种商城对吧,我的购物车,我要全选购买,或 ...

  9. TensorFlow入门——安装

    由于实验室新配了电脑,旧的电脑就淘汰下来不用,闲来无事,就讲旧的电脑作为个人的工作站来使用. 由于在旧电脑上安装的是Ubuntu 16.04 64bit系统,系统自带的是Python 2.7,版本选择 ...

  10. Swift(一)语言介绍

    Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题. Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其中 ...