《汇编语言程序设计斐波那契额数列课设报告册》由会员分享,可在线阅读,更多相关《汇编语言程序设计斐波那契额数列课设报告册(11页珍藏版)》请在金锄头文库上搜索。
1、学 号: 课 程 设 计课程名称 汇编语言程序设计设计题目 求 Fibonacci 数列前 n 项学 院 计算机科学与技术专 业 计算机科学与技术班 级姓 名指导教师 杨荣英2011 年 12 月 30 日课程设计任务书学生姓名: 专业班级: 指导教师: 杨荣英 工作单位: 计算机科学与技术学院 题目: 求 Fibonacci 数列前 n 项初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和 80 系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的 4 个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主
2、要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 输入要求输出的项数 n;2) 在屏幕上输出 Fibonacci 数列的前 n 项;3) 程序采用子程序结构,结构清晰;4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1) IBMPC 汇编语言程序设计实验教程实验 2.42) IBMPC 汇编语言程序设计(第 2 版) 例 6.11时间安排:设计安排一周:周 1
3、、周 2:完成系统分析及设计。周 3、周 4:完成程序调试,和验收。周 5:撰写课程设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日1. 设计题目求 Fibonacci 数列前 n 项2. 设计要求2.1 设计说明本程序主要是实现计算 Fibonacci 数列的前 n 项并且显示在屏幕上,因此在程序运行中,首先要把 Fibonacci 数列的前 n 项计算出来,这里的 n 有用户输入,计算机得到 n 值后会计算出数列,然后后程序会把得到的前 n 项显示在屏幕上。2.2 功能要求首先,我们需要输入要求的 Fibonacci 数列的项数。然后,系统把 Fibonacci
4、数列前 n 项显示在屏幕上。本程序采用数组来存储 Fibonacci 数列前 n 项。2.3 原始条件及参数2.2.1 首先,我是先输入要求的 Fibonacci 数列的项数,如下图:1,1,2,3,5,8 是输入 6 后求得的 Fibonacci 数列的前 6 项,最后通过屏幕打印出来。2.2.2 参数在这个程序中,主要一个数组存放数据。3. 设计思路3.1 设计方案及基本流程3.1.1 在开始编程时,对于 Fibonacci 数列的实现,我们想到了数组,即用数组来存放数列,数组的项长短是由输入的 n 决定的,而不是事前计算好很长的项,然后由 n 的大小来打印。3.1.2 其次,在计算 Fi
5、bonacci 数列的项的时候要考虑周到,当输入 1 或 2的时候计算机也要能正确的显示。3.1.3 计算好数列的前 n 项后要正确的显示在屏幕上,这里用逗号把各项分开,看的时候能够比较明了和清楚。3.2 程序框图建立 Fibonacci 数列的前 n 项并且打印到屏幕上。开始保护堆栈,设置段寄存器为当前值输出提示文字并输入 n 值N2?屏幕打印数组值结束YN调用计算 Fibonacci 数列子程序。利用公式 F(n)=F(n-1)+F(n-2) ,计算的结果直接存入数据段的数组屏幕打印数组的前 N 项置数组前 2 项为(1,1)4. 程序清单以下为完整的源程序。datarea segment
6、string1 db please input the number: ,13,10,$string2 db 13,10,here is:,13,10,$Buffer db 4db ?db 4 dup(?)number db ?mulfact db 1fei db 254 dup(?)datarea endscodeareasegmentmainprocfarassume cs:codearea,ds:datareastart:pushdssub ax,axpushaxmov ax,datareamov ds,axlea dx,string1mov ah,09int 21hlea dx,Buf
7、fermov ah,0ahint 21hcallconvertnummov al,numberlea dx,string2mov ah,09int 21hcallinit; mov al,Buffer+1; and ax,00ffh; mov si,axcalloutputfei; mov feisi+1,24h; lea dx,fei; mov ah,09; int 21hretmainendp;=convertnum proc nearpushbxmov si,Buffer1and si,00ffhmov cx,simov mulfact,1mov bx,0Next:mov al,Buff
8、ersi+1; cmp al,0; js Exit; cmp al,9; ja Exitsub al,30hand ax,000fhmov dl,mulfactmul dladd bx,axmov al,mulfactmov dl,10mul dlmov mulfact,axdec siloop Nextmov number,blpop bxretconvertnum endp;=initprocnearmov cx,aland cx,00ffhand ax,00ffhmov si,1; and si,00ffhmov fei+1,1mov fei+2,1loop1:sub cx,2cmp s
9、i,cxjnb exitmov bl,0add bl,feisiadd bl,feisi+1mov feisi+2,blinc sijmp loop1exit:retinitendp;=outputfei procnearmov cl,numberand cx,00ffhmov si,0loop4:cmp si,cxjz breakmov ax,feisi+1and ax,00ffhcalloutputinc sijmp loop4break:retoutputfei endp;=output procnearpushaxpushbxpushcxpushdxcmp ax,100jl g2mov
10、 bl,100div bladd al,30hmov bh,ahmov dl,almov ah,2int 21hmov al,bhcbwg2:cmp ax,10jl g4mov bl,10div blmov bh,ahadd al,30hmov dl,almov ah,2int 21hmov al,bhcbwg4:add al,30hmov dl,almov ah,2int 21hmov dl,20hmov ah,2int 21hpop op cxpop bxpop axretoutput endpcodeareaendsend start5.运行结果运行的结果为 Fibonacci 数列的前
11、 n 项显示在屏幕上,用逗号把各项分开。5. 1 当输入时,返回的结果。5. 2 当输入 2 时,返回的结果5. 3 当输入 3 时,返回的结果。5. 4 当输入 12 时,返回的结果。6.心得体会6.1 自我评价经过几天的努力工作,一个功能简单的小系统终于完成了。虽然不是很复杂,但是仍然有很大的成就感。这个小系统基本上完成了课程设计的要求,能进行 Fibonacci 数列前 n 项的计算和显示,但也有一些局限,比如说界面并不是很好看,今后在这方面还需要做相应的改进。这是我个人对系统做的一些简单评价,也许还有更多的地方值得改进,希望老师给予指出,今后会改进的更好。6.2 心得体会及开发感悟终于
12、完成一个完整的小程序,我感到十分高兴。感悟很多。在程序的制作过程中,遇到了很多意想不到的困难,自己一个人解决起来有很大的困难,于是也少不了同学的帮助,深刻体会到开发程序不只是一两个人就能很好的完成的,要大家互相帮助,共同探讨问题,才能更好的解决困难。对于本程序(求 Fibonacci 数列前 n 项) ,表面上看去似乎很简单,但接下来遇到的困难就让我不这么认为了。首先数列的保存我想到了数列,可是本数列的前两项都是 1,怎么样是的输入 1 或 2 时能够正确的显示呢?这个问题困饶了我很久,后来问了一位同学才得到了比较好的解决办法。在输入 n 值的时候首先判断它和 2 的大小关系,如果大于 2,则
13、定义数列前两项为 1,且执行f(n)=f(n-1)+f(n-2);如果 n 等于或小于 2,则直接打印第一项或前两项。最后,我觉得接到一个任务不能立刻就下手编程序,而是应该先规划一下程序,仔细列出框架和一些关键细节的实现方法,然后在编程,盲目的编写程序只会让以后的工作很难展开,这些经验必将对以后的学习起到重要的作用。本科生课程设计成绩评定表班级:姓名: 学号:序号 评分项目 满分 实得分1 学习态度认真、遵守纪律 102 设计分析合理性 103设计方案正确性、可行性、创造性204 设计结果正确性 405 设计报告的规范性 106 设计验收 10总得分/等级评语:注:最终成绩以五级分制记。优(90-100 分) 、良(80-89 分) 、中(70-79 分) 、及格(60-69 分) 、60 分以下为不及格指导教师签名: 年月日