汇编语言斐波那锲数列

汇编语言斐波那锲数列

ID:12779124

大小:95.00 KB

页数:16页

时间:2018-07-19

汇编语言斐波那锲数列_第1页
汇编语言斐波那锲数列_第2页
汇编语言斐波那锲数列_第3页
汇编语言斐波那锲数列_第4页
汇编语言斐波那锲数列_第5页
资源描述:

《汇编语言斐波那锲数列》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、汇编语言实验报告学院:***班级:***姓名:***学号:***指导老师:**目录实验一斐波那契数列31.设计要求32.设计思想和实施方案论述33.课程设计中遇到的问题及解决方案54.程序流程图65.源程序及注释6实验二统计学生成绩111.设计要求112.设计思想和实施方案论述113.典型程序模块及典型编程技巧分析114.课程设计中遇到的问题及解决方法125.程序流程图,程序清单和程序注释126.程序清单和注释13收获与体会16参考书籍:16实验一斐波那契数列1.设计要求用递归的方法求斐波那契的第2

2、4项(N=24),并将结果用十进制显示出来输出FIB(24)的值2.设计思想和实施方案论述FIB函数采用子程序递归调用方法,实现求斐波那契数列先写出高级语言中的斐波那契递归函数:Intfib(intN){If(N==1

3、

4、N==0)result=1;Elseresult=fib(n-1)+fib(n-2);Returnresult;}其函数为高级语言的形式,其中result=fib(n-1)+fib(n-2)隐含了几个操作可把它展开为:N=N-1;注意到这里的N是形参(局部变量)与调用程序的实参不是

5、同一个变量Inta=fib(N)N=N-1Intb=fib(N)Result=a+b;由此可知几个重要实现地方:a)保存现场:N在一个fib函数里面是局部变量,当系统调用子程序时需要保存这个局部变量,在返回时需要恢复:SUBTPROCNEARPUSHAXPUSHBX…….…….POPBXPOPAXSUBTENDP;采用保存恢复寄存器的形式b)参数传递:其中的N在调用fib传参时是作为实参,在被调用函数中还需要被使用,这是参数的传递,这里采用通过数据区传递参数(同全局变量)c)返回值:最后的resul

6、t在高级语言中是通过将result赋给一个临时变量(调用该函数的程序)然后释放result这个局部变量,在本程序中采用寄存器直接传递的方法,所以在Fib函数中将result赋给一个寄存器,然后不保存它,让其传递到上层调用函数中去。1.课程设计中遇到的问题及解决方案l遇到的问题在编写斐波那契函数的过程中主要遇到了问题是保存现场的问题,在高级语言中,对子程序调用时,系统会自动为我们保存当前程序的现场指令地址,局部变量。而在汇编中除了现场指令地址保存外,其他的工作都必须我们自己完成,所以在对子程序调用时,

7、怎么保存当前的局部变量,怎么传递参数到将要调用的函数中去使用,都是很难理顺思路的地方。l解决方案第一:明确哪些是局部变量,在调用完子程序返回时要恢复的。第二:局部变量作为实参,与被调用的子程序中的形参的区别。第三:确保有压栈就必须对应出栈,且系统的中断指令地址的保存与我们使用的栈是同一个栈解决方案在上面已经写过,就没有在复述了1.程序流程图……….……….NN-1N-2……….21Fib(2)Fib(1)Fib(N-2)Fib(N-1)Fib(N)2.源程序及注释DATASSEGMENTmessag

8、e1db"inputthenumber","$"NUM=18h;修改此处获得第N项斐波那契数列值Ndw0;用于传参的NDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASMainprocfarSTART:pushdssubax,axpushaxmovax,DATASmovds,axmovbyteptrN,NUMcallFIB;调用Fib子程序movdx,ax;callOutput_CTLFcallPrintOX;将十进制转换为十六进制输出movah,1int21h

9、;等待退出屏幕retMainendp;outputCTLFOutput_CTLFprocNearpushaxpushdxmovah,02hmovdl,0dhint21hmovdl,0ahint21hpopdxpopaxretOutput_CTLFendp;inputvalueindxPrintOXprocnearmovcl,4loop1:pushcxmovcl,4roldx,clmovax,dxpopcxandax,000fhcmpax,000ahjlLessThanAaddax,07hLessTh

10、anA:addax,30hpushdxmovdl,almovah,2int21hpopdxlooploop1retPrintOXendpFIBprocnear;FIB子函数pushcx;cx与bx为局部变量pushbxmovcx,N;使用N作为实参传参,cx为形参cmpcx,1;相当于if(N=<1)jleless_equal_1deccx;相当于N-1movN,cx;使用N作为实参传参callFIB;FIB(N-1)movbx,axdeccx;相当于N-1movN,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。