微机原理课程设计报告学生成绩排序名次Word格式文档下载.docx
- 文档编号:22254876
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:11
- 大小:144.39KB
微机原理课程设计报告学生成绩排序名次Word格式文档下载.docx
《微机原理课程设计报告学生成绩排序名次Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告学生成绩排序名次Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
编写程序使得在2000H开始的区域排出名次表,2000H+i为学号i的学生的名次。
下面着重介绍程序5——学生成绩名次表设计:
流程图:
主程序流程图SCAN子函数程序流程图
程序代码及注释:
CRLFMACRO;
宏定义,回车换行
MOVAH,02H
MOVDL,0DH
INT21H
MOVDL,0AH
ENDM
DATASEGMENT
STUNUMEQU30;
学生数
MESS1DB'
Pleaseinput30score'
0DH,0AH,'
$'
;
提示信息
ERRORDB'
Inputerror,tryagain'
报错信息
MESS2DB'
Theorderis:
'
EMARKDB;
报错标志
ORG1000H;
存放成绩地址
SCOREDB30DUP();
成绩表
ORG2000H;
存放名次地址
SEQUDB30DUP();
名次表
DATAENDS
STACKSEGMENT
STADW32DUP()
TOPDW
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSP,TOP
MOVAH,09H;
显示提示信息
MOVDX,OFFSETMESS1
INT21H
MOVSI,OFFSETSCORE;
成绩表首址
MOVCX,STUNUM
MOVEMARK,0;
报错标志清0
UUU:
CALLGETNUM;
调用子函数读取成绩
CMPEMARK,01H;
判断是否出错
JESTART;
出错则重新开始
MOV[SI],DL;
没出错则存入成绩
INCSI;
指向下一个成绩单元地址
LOOPUUU;
判断30个成绩是否读取完
MOVDI,OFFSETSEQU;
名次表首址
VVV:
CALLSCAN;
调用扫描子程序
MOVAL,STUNUM;
学生总数
SUBAL,CL;
计算名次
INCAL
MOVBX,DX;
学号
PUSHAX;
将名次转换成压缩BCD码方便显示
PUSHBX
PUSHCX
XORAH,AH
MOVBH,0AH
DIVBH
MOVCL,4
SHLAL,CL
ADDAL,AH
MOVDH,AL
POPCX
POPBX
POPAX
MOV[DI+BX],DH;
存入名次
LOOPVVV;
判断是否存完
显示名次提示信息
LEADX,MESS2
MOVSI,OFFSETSEQU
WWW:
MOVAL,[SI]
CALLDISPI;
调用子函数显示名次
PUSHDX
PUSHAX
MOVAH,02;
显示空格
MOVDL,20H
POPAX
POPDX
指向名次表的下一个地址
LOOPWWW;
判断是否输出所有名次
MOVAH,4CH;
返回DOS
SCANPROCNEAR;
扫面子函数,没调用一遍,找出成绩表
;
中最高成绩,记录其学号,并将此成绩
清0
PUSHCX
MOVAL,00H
MOVBX,OFFSETSCORE
MOVSI,BX
CCC:
CMPAL,[SI]
JAEJJJ
MOVDX,SI
SUBDX,BX
JJJ:
INCSI
LOOPCCC
ADDBX,DX
MOVBYTEPTR[BX],00H
POPCX
RET
SCANENDP
DISPIPROCNEAR;
显示子程序
MOVBL,AL;
显示高4位
MOVDL,BL
MOVCL,04
ROLDL,CL
ANDDL,0FH
CALLDISPL
MOVDL,BL;
显示低4位
ANDDL,0FH
DISPIENDP
DISPLPROCNEAR;
将名次转换成对应的ASCII码值并显示
ADDDL,30H
DISPLENDP
GETNUMPROCNEAR;
读取成绩子函数
XORDX,DX;
清0,用于存放成绩
GGG:
MOVAH,01H
INT21H;
键盘字符输入
CMPAL,0DH
JZRRR;
如果是回车则结束
SUBAL,30H
JBERR;
小于0则报错
CMPAL,09H
JBEGETS;
如果在0—9之间则存成绩至DX
JMPERR;
否则报错
GETS:
SHLDX,CL;
将DX中已有数值左移四位
XORAH,AH
ADDDX,AX;
紧接着将数据存在DX中低四位
JMPGGG;
跳转继续读取数据
ERR:
显示报错信息
MOVDX,OFFSETERROR
MOVEMARK,01H;
报错标志置1
RRR:
PUSHDX
CRLF;
回车换行
POPDX
RET
GETNUMENDP
CODEENDS
ENDSTART
心得体会:
在为期一周的微机原理课程设计中,通过查阅书籍,上网收集资料以及向老师和同学请教,我完成了老师定下的任务。
在此次课程设计过程中感受颇深。
这一周,可以说是苦多于甜,但是可以学到很多东西,同时巩固了以前所学过的知识。
以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。
但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的程序较复杂,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
在设计过程中遇到了不少的麻烦,最典型的是由于程序相对较大,在用JB,JA等条件跳转语句时出项了超出跳转范围的情况,这就给程序设计带来了一些困难。
由于之前都没遇到过这样的问题,所以刚开始遇到的时候有点棘手,不知道该从哪下手解决此问题,以至于都有了放弃该课题的想法。
但是又觉得不值得,写了这么长的程序就因为这一个小问题而放弃了实在是说不过去,于是就静下新来查阅课本,发现这些条件跳转语句的跳转范围只能在-128B--+127B之间,而无条件跳转指令JMP则不受此约束,于是我添加了一个无条件跳转语句,通过条件跳转语句先跳转到该无条件跳转语句,再通过JMP跳转到需要的地方,于是问题就迎刃而解。
同过这一个小小的问题也暴露出了自身的问题:
对课本知识掌握不牢固,只了解指令的基本功能却忽略了它的约束条件。
还有一些问题,比如为了显示方便,需把16进制数转化成10进制数显示,在进行ASCII码值转换时也遇到了问题,A—F不能正确显示,通过与同学讨论也是自己的疏忽导致的。
这不是第一次用汇编语言来写程序,平时做了很多实验,写了很多小程序。
但这次是一个综合的程序,平时的一些程序稍微改动都可以作为子程序用到,这大大方便了我的设计,为我节省了很多的时间。
在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,去找同学讨论一下,收获很大,可以使很多问题迎刃而解。
不可否认,程序任然存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。
我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!
参考文献:
1.张荣标,机械工业出版社,《微型计算机原理与接口技术第二版》
2.张荣标,《微型计算机原理课程设计指导书》
3.李干林,李升等,北京大学出版社《微机原理及接口技术试验指导书》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 报告 学生 成绩 排序 名次