版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学 号0120810680134课 程 设 计题 目求Fibonacci数程序设计学 院计算机科学与技术学院专业班级软件工程0801班姓 名李翊华指导教师王 云 华2011年1月6日目录1. 课程设计任务书12. 设计目的、内容、时间22.1设计的时间.22.2设计的内容.22.3设计完成时间.23. 设计环境与工具24. 程序设计算法说明25. 程序框图36. 程序代码47. 运行结果记录88. 设计结果测试、分析.119. 参考文献.1110. 评分表.12课程设计任务书学生姓名: 李翊华 专业班级: 软件0801班 指导教师: 王云华 工作单位: 计算机学院 题 目: 求Fibonacc
2、i数程序设计 初始条件:DOS操作系统。编辑,汇编,连接,调试工具:edit、masm、link、debug要求完成的主要任务: 程序接受用户键入的n值(1100),根据给定的n值(注意处理非法n值),计算Fibonacci数。由键盘输入控制值,按“Q”键退出。课程设计报告书写要求:1. 封面(使用教务处统一格式)2. 报告书目录3. 课程设计任务书4. 设计目的、设计内容、完成时间5. 设计环境与工具6. 程序设计算法说明、框图 7. 运行结果记录8. 设计结果测试、分析9. 参考文献10. 其他11. 评分表12. 封底时间安排:课程设计时间为18周一周。指导教师签名: 2011年 1 月
3、 6日系主任(或责任教师)签名: 2011 年 1月 6日2. 设计目的、内容、时间安排2.1设计目的:通过该课程设计,熟悉计算机体系结构,DOS的操作系统的功能调用,能较为熟练的运用汇编语言进行程序的编写。进一步了解汇编语言控制计算机硬件的方法,提高应用汇编语言编写程序的能力。2.2设计内容: 程序接受用户键入的n值(1100),根据给定的n值(注意处理非法n值),计算Fibonacci数。由键盘输入控制值,按“Q”键退出。2.3时间安排: 2011年1月1日7日 (第18周)地点:鉴主10楼软件实验室。3. 设计环境与工具DOS操作系统、文本编辑器MASM.EXE、LINK.EXE、DEB
4、UG.EXE4. 程序设计算法说明程序要求计算Fibonacci数列的前n项,并把第n项的结果显示在屏幕上,因此在程序运算过程中,主要的部分就是Fibonacci数列的前n项的值计算出来,并且以十进制的方式将第n项的值显示在屏幕上。4.1计算前n项的值输入n的值后,先判断是否是数值。如果是Q或q,则显示已退出提示,退出程序。如果是其他字符,则显示输入错误的信息,提示重新输入。如果是数值,则进入后面的计算步骤。将输入的数值存入cx中,如果数值小于等于2,则直接输出结果。否则,就以cx-2作为外循环,把两个数相加,将尾数与高位开储存,直至循环结束。4.2将转化成十进制在存储时,是将相加后的结果多次
5、除以10后 ,余数和商数先后进栈存储。在输出时,要求以十进制输出。则先判断高位是否为0,为0则出栈但不输出,从下一位开始依次输出,并显示。显示结果就是要求的第n项的十进制结果。5. 设计框图主流程图开始初始化寄存器输入数据将结果显示输出将数放到cx中显示已退出提示提示输入错误al=Q?al=q?al=其他字母或符号?cx2YYNNYN外循环YN直接输出结果结束外循环流程图外循环si=0dl=xsi, dh=resultsi,内循环次数=25resultsi=dh+dlxsi=dhdl>10YNNresultsi=resultsi-10d,si+1,xsi+1返回主程序内循环完成?外循环完
6、成?YYN6. 程序代码datas segment;此处输入数据段代码 result db 1d,24 dup(0) x db 1d,24 dup(0) mess1 db 0dh,0ah,'Please choose a data from 1 to 100:','$' mess2 db 0dh,0ah,'The result is:','$' mess3 db 0dh,0ah,'Press Q/q to exit.','$' flag dw messerror db 0dh,0ah,'In
7、put error,please re-enter.','$' quit db 0dh,0ah,'You have typed Q/q to exit.','$' datas ends stacks segment ;此处输入堆栈段代码 dw 128 dup(?) stacks endscodes segment assume cs:codes,ds:datas,ss:stacks,es:datasstart: mov ax,datas ;ds寄存器设置到当前的数据段 mov ds,ax mov es,ax mov ax,stacks ;
8、ss寄存器设置到当前堆栈段 mov ss,ax ;此处输入代码段代码 reinput: push ax ;进栈 push bx push cx push dx push si push di mov ah,09 ;显示操作符 lea dx,mess3 int 21h lea dx,mess1 int 21h ;输入规模n,并且转换为十进制数 mov bx,0 input: mov ah,01 int 21h cmp al,'q' ;判断输入是否为q jz end_ ;跳转到end_ cmp al,'Q' jz end_ cmp al,0dh jz cont cm
9、p al,'0' ;输入是否为数字 jb error ;跳转到error cmp al,':' jnb error sub al,30h cbw xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp input error: ;提示出错信息 mov ah,09 lea dx,messerror int 21h jmp reinput ;跳转回开始状态 end_: ;提示已退出程序信息 mov ah,09 lea dx,quit int 21h mov ah,4ch int 21h ret cont: mov
10、cx,bx ;输入的数放到cx中 cmp cx,2 jle print ;如果小于等于2,就直接输出结果 sub cx,2 ;否则以cx-2作为外循环,把两个数相加 next: mov di,cx mov cx,25 mov si,0 adde: mov dl,xsi mov dh,resultsi add dl,dh ;将两个存储单元的数中进行相加 mov resultsi,dl mov xsi,dh ;将上次的相加结果放入X中 cmp dl,10d jae great ;如果大于10D,则转移 inc si jmp goon great: sub resultsi,10d ;将尾数存入本单
11、元 inc si add xsi,1 ;高位加1 goon: loop adde mov cx,di loop next print: lea dx,mess2 ;输出显示提示 mov ah,09 int 21h mov cx,25 mov si,24display1: cmp flag,0 ;标志位判断输出的高位是否为0 jnz n2 cmp resultsi,0 jz n3 add flag,1 n2: mov dl,resultsi ;以十进制输出 add dl,30h mov ah,02h int 21h n3: dec si loop display1 mov flag,0 mov
12、result0,1d mov x0,1d mov si,1 mov cx,24 initial: mov resultsi,0 mov xsi,0 add si,1 loop initial mov si,0 pop di ;出栈 pop si pop dx pop cx pop bx pop ax jmp reinput ;跳转回开始状态,进行下一次计算 mov ah,4ch int 21h codes ends end start 7. 运行结果记录当程序初始化时,截图如下:当输入1时,截图如下:当输入8时,截图如下:当输入20时,截图如下:当输入89时,截图如下:当输入其他字符(若输入负
13、数,则要输入符号,所以可将负数归结于其他符号一类)时:当输入Q/q键时,截图如下:8. 设计结果测试及分析在计算Fibonacci数列时需要循环相加,但首先要保证n的值是大于2的。在n的值为1或2的时候,f(n)=1。所以在进行循环之前要先判断n是否为1或2,将这两种情况排除后才能利用公式f(n)=f(n-1)+f(n-2)进行累加。这是在编写这个程序中需要注意的很重要的一部分。经过抽其中几项,以及Q/q键,其他字符的测试,本程序均能达到实验要求,得出正确的答案。经过此次的课程设计,我也学习到了汇编程序的知识。首先,在程序的制作过程中,遇到了很多意想不到的困难,自己一个人解决起来有难度,于是也少不了同学的帮助,深刻体会到开发程序不只是一两个人就能很好的完成的,要大家互相帮助,共同探讨问题,才能更好的解决困难。其次,编程过程中遇到了很多没有学过但需要用到的内容,怎样将其变成自己掌握的内容就很重要了,对知识的掌握应该做到融会贯通。最后,我觉得接到一个任务不能立刻就下手编程序,应该先理清楚思路,列出大概的框架,在需要注意的细节处做好标记,写出应注意的问题;然后再编程。多翻看书籍,尽量简练的句子写出来。盲目的编写程序只会让以后的工作很难展开,这些经验必将对以后的学习起到重要的作用。9. 参考文献IBM PC汇编语言程序设计 沈美明 温冬婵 主编 清华
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论