微机基础原理课程教学设计之学生成绩管理方案系统设计.docx
《微机基础原理课程教学设计之学生成绩管理方案系统设计.docx》由会员分享,可在线阅读,更多相关《微机基础原理课程教学设计之学生成绩管理方案系统设计.docx(30页珍藏版)》请在冰点文库上搜索。
微机基础原理课程教学设计之学生成绩管理方案系统设计
1设计任务及要求
1.1问题描述
学生成绩信息管理系统,显示的信息包括:
学生姓名(Name)、数学(Math)、英语(English)、计算机(Computer)和中文(Chinese)成绩;实现的功能包括浏览、查询和退出;此外,程序设有操作提示,包括提示输入和输出,以及在出现错误时界面出现提示,而界面上各功能用菜单式显示。
1.2设计说明
学生成绩管理是个类似数据库形式的管理程序,因此程序应该包括用户操作的主界面,用于存储数据的库以及能提供不同操作的选择跳转。
考虑到用内存作暂时的数据库比较占用内存资源和不适合做长期的管理,所以选用一个指定的记事本来存储,用户界面提示用户进行选择操作并可以浏览、查询以及退出操作界面。
2方案介绍
2.1界面设计
界面实现人机交互,菜单式的界面予以用户提示信息,设置光标显示,可以在光标处输入字符并显示,在信息输出、输入错误、以及退出时有显示提示语句。
为美观界面,可在界面上作相应的图案以输出。
界面的显示调用清全屏(clear)、换行(newline)和显示(show),要显示的字符以行为单位分别定义在数据段,并调用set_p3显示光标,以设置输入位置,在输入选择功能成功后,被选择的功能字符后会显示相应的一个字符单位的,同时带颜色的图形,作为标记,此外,当调用另外的功能时,还要消去原标记是调用清右边程序(clear1),以防同时显示2个标记。
而在实现不同的功能时,除退出调用的清全屏外,浏览和查询输出信息时调用的是清下屏(clear2),此外,还要注意调用set_p2来设置输出信息显示时光标的位置。
2.2程序设计
显示主菜单界面后,在光标位置接收用户的操作字符,并判断操作类别:
浏览/查询/退出,以调用相应的子程序。
整个程序采用主程序调用子程序的方法。
主程序完成菜单的显示和功能的选择,而子程序完成各独立功能的实现。
2.3功能设计分析
设计浏览子程序时,先打开文件,然后读一个记录,并通过调用宏show_item将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,则关闭文件返回主程序。
设计查询子程序时,首先保留现场,清除下面屏幕,打开fname指定文件并保留句柄。
将光标设置,用宏getin获取最多15个字符的输入到buff1。
读23个字节长的记录到buff2,再将buff1和buff2比较是否相同,若不同,再继续读23个字节文件;若相同,则显示所寻找的记录,最后关闭文件,恢复现场。
3软件设计说明
3.1软件思想
设计学生成绩管理系统的整个程序采用了主程序调用子程序的方法。
主程序完成菜单的显示,而子程序完成浏览、删除及退出功能的方法实现。
3.2程序说明
mess1-mess9、bye、err1、err2为显示时调用的字符串
show:
用来指定地址的显示字符串,有一个地址参数。
set_p2:
将光标置于(10,0)处,使用了BIOS中断10H的2号功能。
set_p3:
将光标置于(7,54)处。
clear:
清除整个屏幕,用BIOS中断10H的7号功能实现,范围是从坐标(0,0)到(24,79)将整个区域变为空白。
clear1:
清除右半部分屏幕,清除范围是从坐标(4,36)到(6,50)。
clear2:
清楚下半部分屏幕,清除范围是从坐标(10,0)到(24,79)。
new_line:
回车换行。
show_item:
显示记录内容。
执行后先显示名称,然后依次显示4项功课的成绩,各项成绩间空3个空格,最后换行。
这个宏包含的语句较多如果每次都用语句实现非常冗长,使用宏后就很简洁,充分体现了使用宏的优点。
getin:
获取学生信息。
这也是一个使用频繁的宏,其中含有很多的指令,含addrs和count2两个参数,addrs是存放信息的数据段位置,count2是接收的字符数。
list:
作用是显示文件中的记录,先清除显示区域和记录的标题,打开文件,读取输入的一个记录的内容放在缓冲区buff1中,并判断是否到了文件尾,如果不是,则显示这条记录,循环读取直到文件结束,最后关闭程序,恢复现场。
query:
功能是查询记录。
先清除屏幕,打开文件。
用宏getin获得15个字节的姓名字符,放在buff1中。
读取一条记录,将其放在buff2中,然后和buff1中的内容进行比较,如果不同,再读取下一个记录,直至读完关闭文件。
如果姓名相同,则把该记录输出。
若查找不到,则输出提示错误语句。
3.3中断说明
BIOS中断INT10H服务程序,与DOS系统功能中断INT21H。
使用中断服务程序时,先指定AH寄存器的值,该值表示欲调用的功能。
在本次设计中调用的功能,设定相关的入口参数,得到功能调用后的出口参数可分别参考下表,表1、表2。
表1:
BIOS系统功能调INT10H
AH
功能
调用参数
返回参数/注释
0
设置显示模式
AL=02H
显示模式:
80×2516色文本
2
用文本坐标下设置光标位置
BH=页号
DH=行
DL=列
6
初始化屏幕或向上滚屏
AL=滚动行数(0—清窗口)BH=属性
CH=左上角行号
CL=左上角列号
DH=右下角行号
DL=右下角列号
9
在光标位置显示字符及其属性
BH=显示页
AL=字符
BL=属性
CX=字符重复次数
表2:
DOS系统功能调INT21H
AH
功能
调用参数
返回参数
01
键盘输入并回显
AL=输入字符
02
显示输出
DL=输出字符
07
键盘输入(无回显)
AL=输入字符
09
显示字符串
DS:
DX=串地址
'$'结束字符串
3D
打开文件
DS:
DX=ASCIIZ串地址
AL=0读
=1写
=2读/写
成功:
AX=文件代号
错误:
AX=错误码
3E
关闭文件
BX=文件代号
失败:
AX=错误码
3F
读文件或设备
DS:
DX=数据缓冲区地址
BX=文件代号
CX=读取的字节数
读成功:
AX=实际读入的字节数
AX=0已到文件尾
读出错:
AX=错误码
4C
带返回码结束
AL=返回码
4程序与其流程图
4.1主程序段、主流程图:
图4-1主程序流程图
主程序段:
1.首先设计页面的显示:
movah,0
moval,2
int10h;设置界面80*25,16色文本
clear
newline
newline
showmess1
showmess2
showmess3
showmess4
showmess5
showmess6
showmess7
set_p3;调用设置界面光标位置
2.从光标处读取字符判断,选择相应的功能,此外,当输入字符不符合菜单提示的字符时,输出“输入错误”的提示,并等待下次输入反应:
w:
movah,1
int21h;设置成输入回显
cmpal,'L';判断是否调用list功能
jnzn3
……;在list菜单后显示指定标记
calllist
jmpw
n3:
cmpal,'Q';判断是否调用query功能
jnzn7
……;在query菜单后显示指定标记
callquery
jmpw
n7:
cmpal,'E'
jzexitf
set_p2
showerr1
set_p3
jmpw
3.菜单中功能被选中后的标记,以list功能选中为例:
clear1;清右屛
movdx,0472h;设置显示位置
movah,2
int10h
moval,4;设置输出图形(如:
方块)
movbl,54h;设置输出颜色
movcx,1
movah,9
int10h
4.2浏览程序段与流程图:
清下屏
输出内容标题
读取文件中
的一个记录
ax=0?
输出记录
返回主程序
开始调用list
宏list程序段,首先,为以防有前操作在下屏幕显示,所以要清下屏,设置光标位置后,输出“请输入”的提示语句,主要用下段程序实现浏览功能。
movdx,offsetfname
moval,2;打开文件
movah,3dh
int21h
movbx,ax
again:
movdx,offsetbuff1
movcx,23;设定读取字符数
movah,3fh
int21h;读文件
cmpax,0 ;判断循环条件
jzp
show_itembuff1
jmpagain
p:
movah,3eh
int21h;关闭文件
set_p3
popdx N
popcx
popbx
popax
retY
图4-2浏览程序流程图
4.3查询程序段与流程图:
查询功能实现是通过检验输入字符是否为“Q”,当输入正确时要在利用宏set_p2设置的光标处显示提示信息后,清下屏,以防有前操作占用界面空间。
等待用户输入要查询学生的姓名,只有在输入正确后,才能显示其成绩,若输入姓名与文件中各姓名不符,则输出“错误”提示语句,不输出成绩。
无论是在查询功能实现后,还是查询失败,光标返回到输入处,则此时可重新选择菜单中的功能。
主要程序段与流程图如下:
movdx,offsetfname
……打开文件,设置显示内容光标处,输出提示
getinbuff1,15
leadx,mess8;标题
movah,9
int21h
b:
movah,3fh
movcx,23
movdx,offsetbuff2
int21h;读文件cx=读的字节数
cmpax,0;判断是否查询到文件结尾,即查询失败
jzexit1;查询失败则跳转返回
leasi,buff2
leadi,buff1
movcx,15
loop1:
moval,byteptr[si]
cmpal,byteptr[di]
jnzb
incsi
incdi
looploop1
mov[buff2+23],'$'
show_itembuff2
exit:
movah,3eh
int21h
……关闭文件
set_p3;回输入位置重新选择
ret
exit1:
clear2;查询失败,则清下屏
showerr2提示“输入错误”语
jmpexit句,调用exit返回
Y
N
N
Y
4.4退出程序段与流程图:
当在显示菜单中输入“E”时,选择退出程序功能,此时调用屏幕全清,宏clear,并输出友好语句bye退出。
其功能程序段与流程图如下:
exitf:
clear
newline
newline
showbye
movbx,0100fh;信息显示延时
e0:
movcx,0ffffH
e1:
loope1
decbx
jnze0
movah,4ch
int21h
ret
图4-4退出功能流程图
5程序功能说明和结果分析
5.1浏览功能
当在显示界面上输入“L”时,菜单中List(L)后有标记,且屏幕下端显示文件内容,如图5-1。
图5-1浏览功能实现界面
5.2退出功能
当在显示界面上输入“E”时,界面显示bye语句,如图5-2。
5.3查询功能
当在显示界面上输入“Q”时,界面提示“请输入”语句,输入正确时,界面下端显示查询的成绩如图5-3,否则输出“输入错误”,即查询失败,如图5-4。
图5-3查询成功界面显示成绩
图5-4输入错误时,查询失败界面
5.4功能选择错误
当在显示界面上输入不是“L”/“Q”/“E”时,界面显示err1语句,如图5-5。
6收获及心得体会
在我印象中,课程设计在对经一学期学习的理论课程的结合实际的学习,就此次课程设计的题目而言,通过对这一学生成绩管理系统的程序设计,使我对汇编语言的基本知识更加了解,同时也让我认识到汇编语言的知识范围与实际应用值广大。
此外,在课程设计完成过程中通过和小组成员的交流,也增加了合作的技巧。
同时,还认识到查阅相关的资料也是完成设计不可欠缺的一部分。
课程设计让自己学到了一些课本上没有的东西,一定程度上拓宽了自己的知识面,培养了自己独立思考和解决问题的习惯,还增加了学好汇编语言的信心。
微机原理与接口技术课程设计是汇编语言与实践相结合的综合应用。
在设计中,参考资料,发现其源程序中调用了中断程序,例如int10h与int21h,结合利用数据段,可以实现文件的打开、关闭、读取,数据的显示、输出,光标的定位等等。
在这次的课程设计中,我也遇到了不少的挫折,例如直到答辩时,我所设计的程序在查询输入错误时无法进行跳转,虽然这时有种书到用时方恨少的感觉,但是在答辩后调试时最终是解决了这项问题。
虽然结合课本,会想出一些方法去实现,但是经过调试,发现这时想法是无法解决功能的欠缺。
但是结合这次设计中频繁使用的BIOS中断,想到在读取文件时,隐含的使文件号的值赋值给了数据段的ax,所以在文件读取完时,ax=0,将这点作为查询文件完毕的判断依据,即未查询到输入记录时,把文件读取完毕了,则查询失败。
汇编在实际软件开发中的作用和地位是非常重要的,利用课程设计,我们可以很好的将理论与实际生活中的应用、设计相结合,联想。
增强了汇编的使用能力,是我们课程设计的目的,相信在未来的就业问题中遇到的设计问题也会与此有异曲同工之处的。
在这次课程设计中,我真正体会到了理论学习和课外涉猎的重要性,希望以后在学习时认真弄懂,不要不求甚解。
与此同时,增加课外涉猎,开阔思维,培养创新思维。
参考文献
[1]周佩玲,彭虎,傅忠谦.微机原理与接口技术(基于16位机).北京:
电子工业出版社.2005
[2]王爽著.汇编语言(第2版).北京:
清华大学出版社.2008
[3]艾德才等编著.微型接口技术实用教程.北京:
清华大学出版社.2002
[4]王永山等编著.微型计算机原理与应用.西安:
西安电子科技大学出版社.1999
[5]温冬蝉,沈美明.IBMPC汇编语言程序设计(第2版).北京:
清华大学出版社.2002
[6]姚燕南,薛均义主编.微型计算机原理与接口技术.北京:
高等教育出版社.2004
附录:
源程序:
datasegment
mess1db'***********StudentGradeManagementSystem******',0ah,0dh,'$'
mess2db'/`\/`\Thisismainmenu:
*',0ah,0dh,'$'
mess3db'(/\\-//\)List(l)*',0ah,0dh,'$'
mess4db')66(Query(q)*',0ah,0dh,'$'
mess5db'>{=Y=}mess6db'/-^-\Pleaseenterthewordtochoose(L/Q/E):
*',0ah,0dh,'$'
mess7db'.(_)""-(_).***************************',0ah,0dh,'$'
mess8db'NameMathEnglishComputerChinese',0ah,0dh,'$'
mess9db'Entertherightnametoquery:
',0ah,0dh,'$'
byedb'Thanksforuseourprogram!
',0dH,0aH,0dH,0aH,'Bye~Bye~$'
err1db'wrongword,pleaseentertherightword!
$'
err2db'thereisnothestudent,returntomenu!
$'
fnamedb"d:
\Masm\score.txt"
buff1db22dup(?
)
buff2db30dup(?
)
dataends
;---------------------------------定义数据段完毕---------------------
showmacroaddrs;显示
leadx,addrs
movah,9
int21h
endm
set_p2macro;设置界面光标位置(10,0)
movah,2
movdh,10
movdl,0
movbh,0
int10h
endm
set_p3macro;设置界面开始光标位置(7,54)
movah,2
movdh,7
movdl,54
movbh,0
int10h
endm
clearmacro;清屏
pushax
pushbx
pushcx
pushdx
moval,0
movcl,0
movch,0
movdh,24
movdl,79;上滚窗口右上角(24,79)
movbh,14;颜色属性
movah,6;入口参数
int10h
popdx
popcx
popbx
popax
endm
clear1macro;清右屏
moval,0
movbh,0h
movch,4
movcl,34
movdh,6
movdl,50
movah,6
int10h
endm
clear2macro;清下屏
moval,0
movbh,7
movch,10
movcl,0
movdh,24
movdl,79
movah,6
int10h
endm
newlinemacro;换行
pushax
pushdx
movdl,0dh
movah,2
int21h
movdl,0ah
movah,2
int21h
popdx
popax
endm
show_itemmacroaddrs
localiloop,w10
pushbx
pushcx
movbx,0
iloop:
movdl,addrs[bx];显示字符
movah,2
int21h
incbx
cmpbx,15
jliloop
movcx,4
w10:
movdl,''
movah,2
int21h
movdl,''
movah,2
int21h
movdl,''
movah,2
int21h
movdl,addrs[bx]
movah,2
int21h
incbx
movdl,addrs[bx]
movah,2
int21h
incbx
loopw10
newline
popcx
popbx
endm
getinmacroaddrs,count2;读取数据
localzeroit,lp,input_end,exit
pushbx
pushax
movbx,0
zeroit:
movaddrs[bx],''
incbx
cmpbx,15
jlzeroit
movbx,0
lp:
movah,1
int21h
cmpal,0ah
jzinput_end
cmpal,0dh
jzinput_end
movaddrs[bx],al
incbx
cmpbx,count2
jllp
input_end:
cmpal,0dh
jzexit
cmpal,0ah
jzexit
movah,7
int21h
jmpinput_end
exit:
popax
popbx
endm
;------------------------------开始定义代码段--------------------------
codesegment
mainprocfar
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
movah,0
moval,2
int10h;设置界面
clear
newline
newline
showmess1
showmess2
showmess3
showmess4
showmess5
showmess6
showmess7
set_p3;调用设置界面光标位置
w:
movah,1;设置成输入回显
int21h
cmpal,'L';判断是否实现list功能
jnzn3
;------------------------选中菜单后显示标记-------------------------
clear1
movdx,0372h;设定显示位置
movah,2
int10h
moval,3;设定输出图形心形
movbl,24h;设定输出图形颜色
movcx,1
movah,9
int10h
calllist
jmpw
n3:
cmpal,'Q';判断是否实现查询功能
jnzn7
;----------------------功能选中后显示标记------------------------
clear1
movdx,0472h;设定显示位置
movah,2
int10h
moval