汇编课程设计报告正文Word文档下载推荐.docx
- 文档编号:21946150
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:222.02KB
汇编课程设计报告正文Word文档下载推荐.docx
《汇编课程设计报告正文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编课程设计报告正文Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
第1章需求分析
1.1设计题目成绩分段统计
(2)
1.2设计目的
在此课程设计中,通过对成绩统计分段程序的设计,来实现键盘输入,排序,输出功能,熟悉常用系统功能调用和常用算法的实现。
如01H功能调用,02H功能调用以及BIOS功能调用的09H调用;
掌握常用排序算法的汇编实现,如本设计中的冒泡排序算法实现降序排列。
汇编语言程序设计课程设计是计算机教学实践基础上的一次重要的大型实验,也是对汇编语言程序设计课程所学理论知识的深化和提高。
因此,要求学生能综合应用所学知识,设计与调试出具有实际功能的应用程序,并且在实验的基本技能方面上进行一次全面的训练。
培养学生综合运用所学知识独立完成汇编程序课题的能力,使学生能够比较全面巩固和应用课堂中所学的基本理论和程序设计方法,能够比较熟练完成汇编程序的设计和调试。
提高学生对工作认真负责,一丝不苟,和在遇到难题时的协同合作的素质,培养学生从资料文献,科学实验中获得知识的能力,初步培养工程意识和创新能力,培养学生勇于探索,严谨推理,实事求是的素质。
1.3程序运行环境及开发工具
1.3.1运行环境
Windowsxp操作系统,MASM,Link汇编链接软件
1.3.2开发工具
TDDebug,记事本
1.4课程设计任务及要求
1.4.1设计任务
从键盘接受15个学生成绩,将15个学生成绩按降序排列,并分别求出最高,最低成绩。
1.4.2设计要求
原始数据由键盘输入,存入从HBCJ开始的存储区域,排序后的成绩存入从HBPX开始的存储区域,且将不及格的成绩用红色标注。
程序结构中至少包括数据段,代码段,有子程序应用,有系统功能调用。
第2章概要设计
2.1设计思想和原理
2.1.1设计思想
在程序运行时,先显示提示输入的信息,提示输入数据,输入数据后,按回车键,从键盘获取数据并存放在从HBCJ和HBPX开始的存储区域中,并在屏幕上显示出输入的原始数据。
用冒泡排序实现HBPX存储区的数据的排序后,会有输出的提示信息,然后输出排完序后HBPX中的数据,在输出排完序的数字的时候,进行判断,并将不及格的分数用红色数字输出,最后显示HBPX存储区域中的最小和最大数并输出。
在进行最大最小数判断时可以直接从有序数据存储区域HBPX中读取,首项即为最大数,末项即为最小数。
2.1.2设计原理
在从键盘获取数据时的功能可以通过调用02H的DOS系统功能调用来实现,AL=输入字符;
在屏幕上显示提示信息的功能可以通过调用09H的DOS系统功能调用,DS:
DX=字符串首址(字符串以”$”结束)。
在获取数据并存放到HBPX的存储单元后,通过冒泡排序算法可以实现存储数据的降序排列实现。
在实现红色数字输出的功能时可以通过调用09H的BIOS功能调用来实现,09H调用可以在光标处写字符,其中BH=显示页号,CX=字符计数,AL=欲写字符的代码,BL=欲写字符的属性或颜色,在每次进行输出前只需要设置属性寄存器的值就可以按照要求在光标处输出字符。
2.2系统流程图
图2.1程序模块流程图
图2.2键盘输入模块图2.3冒泡排序模块
图2.4字符输出模块
第3章详细设计
3.1数据段的设计
3.1.1数据段定义(DATASEGMENT)中一共定义了8个常量:
MESS1、MESS2、MESS3、MESS4里面存放着每个步骤提示信息字符串;
HBCJ,HBPX两个存储区域中用于存放排序前和排序后的数据。
MAX,MIN中分别用来存放排序后数据选取的最大数和最小数
堆栈段定义(STACKSEGMENT)
代码段定义(CODESEGMENT)
3.2主程序的设计与实现
主程序main先通过DOS系统功能调用完成提示输入信息的输出,然后调用子程序INPUT来实现通过键盘输入所需数据,并保存在内存单元HBCJ和HBPX中,随后调用SORT子程序实现对原始数据的降序排列,并把排序后的数据存放在HBPX数据区域中,最后,调用OUTPUT子程序输出排序后的数据,在输出数据的同时判断数据,如果不及格则实现红色数字输出,并从排序后的数据中取出最大数和最小数并在屏幕上输出。
3.3子程序的设计与实现
3.3.1键盘输入成绩模块
键盘输入成绩由子程序INPUT实现,INPUT主要是用DOS系统功能调用来获取键盘输入的数据:
MOVAH,01H;
01H功能调用获取键盘输入
INT21H;
从键盘读入数据
判断输入的数据,从而选择继续输入、保存或者退出输入
CMPAL,0DH;
判断是否为回车键
JZENDINPUT;
结束输入
CMPAL,20H;
判断是否为空格
JZSAVE;
保存数据
SUBAL,30H;
变为10进制数
MOVCL,4
SHLBX,CL;
左移四位.变为BCD码
ADDBL,AL
JMPINPUT
3.3.2冒泡排序模块
对数据的降序排序用冒泡排序算法实现。
先用SI存放数据区域HBPX的偏移地址,然后将SI指向的数据传送到AX中,然后将HBPX存储区域的偏移地址SI加2,指向HBPX中的第二个数数,然后从第二个数开始,依次和AX比较,如果大于AX则交换数据,如果小于AX则SI继续加2,在第一轮比较完成后,HBPX第一个数据区域中存放的就是最大的数据,然后第二轮从第二个数开始,先把第二个数放在AX里面,SI指向第三个数,并依次向后进行比较,每次比较大小,如果大就交换数据……在进行14轮后,HBPX中存放的就是降序排列的数据。
3.3.3,数据输出模块
在实现红色字符输出时要用到BIOS功能调用,在进行输出前,每次从HBPX中取数,并对数据和60进行比较,如果小于60则跳转另外的分支,该分支调用BIOS的09H功能调用实现红色字符的输出,BIOS的09H功能调用中,BH=显示页号,CX=字符计数,AL=欲写字符的代码,BL=欲写字符的属性或颜色,每次进行输出前,将要输出数字的ASCII码放在AL中,并设置好前景色和背景色后调用09H,就可以将AL中的字符以你设定的颜色输出到屏幕上。
MOVAH,09H
MOVAL,DL
MOVBH,0
MOVBL,4
MOVCX,1
INT10H
MOVAH,3
MOVAH,2
INCDL
第4章系统调试与操作说明
在对程序进行编译,发现有错误和警告:
1.在第二行和第三行没有结束标号,2.堆栈定义使用了保留字
图4.1程序编译
检查原程序后发现在定义提示信息字符串时忘记加结束符$,并且在定义堆栈段的时候用的系统保留字STACK
图4.2程序运行
再输入15个需要处理的数据后按回车键:
图4.3程序运行结果
可以看到输入的数据已经进行了排序,并输出到了屏幕上,排序后的数据中不及格的数据已经用红色标注,并且取出了数据总的最大和最小数也输出到了屏幕上。
第5章设计中存在的问题及解决方法
在实现完数据键盘输入和排序以后,设计红色字符输出模块的时候,输出的就不是原始数据,不及格的数据显示红色但出现数据显示错误错误。
在仔细分析了键盘输入模块和数据排序模块的代码后,没有发现问题,就把问题初步确定在数据显示模块。
于是对模块的出口地址,入口地址,交换数据的寄存器,标志位等进行了仔细的分析:
图5.1程序调试
最后发现在开始数据输出模块的时候,对于模块中用到的寄存器并没有入栈保护,而每次输出后,寄存器中的数据没有还原导致在进行转换输出的时候出现错误。
图5.2程序运行
第6章总结与体会
刚开始拿到课题感觉很简单,但是实际下笔写的时候,遇到的最大的困难是如何进行键盘输入和保存和排序结果的输出问题,对系统功能调用和BIOS功能调用的使用方法生疏,使得程序设计一度陷入停滞状态,不知如何下手。
然后我又重新翻阅了我们的课本,详细学习了常用的系统功能调用和用法,通过对相关内容的学习,我终于对系统功能调用有了详细的认识,在设计程序时也容易了很多。
通过这次课程设计,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在完成过程中通过和同学的交流,也增加了合作的技巧。
通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。
这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。
但这次是一个综合的程序,平时的很多程序都用到了。
历时一周终于完成,其间有不少感触。
不少子程序,比如键盘输入程序和排序程序,就是我们平时实验时经常用到的程序,稍加改正,就可以用了,平时的实验也为这次课程设计提供了基础。
在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。
不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。
我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!
[1]徐建民,王东,邵艳华《汇编语言程序设计》.第2版.北京:
电子工业出版社
[2]钱晓捷,《汇编语言程序设计》.第2版.北京:
清华大学出版社
[3]杨季文
《汇编语言程序设计教程》.清华大学出版社
设计者:
操时力
日期:
2010年12月31日
设计过程中质疑(或答辩)记载:
1.在键盘输入模块中,程序是如何实现将键盘输入转换并保存到BX中?
答:
在将键盘输入数据保存到BX中的过程中是又两次按键输入组合保存到BX中形成的。
例如输入15时,先按下1,程序会先接收1的ASCII码,然后减去0的ASCII码30H得到1的十进制数据,随后会循环左移四位,将1的BCD码表示为高位即为真是数据的十位,当第二次按下5时,程序会接收5的ASCII码,再减去0的ASCII码30H,得到5的十进制BCD,然后加上之前的移位后的1的BCD码,相加就会得到15的BCD码表示,并存放到BX中。
2.如果要在源程序中加上对原始未排序数据的输出,从而能与排序后数据形成对比,应该怎么对源程序进行修改?
如果想要在屏幕上输出显示原始数据的输出,可以在输出排序后数据之前调用打印子程序对未排序数据进行输出,可以再加上一段程序来单独实现对未排序数据的输出:
OUT:
MOVBX,HBCJ[SI]
CALLPRINT
ADDSI,2
DECCX
JNZOUT
JMPSORT
指导教师评语:
评分:
签名:
年月日
源程序
STACKSEGMENTSTACK;
堆栈段定义
STKDB200DUP(0)
STACKENDS
DATASEGMENT;
数据段定义
MESS1DB'
Pleaseinput15studentsscore:
$'
MESS2DB'
Theresultofrankingis:
MESS3DB0DH,0AH,'
TheMAXnumberis:
'
'
MESS4DB0DH,0AH,'
TheMINnumberis:
HBCJDW15DUP(0);
分配存放空间
HBPXDW15DUP(0);
MAXDW0
MINDW0
DATAENDS
CODESEGMENT;
代码段
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVDX,OFFSETMESS1;
显示提示输入
MOVAH,09H
INT21H
XORBX,BX;
寄存器清零
XORCX,CX
XORSI,SI
XORDI,DI
INPUT:
MOVAH,1
INT21H;
CMPAL,0DH;
是否为回车键
JZENDINPUT
是否为空格
JZSAVE
变为真数
SAVE:
MOVHBPX[SI],BX;
保存到HBCJ中
INCDI
XORBX,BX
JMPINPUT
ENDINPUT:
保存最后一个数据
MOVDL,0AH
MOVAH,02H
MOVDX,OFFSETMESS2;
显示输出提示
MOVCX,DI
PUSHDI
SUBSI,SI;
SI清零
MOVDX,CX
PUSHCX
XORDI,DI;
DI清零
COPY:
MOVAX,HBPX[SI]
MOVHBCJ[DI],AX
ADDDI,2
LOOPCOPY
SUBDI,DI;
POPCX
SORT:
MOVAX,HBPX[SI];
起泡排序
CMPHBPX[SI+2],AX
JNCTEMP
DECDX
JNZSORT
JMPSSS
TEMP:
XCHGAX,HBPX[SI+2];
交换位置
MOVHBPX[SI],AX
JNZSORT
JMPSSS
SSS:
MOVDX,CX;
外循环
SUBSI,SI
POPDI
JMPOUT_PUT
OUT_PUT:
MOVBX,HBPX[SI]
CALLPRINT;
打印输出
DECDI
JNZOUT_PUT
JMPOUT_RESULT
OUT_RESULT:
MOVDX,OFFSETMESS4;
显示输出MIN
MOVBX,HBPX[SI-2]
CALLPRINT
MOVDX,OFFSETMESS3;
显示输出MAX
MOVBX,HBPX[SI]
MOVAH,4CH;
返回DOS
MAINENDP
PRINTPROCNEAR;
打印函数
CMPBX,60H
JCUNDERLINE
A:
MOVDL,BL;
输出十位数
MOVCL,4
SHRDL,CL
ADDDL,30H
输出个位数
ANDDL,0FH
MOVDL,20H;
输出空格
JMPD
UNDERLINE:
MOVCL,4
MOVAH,9
MOVAH,9
D:
RET
PRINTENDP
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 课程设计 报告 正文
![提示](https://static.bdocx.com/images/bang_tan.gif)