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

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

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

汇编语言斐波那锲数列

汇编语言实验报告

学院:

***

班级:

***

姓名:

***

学号:

***

指导老师:

**

目录

TOC\o1-3\h\z\u实验一斐波那契数列 5

1. 设计要求 5

2. 设计思想和实施方案论述 5

3. 课程设计中遇到的问题及解决方案 7

4. 程序流程图 8

5. 源程序及注释 8

实验二统计学生成绩 15

1. 设计要求 15

2. 设计思想和实施方案论述 15

3. 典型程序模块及典型编程技巧分析 15

4. 课程设计中遇到的问题及解决方法 17

5. 程序流程图,程序清单和程序注释 17

6. 程序清单和注释 19

收获与体会 24

参考书籍: 24

实验一斐波那契数列

设计要求

用递归的方法求斐波那契的第24项(N=24),并将结果用十进制显示出来

输出FIB(24)的值

设计思想和实施方案论述

FIB函数采用子程序递归调用方法,实现求斐波那契数列

先写出高级语言中的斐波那契递归函数:

Intfib(intN)

{

If(N==1||N==0)result=1;

Elseresult=fib(n-1)+fib(n-2);

Returnresult;

}

其函数为高级语言的形式,其中result=fib(n-1)+fib(n-2)隐含了几个操作可把它展开为:

N=N-1;注意到这里的N是形参(局部变量)与调用程序的实参不是同一个变量

Inta=fib(N)

N=N-1

Intb=fib(N)

Result=a+b;

由此可知几个重要实现地方:

保存现场:N在一个fib函数里面是局部变量,当系统调用子程序时需要保存这个局部变量,在返回时需要恢复:

SUBTPROCNEAR

PUSHAX

PUSHBX

…….

…….

POPBX

POPAX

SUBTENDP;采用保存恢复寄存器的形式

参数传递:其中的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)

源程序及注释

DATASSEGMENT

message1dbinputthenumber,$

NUM=18h ;修改此处获得第N项斐波那契数列值

Ndw0 ;用于传参的N

DATASENDS

CODESSEGMENT

ASSUMECS:CODES,DS:DATAS

Mainprocfar

START:

pushds

subax,ax

pushax

movax,DATAS

movds,ax

movbyteptrN,NUM

callFIB ;调用Fib子程序

movdx,ax

;callOutput_CTLF

callPrintOX ;将十进制转换为十六进制输出

movah,1

int21h ;等待退出屏幕

ret

Mainendp

;outputCTLF

Output_CTLFprocNear

pushax

pushdx

movah,02h

movdl,0dh

int21h

mov

文档评论(0)

138****2866 + 关注
实名认证
文档贡献者

施工员持证人

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

领域认证该用户于2024年06月09日上传了施工员

1亿VIP精品文档

相关文档