X86汇编——计算斐波那契数列程序(详细注释和流程图说明)
#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汇编——计算斐波那契数列程序(详细注释和流程图说明)相关推荐
- 用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...
- 用递归方法计算斐波那契数列(Recursion Fibonacci Sequence Python)
先科普一下什么叫斐波那契数列,以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci ...
- 使用循环计算斐波那契数列
1 /* 2 * 使用循环计算斐波那契数列的前 20 项,已经前 20 项的和. 3 提示:斐波那契数列:1,1,2,3,5,8,13,21- 4 从第三项开始,每一项为前面两项的和 5 6 */ 7 ...
- python利用列表计算斐波那契数列前30项_python斐波那契数列的计算方法
题目: 计算斐波那契数列.具体什么是斐波那契数列,那就是0,1,1,2,3,5,8,13,21,34,55,89,144,233. 要求: 时间复杂度尽可能少 分析: 给出了三种方法: 方法1:递归的 ...
- C语言 计算斐波那契数列
C语言 计算斐波那契数列 前言 在学习C语言的道路上多次遇到了求斐波那契数列的问题,今天来总结一下我所知道的几种思想方法. 方法一:循环 使用斐波那契数列的推导式,通过循环将每一个值保存到数组fib中 ...
- python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...
斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...
- 计算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 ...
- 使用并行的方法计算斐波那契数列 (Fibonacci)
更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...
- html计算斐波那契数列,使用HTML5 Web Worker计算斐波那契数列
未使用Web Worker计算斐波那契数列 计算较小数时,浏览器还可以快速响应: 计算大数时,浏览器的UI已经不可以操作了: 刷新一下页面,发现浏览器仍然处于卡死状态: 使用Web Worker计算斐 ...
最新文章
- SP-45ML光电二极管放大电路及其动态特性
- Kali Linux缺少ifconfig命令
- Windows server 1709(不含UI)模板部署
- 如何设置Matlab输出到Word中图片的大小
- ios 动态化视图_如何在iOS应用中使高度收集视图动态化
- 用js实现千位分隔符
- 现在补上个人项目的分析照片
- php 判断下载状态,php下载文件显示进度(适用于CLI模式或长连接)
- squid不能启动问题及解决方法
- c 调用openoffice word转pdf_Word 批量转 PDF
- 【tool】番茄时间管理法
- android格式化外置u盘,Android5.x+ 格式化外部存储(u盘, sdcard)的方法
- 消费无人机难有新突破,行业无人机成极飞科技唯一突破口?
- [PHP]PHP爬虫 - URP教务
- 一位工作七年的Java工程师给毕业生的经验分享
- linux win95模拟,Windows 95模拟器
- Spring-day01
- 学员答疑 | 投影后计算面积仍然是0?
- 浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析
- 移动电影院上线,手机也能随处看3D大片
热门文章
- 抓log的各种方法和命令
- 36条人情世故 +8式大学法则+10招助=成功推进器-助你三十而立
- html5旋转相册源码,css实现旋转相册代码
- WOC!原来 Linux 终端下居然还有进程记帐功能?!
- 专访曾宪杰:大型网站系统与Java中间件实践
- 03机器学习--梯度下降及python实现
- java进阶书籍推荐(不包括基础)
- 战歌竞技场服务器维护进不去,《战歌》竞技场闪退怎么解决 竞技场闪退解决方法介绍...
- smartbi问题_Smartbi带你全面解读人工智能与商业智能
- [存储器] 简述影响 Cache 命中率的因素