您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 递归方法求斐波那契函数FIB(N)
《微机原理实践》课程设计报告题目:递归方法求斐波那契函数FIB(N)专业:计算机系班级:学号:姓名:指导教师:胡美娇完成日期:2013年1月1日一、课程设计目的1、加深对汇编语言理论和基本知识的理解,掌握DOS和BIOS系统功能调用,掌握运用汇编语言设计具有一定功能的软件的基本方法.2、通过编写一定规模和难度的程序,进行一次较全面的汇编编程训练,提高分析问题和解决问题的能力3、提高调试程序的能力二、课程设计内容递归方法求斐波那契函数FIB(N)要求:从键盘输入数N,当N=0,1时,FIB=1;当N=2时,FIB=FIB(N-1)+FIB(N-2),结果用十进制输出。要求:具有友好的交互界面,建立主菜单界面:'********************DisplayProgram********************inputnumbern:theFIBN=三、课程设计过程1、算法设计(画出算法流程图)结束显示所求结果显示FIB(N)=CALLFIB(N)mainSi=0在屏幕上显示信息键盘输入数2、程序代码清单DATASEGMENTNUMDW?GRADEDW2(?)MESS1DB,0AH,0DH,,0AH,0DH,'***DisplayProgram***'MESS2DB,0AH,0DH,'INPUTNUMBERN:$',0AH,0DH,MESS3DB0AH,0DH,'FIB(N)=$'MESS4DB'INPUTERROR!$'MESS5DB,0AH,0DH,'INPUTNUMBERN:'DB0AH,0DH,'N=$'DATAENDSPROGNAMSEGMENTMAINPROCFAR;主程序入口ASSUMECS:PROGNAM,DS:DATASTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXLEADX,MESS1FIBNNum是0还是1Num减到1调用Call把FIB[si]和FIB[si-2]赋给FIB[si],FIB[si]赋给FIB[si-2],即根据后两个数求前一个数1赋给FIB[si]和FIB[si-2]返回MOVAH,09INT21HL1:LEADX,MESS5MOVAH,09INT21HMOVBX,0;显示欢迎主界面NEWCHAR:MOVAH,01H;键盘输入,每个数据以回车结束INT21HCMPAL,13JELEE01SUBAL,30H;转移JLERRORCMPAL,9D;AL中的数与取来的数据比较JGERRORCBWXCHGAX,BX;交换指令MOVCX,10DMULCXXCHGAX,BXADDBX,AXJMPNEWCHAR;无条件跳转ERROR:LEADX,MESS4MOVAH,09INT21H;中断JMPL1RETLEE01:MOVNUM,BXMOVSI,0MOVAX,0CALLFIB(N);段内直接过程调用LEADX,MESS3MOVAH,09INT21HPUSHBX;将相关信息压入栈里PUSHCXPUSHSIPUSHDIMOVBX,GRADE[SI]MOVCX,10000DCALLDEC_DIVMOVCX,1000DCALLDEC_DIVMOVCX,100DCALLDEC_DIVMOVCX,10DCALLDEC_DIVMOVCX,1DCALLDEC_DIVPOPDIPOPSIPOPCX;将相关信息弹出栈内POPBXJMPL1RETMAINENDPDEC_DIVPROCNEARMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,AL;结果要放在dl中ADDDL,30HMOVAH,02HINT21HRETDEC_DIVENDPFIB(N)PROCNEARCMPNUM,0;num为0转到L2JELEE02CMPNUM,1;num自减1JELEE02DECNUMCALLFIB(N)MOVAX,GRADE[SI]MOVBX,GRADE[SI-2]MOVGRADE[SI-2],AXADDAX,BX;进行加法运算MOVGRADE[SI],AXJMPLEE03LEE02:MOVGRADE[SI],1ADDSI,2MOVGRADE[SI],1LEE03:RETFIB(N)ENDPPROGNAMENDSENDSTART3、调试过程(包括实验过程中实验步骤,出现的问题,解决的方法,使用的实验数据等)步骤:首先是先对递归函数的了解,然后分成三种情况,一种是输入的是0和1的情况,一种是输入的是其他数字,最后一种是输入的不是数字,最后对各种情况进行设计。出现的问题:刚开始只能输入单个字符,一输入一个数字就开始进行判断解决的方法:后面采用了用回车键来判断一段数据输入完毕使用的实验数据:本函数所使用的数据都为数字4、系统运行结果截图欢迎主界面运行及结果5、结果分析用一组数据来检测程序是否正确NUM=0时输出FIB(N)=1NUM=1时输出FIB(N)=1NUM=30时输出FIB(N)=35549NUM=A时输出INPUTERROR!NUM=$时输出INPUTERROR!经过计算以上结果都是正确的,所以程序是正确的四、课程设计体会通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
本文标题:递归方法求斐波那契函数FIB(N)
链接地址:https://www.777doc.com/doc-5374303 .html