微机原理课程设计报告 学生成绩排序名次
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名:
XX 班级: XXXXX 学号: XXXXXXXXXX
课程设计
微WEI 机JI 原YUAN 理LI
2011 年 7 月 8 日
目的:
结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。
学会使用屏幕编辑程序——EDIT,弄懂汇编程序的上级过程以及如何运用DEBUG软件进行汇编程序的调试。
内容与要求:
字符串匹配设计
为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NO MATCH”。
从键盘输入数据并显示的设计
为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。
响铃设计
为掌握响铃的使用方法,编写程序,从键盘接受输入字符,如是数字N则响铃N 此,如不是数字则不响。
将键盘输入的小写字母转换成大写字母的设计
为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换,编写程序,接受键盘字符,并将其中的小写字母转变为大写字母,然后显示在屏幕上。
学生成绩名次表设计
为进一步熟悉排序方法,编写程序,将100以内的30个成绩存入首址为1000H 的存储区中。
1000H+i表示学号为i的学生成绩。
编写程序使得在2000H开始的区域排出名次表,2000H+i为学号i的学生的名次。
下面着重介绍程序5——学生成绩名次表设计:
流程图:
主程序流程图SCAN子函数程序流程图
程序代码及注释:
CRLF MACRO ;宏定义,回车换行
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
STUNUM EQU 30 ;学生数
MESS1 DB 'Please input 30 score',0DH,0AH,'$' ;提示信息ERROR DB 'Input error,try again',0DH,0AH,'$' ;报错信息
MESS2 DB 'The order is:',0DH,0AH,'$'
EMARK DB ;报错标志
ORG 1000H ;存放成绩地址
SCORE DB 30 DUP() ;成绩表
ORG 2000H ;存放名次地址
SEQU DB 30 DUP() ;名次表
DATA ENDS
STACK SEGMENT
STA DW 32 DUP()
TOP DW
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP
MOV AH,09H ;显示提示信息
MOV DX,OFFSET MESS1
INT 21H
MOV SI,OFFSET SCORE ;成绩表首址
MOV CX,STUNUM
MOV EMARK,0 ;报错标志清0
UUU: CALL GETNUM ;调用子函数读取成绩CMP EMARK,01H ;判断是否出错
JE START ;出错则重新开始
MOV [SI],DL ;没出错则存入成绩
INC SI ;指向下一个成绩单元地址
LOOP UUU ;判断30个成绩是否读取完
MOV CX,STUNUM
MOV DI,OFFSET SEQU ;名次表首址
VVV: CALL SCAN ;调用扫描子程序
MOV AL,STUNUM ;学生总数
SUB AL,CL ;计算名次
INC AL
MOV BX,DX ;学号
PUSH AX ;将名次转换成压缩BCD码方便显示
PUSH BX
PUSH CX
XOR AH,AH
MOV BH,0AH
DIV BH
MOV CL,4
SHL AL,CL
ADD AL,AH
MOV DH,AL
POP CX
POP BX
POP AX
MOV [DI+BX],DH ;存入名次
LOOP VVV ;判断是否存完
MOV AH,09H ;显示名次提示信息
LEA DX,MESS2
INT 21H
MOV CX,STUNUM
MOV SI,OFFSET SEQU
WWW: MOV AL,[SI]
CALL DISPI ;调用子函数显示名次
PUSH DX
PUSH AX
MOV AH,02 ;显示空格
MOV DL,20H
INT 21H
POP AX
POP DX
INC SI ;指向名次表的下一个地址
LOOP WWW ;判断是否输出所有名次
MOV AH,4CH ;返回DOS
INT 21H
SCAN PROC NEAR ;扫面子函数,没调用一遍,找出成绩表
;中最高成绩,记录其学号,并将此成绩
;清0
PUSH CX
MOV CX,STUNUM
MOV AL,00H
MOV BX,OFFSET SCORE
MOV SI,BX
CCC: CMP AL,[SI]
JAE JJJ
MOV AL,[SI]
MOV DX,SI
SUB DX,BX
JJJ: INC SI
LOOP CCC
ADD BX,DX
MOV BYTE PTR [BX],00H
POP CX
RET
SCAN ENDP
DISPI PROC NEAR ;显示子程序
PUSH CX
MOV BL,AL ;显示高4位
MOV DL,BL
MOV CL,04
ROL DL,CL
AND DL,0FH
CALL DISPL
MOV DL,BL ;显示低4位
AND DL,0FH
CALL DISPL
POP CX
RET
DISPI ENDP
DISPL PROC NEAR ;将名次转换成对应的ASCII码值并显示
ADD DL,30H
MOV AH,02H
INT 21H
RET
DISPL ENDP
GETNUM PROC NEAR ;读取成绩子函数
PUSH CX
XOR DX,DX ;清0,用于存放成绩
GGG: MOV AH,01H
INT 21H ;键盘字符输入
CMP AL,0DH
JZ RRR ;如果是回车则结束
SUB AL,30H
JB ERR ;小于0则报错
CMP AL,09H
JBE GETS ;如果在0—9之间则存成绩至DX
JMP ERR ;否则报错
GETS: MOV CL,04
SHL DX,CL ;将DX中已有数值左移四位
XOR AH,AH
ADD DX,AX ;紧接着将数据存在DX中低四位
JMP GGG ;跳转继续读取数据
ERR: MOV AH,09H ;显示报错信息
MOV DX,OFFSET ERROR
INT 21H
MOV EMARK,01H ;报错标志置1
RRR: PUSH DX
CRLF ;回车换行
POP DX
POP CX
RET
GETNUM ENDP
CODE ENDS
END START
心得体会:
在为期一周的微机原理课程设计中,通过查阅书籍,上网收集资料以及向老师和同学请教,我完成了老师定下的任务。
在此次课程设计过程中感受颇深。
这一周,可以说是苦多于甜,但是可以学到很多东西,同时巩固了以前所学过的知识。
以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。
但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的程序较复杂,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
在设计过程中遇到了不少的麻烦,最典型的是由于程序相对较大,在用JB,JA等条件跳转语句时出项了超出跳转范围的情况,这就给程序设计带来了一些困难。
由于之前都没遇到过这样的问题,所以刚开始遇到的时候有点棘手,不知道该从哪下手解决此问题,以至于都有了放弃该课题的想法。
但是又觉得不值得,写了这么长的程序就因为这一个小问题而放弃了实在是说不过去,于是就静下新来查阅课本,发现这些条件跳转语句的跳转范围只能在-128B--+127B之间,而无条件跳转指令JMP则不受此约束,于是我添加了一个无条件跳转语句,通过条件跳转语句先跳转到该无条件跳转语句,再通过JMP跳转到需要的地方,于是问题就迎刃而解。
同过这一个小小的问题也暴露出了自身的问题:对课本知识掌握不牢固,只了解指令的基本功能却忽略了它的约束条件。
还有一些问题,比如为了显示方便,需把16进制数转化成10进制数显示,在进行ASCII码值转换时也遇到了问题,A—F不能正确显示,通过与同学讨论也是自己的疏忽导致的。
这不是第一次用汇编语言来写程序,平时做了很多实验,写了很多小程序。
但这次是一个综合的程序,平时的一些程序稍微改动都可以作为子程序用到,这大大方便了我的设计,为我节省了很多的时间。
在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,去找同学讨论一下,收获很大,可以使很多问题迎刃而解。
不可否认,程序任然存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。
我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!
参考文献:
1.张荣标,机械工业出版社,《微型计算机原理与接口技术第二版》
2.张荣标,《微型计算机原理课程设计指导书》
3.李干林,李升等,北京大学出版社《微机原理及接口技术试验指导书》。