您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 汇编递归求解Fibonacci数-何荣贤
第1页共7页集美大学计算机工程学院实验报告课程名称汇编语言程序设计实验名称实验五子程序设计二(fibonacci数)实验类型设计型姓名何荣贤学号2010810071日期2012/5/18地点陆大208成绩教师吕俊音评语:集美大学计算机工程学院汇编语言程序设计实验报告第2页共7页1.实验目的及内容一、实验目的进一步掌握子程序的设计方法,熟悉递归程序的设计二、实验要求掌握递归程序的调用、返回及入口、出口参数的传递方法。三、实验内容程序接收由用户键入的数N,根据给定的N值,计算Fibonacci数。Fibonacci数的定义如下:FIB(1)=1FIB(2)=1FIB(N)=FIB(N-2)+FIB(N-1)N=32.实验环境MasmForWindows2011编写编译程序3.实验方法程序接收用户输入的1小于等于50的十进制正整数,存入输入缓冲区后再把它转化为十六进制数,存入内存单元N中。调用FIB函数求Fibonacci数,结果高位存在RESULT2H,低位存在RESULT2L,最后调用OUTPUT函数将结果以十进制的形式显示出来。程序亮点在于将结果转换为十进制时采用了除10取余的方法,对于高位通过在适当的位数加65536(ADD65536)的方式巧妙地将乘法转化为加法。4.实验步骤1.显示提示,并接受一个数字N;2.调用fib递归得到结果存入内存;3.调用显示10进制函数OUTPUT。5.实验结论输入数据36(十进制)输出数据14930352(10进制)正确。集美大学计算机工程学院汇编语言程序设计实验报告第3页共7页6.实验分析本实验使我进一步掌握子程序的设计方法,熟悉递归程序的设计,丰富了我写汇编程序的经验。附件1.程序流程图实验5:2.汇编语言源程序实验5:DATASSEGMENTSTR1DB'Pleaseinputanumber(1-50):N=','$'STR2DB13,10,'FIB(N)=','$'WRONGSTRDB13,10,13,10,'Anumberbetween1and50please!',13,10,13,10,'$'INPUTBUFFERDB3,?,3DUP(?)NDW?;输入N值RESULT1HDW0RESULT1LDW0RESULT2HDW0;结果的高16位RESULT2LDW0;结果的低16位C10DW10OUTPUTBUFFERDB11DUP('0')DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS开始CALLINPUTCALLFIBCALLOUTPUT结束集美大学计算机工程学院汇编语言程序设计实验报告第4页共7页START:MOVAX,DATASMOVDS,AXCALLINPUTCALLFIBCALLOUTPUTJMPQUIT;***********************************************************************INPUTPROCJMPT1WRONG:LEADX,WRONGSTRMOVAH,9INT21HT1:LEADX,STR1MOVAH,9INT21HLEADX,INPUTBUFFERMOVAH,10INT21HMOVAX,0MOVCL,INPUTBUFFER+1MOVCH,0LEABX,INPUTBUFFER+2T2:MULC10MOVDL,[BX]CMPDL,'0'JBWRONGCMPDL,'9'JAWRONGANDDL,0FHADDAL,DLADCAH,0INCBXLOOPT2CMPAX,0032HJAWRONGCMPAX,1JBWRONGMOVN,AXRETINPUTENDP;************************************************************FIBPROCCMPN,1JZL1CMPN,2JZL2DECN集美大学计算机工程学院汇编语言程序设计实验报告第5页共7页CALLFIBMOVAX,RESULT2LMOVDX,RESULT2HMOVCX,RESULT1LADDRESULT2L,CXMOVCX,RESULT1HADCRESULT2H,CXMOVRESULT1L,AXMOVRESULT1H,DXJMPEXITL1:MOVRESULT1L,1MOVRESULT2L,1JMPEXITL2:MOVRESULT2L,1DECNCALLFIBEXIT:RETFIBENDP;*************************************************************OUTPUTPROCMOVAX,RESULT2LLEASI,OUTPUTBUFFERMOVCX,5R1:MOVDX,0;低位加入OUTPUTBUFFERDIVC10INCSIADD[SI],DLLOOPR1;*************************MOVAX,RESULT2HLEASI,OUTPUTBUFFERMOVCX,5R2:MOVDX,0DIVC10INCSIPUSHCX;高位加入OUTPUTBUFFERCMPDX,0JENOADDMOVCX,DXADDN:CALLADD65536LOOPADDNNOADD:POPCXLOOPR2;**********************LEADX,STR2MOVAH,9INT21HLEASI,OUTPUTBUFFERMOVBX,10R3:CMPBYTEPTR[SI+BX],'0'集美大学计算机工程学院汇编语言程序设计实验报告第6页共7页JAPRINTDECBX;显示十进制结果JMPR3PRINT:MOVDL,[SI+BX]MOVAH,2INT21HDECBXCMPBX,1JAEPRINTRETOUTPUTENDP;************************************************************ADD65536PROC;高位算法ADDBYTEPTR[SI],6MOVDL,0CMPBYTEPTR[SI],3AHJBA1SUBBYTEPTR[SI],10MOVDL,1A1:ADDBYTEPTR[SI+1],3ADDBYTEPTR[SI+1],DLMOVDL,0CMPBYTEPTR[SI+1],3AHJBA2SUBBYTEPTR[SI+1],10MOVDL,1A2:ADDBYTEPTR[SI+2],5ADDBYTEPTR[SI+2],DLMOVDL,0CMPBYTEPTR[SI+2],3AHJBA3SUBBYTEPTR[SI+2],10MOVDL,1A3:ADDBYTEPTR[SI+3],5ADDBYTEPTR[SI+3],DLMOVDL,0CMPBYTEPTR[SI+3],3AHJBA4SUBBYTEPTR[SI+3],10MOVDL,1A4:ADDBYTEPTR[SI+4],6ADDBYTEPTR[SI+4],DLMOVDL,0CMPBYTEPTR[SI+4],3AHJBA0SUBBYTEPTR[SI+4],10MOVDL,1A5:ADDBYTEPTR[SI+5],DLMOVDL,0CMPBYTEPTR[SI+5],3AH集美大学计算机工程学院汇编语言程序设计实验报告第7页共7页JBA0SUBBYTEPTR[SI+5],10MOVDL,1A6:ADDBYTEPTR[SI+6],DLMOVDL,0CMPBYTEPTR[SI+6],3AHJBA0SUBBYTEPTR[SI+6],10MOVDL,1A7:ADDBYTEPTR[SI+7],DLMOVDL,0CMPBYTEPTR[SI+7],3AHJBA0SUBBYTEPTR[SI+7],10MOVDL,1A8:ADDBYTEPTR[SI+8],DLMOVDL,0CMPBYTEPTR[SI+8],3AHJBA0SUBBYTEPTR[SI+8],10MOVDL,1A9:ADDBYTEPTR[SI+9],DLA0:RETADD65536ENDP;**********************QUIT:MOVAH,4CHINT21HCODESENDSENDSTART
本文标题:汇编递归求解Fibonacci数-何荣贤
链接地址:https://www.777doc.com/doc-5445939 .html