#X86汇编实现斐波那契数列

##程序说明:
输入斐波那契数列的项数, 然后依次输出斐波那契数列, 输入的项数小于256且为数字, 计算的项数不能超过2^16次方, 输入失败是 不会回显数字

因为存结果是AX, 只有16位, 最大为2^16 = 65536,所以程序设置当输入过大时, 只会显示项数小于 65536前的项数

下面是程序的流程图
程序包括3个模块, 分别是主模块, INPUT模块(读取键盘中输入的合法数字), OUTPUT模块(输出数字)

主模块

INPUT模块

OUTPUT模块

代码及其详细注释


ASSUME CS:CODE,DS:DATA
DATA SEGMENTMSG1 DB 13,10,'Please input the num of Fibonacci,no lager than 256 , N =  $'MSG2 DB 13,10,'Fibonacci Sequence is: $'    ;提示信息N DW 0  F1  DW 0  F2  DW 1  ;计算数列的两个加数
DATA ENDS
;
CODE SEGMENT
START:MOV AX,DATAMOV DS,AX  ;导入数据
;LEA DX,MSG1MOV AH,9INT 21H    ;打印提示信息1CALL INPUT ;调用INPUT模块, 得到项数 存到 CX中CMP CX,1    ;如果CX < 1 输入不合法JB EXIT     ;直接退出   MOV N,CX     ;令N = CX  即 N为数列项数LEA DX,MSG2    ;打印输出信息 ‘Fibonacci Sequence is:’MOV AH,9     ;调用的是9号方法 .09H号调用,字符串输出显示INT 21H;先处理第一个项 MOV DL,'1'  ; 先把 1 放到输出区MOV AH,2INT 21HMOV DL,' 'INT 21H     ; 输出 1 和 空格DEC N       ; N --; JZ EXIT     ; 当 N = 0时,退出LOOP:MOV AX,F1   ; 把 AX = F1ADD AX,F2   ; AX =+ F2JC EXIT     ; AX发生进位 即 AX不能表示数字MOV BX,F2  MOV F1,BX   ;不能 直接MOV F1,F2 不支持这样做MOV F2,AX   ; 把 F2 赋值给 F1 , AX (计算出来的一项) 赋值给 F2 CALL OUTPUT ; 调用输出模块 输出计算的项MOV DL,' '  MOV AH,2INT 21H     ;输出空格DEC N       ; N--JNZ LOOP    ;跳转到循环LOOP JNZ是由标志位ZF  而ZF是算术运算可以改变的,;这里可能使ZF发生改变的是上一个指令    DEC N  , 当N != 0 条件成立
EXIT:MOV AH,4CHINT 21H    ;退出程序
;
INPUT:MOV BL,10 ;  BL 为 10MOV CX,0  ;  CX 为 0IN_X:       ;输入数字  MOV AH,7INT 21H     ;读取数据 CMP AL,13 ; 读取的字符是 回车 JE IN_END ; 跳转到输入结束模块  CMP AL,'0' ; 输入不合法 就继续输入JB IN_XCMP AL,'9' ; 输入不合法 就继续输入JA IN_X  MOV DL,AL  ;把合法数字 存入到DL  MOV AH,2    ; 调用2号功能 输出刚才输入的字符INT 21HMOV AL,DL   SUB AL,30H  ; 把assic码变成数字MOV AH,0    ; AH 为 0                       XCHG AX,CX  ; 把cx变成刚输入的数字MUL BL      ; AX = AL * BL(10) 也就是乘以相应的权 百位数乘100  十位数乘10 ADD CX,AX   ; CX += AX;   cx表示的就是真正输入的斐波那契项数;这里设置项数的最大值, 项数最大为256 如果输入大于256 就直接结束CMP CH,0    ;判断CX的前8位是不是为0, 如果不为0, 说明大于256 JNZ IN_END  ;大于256 直接结束输入JMP IN_X    ;否则继续输入IN_END:RET   ;结束调用
;
OUTPUT:MOV BX,10  ;BX 初始化为 10MOV CX,0   ;CX 初始为 0
;会接着运行下面的代码
; 下面的代码用于把数字转换成字符串
;方法是每次把数除10 得到余数 压入栈中在,直到被除数为0, 然后依次输出栈顶字符       LOOP1:MOV DX,0  ;  DX = 0DIV BX       ; AX为被除数 AX =  AX / 10;  余数放在DX里 ,这就是最低位的数字ADD DL,'0'   ; 把DL 加上 '0'  此时 DL是能直接输出的字符数字PUSH DX      ; 把DX 压入栈INC CX       ; CX ++CMP AX,0     JNZ LOOP1      ; 如果AX 不为 0, 就继续LOOP1MOV AH,2
LOOP2:POP DX    ;循环输出栈的字符INT 21HLOOP LOOP2RET          ;结束调用
;
CODE ENDSEND START

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

  1. 用递归法计算斐波那契数列的第n项

     斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...

  2. 用递归方法计算斐波那契数列(Recursion Fibonacci Sequence Python)

    先科普一下什么叫斐波那契数列,以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci ...

  3. 使用循环计算斐波那契数列

    1 /* 2 * 使用循环计算斐波那契数列的前 20 项,已经前 20 项的和. 3 提示:斐波那契数列:1,1,2,3,5,8,13,21- 4 从第三项开始,每一项为前面两项的和 5 6 */ 7 ...

  4. python利用列表计算斐波那契数列前30项_python斐波那契数列的计算方法

    题目: 计算斐波那契数列.具体什么是斐波那契数列,那就是0,1,1,2,3,5,8,13,21,34,55,89,144,233. 要求: 时间复杂度尽可能少 分析: 给出了三种方法: 方法1:递归的 ...

  5. C语言 计算斐波那契数列

    C语言 计算斐波那契数列 前言 在学习C语言的道路上多次遇到了求斐波那契数列的问题,今天来总结一下我所知道的几种思想方法. 方法一:循环 使用斐波那契数列的推导式,通过循环将每一个值保存到数组fib中 ...

  6. python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...

    斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...

  7. 计算x的n次幂,n的阶乘,计算斐波那契数列的第n位

    计算x的n次幂 function two(n,x){var nul=1;for(var i=1;i<=n;i++){nul*=x;console.log(nul)} } 计算n的阶乘 funct ...

  8. 使用并行的方法计算斐波那契数列 (Fibonacci)

    更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...

  9. html计算斐波那契数列,使用HTML5 Web Worker计算斐波那契数列

    未使用Web Worker计算斐波那契数列 计算较小数时,浏览器还可以快速响应: 计算大数时,浏览器的UI已经不可以操作了: 刷新一下页面,发现浏览器仍然处于卡死状态: 使用Web Worker计算斐 ...

最新文章

  1. SP-45ML光电二极管放大电路及其动态特性
  2. Kali Linux缺少ifconfig命令
  3. Windows server 1709(不含UI)模板部署
  4. 如何设置Matlab输出到Word中图片的大小
  5. ios 动态化视图_如何在iOS应用中使高度收集视图动态化
  6. 用js实现千位分隔符
  7. 现在补上个人项目的分析照片
  8. php 判断下载状态,php下载文件显示进度(适用于CLI模式或长连接)
  9. squid不能启动问题及解决方法
  10. c 调用openoffice word转pdf_Word 批量转 PDF
  11. 【tool】番茄时间管理法
  12. android格式化外置u盘,Android5.x+ 格式化外部存储(u盘, sdcard)的方法
  13. 消费无人机难有新突破,行业无人机成极飞科技唯一突破口?
  14. [PHP]PHP爬虫 - URP教务
  15. 一位工作七年的Java工程师给毕业生的经验分享
  16. linux win95模拟,Windows 95模拟器
  17. Spring-day01
  18. 学员答疑 | 投影后计算面积仍然是0?
  19. 浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析
  20. 移动电影院上线,手机也能随处看3D大片

热门文章

  1. 抓log的各种方法和命令
  2. 36条人情世故 +8式大学法则+10招助=成功推进器-助你三十而立
  3. html5旋转相册源码,css实现旋转相册代码
  4. WOC!原来 Linux 终端下居然还有进程记帐功能?!
  5. 专访曾宪杰:大型网站系统与Java中间件实践
  6. 03机器学习--梯度下降及python实现
  7. java进阶书籍推荐(不包括基础)
  8. 战歌竞技场服务器维护进不去,《战歌》竞技场闪退怎么解决 竞技场闪退解决方法介绍...
  9. smartbi问题_Smartbi带你全面解读人工智能与商业智能
  10. [存储器] 简述影响 Cache 命中率的因素