汇编语言斐波那锲数列.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言实验报告 学院: *** 班级: *** 姓名: *** 学号: *** 指导老师: ** 目 录 TOC \o 1-3 \h \z \u 实验一 斐波那契数列 3 1. 设计要求 3 2. 设计思想和实施方案论述 3 3. 课程设计中遇到的问题及解决方案 5 4. 程序流程图 6 5. 源程序及注释 6 实验二 统计学生成绩 11 1. 设计要求 11 2. 设计思想和实施方案论述 11 3. 典型程序模块及典型编程技巧分析 11 4. 课程设计中遇到的问题及解决方法 12 5. 程序流程图,程序清单和程序注释 12 6. 程序清单和注释 13 收获与体会 16 参考书籍: 16 实验一 斐波那契数列 设计要求 用递归的方法求斐波那契的第24项(N=24),并将结果用十进制显示出来 输出FIB(24)的值 设计思想和实施方案论述 FIB函数采用子程序递归调用方法,实现求斐波那契数列 先写出高级语言中的斐波那契递归函数: Int fib(int N) { If(N==1||N==0) result=1; Else result=fib(n-1)+fib(n-2); Return result; } 其函数为高级语言的形式,其中result=fib(n-1)+fib(n-2)隐含了几个操作可把它展开为: N=N-1;注意到这里的N是形参(局部变量)与调用程序的实参不是同一个变量 Int a=fib(N) N=N-1 Int b=fib(N) Result = a+b; 由此可知几个重要实现地方: 保存现场:N在一个fib函数里面是局部变量,当系统调用子程序时需要保存这个局部变量,在返回时需要恢复: SUBT PROC NEAR PUSH AX PUSH BX ……. ……. POP BX POP AX SUBT ENDP; 采用保存恢复寄存器的形式 参数传递:其中的N在调用fib传参时是作为实参,在被调用函数中还需要被使用,这是参数的传递,这里采用通过数据区传递参数(同全局变量) 返回值:最后的result在高级语言中是通过将result赋给一个临时变量(调用该函数的程序)然后释放result这个局部变量,在本程序中采用寄存器直接传递的方法,所以在Fib函数中将result赋给一个寄存器,然后不保存它,让其传递到上层调用函数中去。 课程设计中遇到的问题及解决方案 遇到的问题 在编写斐波那契函数的过程中主要遇到了问题是保存现场的问题,在高级语言中,对子程序调用时,系统会自动为我们保存当前程序的现场指令地址,局部变量。而在汇编中除了现场指令地址保存外,其他的工作都必须我们自己完成,所以在对子程序调用时,怎么保存当前的局部变量,怎么传递参数到将要调用的函数中去使用,都是很难理顺思路的地方。 解决方案 第一:明确哪些是局部变量,在调用完子程序返回时要恢复的。 第二:局部变量作为实参,与被调用的子程序中的形参的区别。 第三:确保有压栈就必须对应出栈,且系统的中断指令地址的保存与我们使用的栈是同一个栈 解决方案在上面已经写过,就没有在复述了 程序流程图 ……… ………. ………. N N-1 N-2 ………. 2 1 Fib(2) Fib(1) Fib(N-2) Fib(N-1) Fib(N) 源程序及注释 DATAS SEGMENT message1 db input the number ,$ NUM=18h ;修改此处获得第N项斐波那契数列值 N dw 0 ;用于传参的N DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS Main proc far START: push ds sub ax,ax push ax mov ax,DATAS mov ds,ax mov byte ptr N,NUM call FIB ;调用Fib子程序 mov dx,ax ;call Output_CTLF call PrintOX ;将十进制转换为十六进制输出 mov ah,1 int 21h ;等待退出屏幕 ret Main endp ; output CTLF Output_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx

文档评论(0)

159****6529 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档