




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录课程设计任务书2学生成绩管理系统的设计与实现31.设计内容及要求31.1设计题目31.2设计要求32.设计中使用的关键技术和方法32.1宏汇编32.2子程序结构32.3 BIOS显示中断(INT 10H)32.4 DOS系统功能调用(INT 21H)42.5 本次程序用到的控制转移指令43.设计方案说明53.1程序结构的描述53.2 程序流程图53.3主要数据结构和函数的定义和说明64. 测试及调试过程84.1 调试过程84.2 测试结果85. 设计心得116.参考文献127. 附录:源程序清单12本科生课程设计成绩评定表25课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 题目: 学生成绩管理初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 编写学生成绩信息管理程序,学生信息采用文件存储;2) 要求能实现学生成绩信息的增、删、改、查;3) 程序采用子程序结构,结构清晰;4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC汇编语言程序设计实验教程实验2.42)IBMPC汇编语言程序设计(第2版)例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日学生成绩管理系统的设计与实现1.设计内容及要求1.1设计题目 学生成绩管理系统的设计与实现1.2设计要求进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 编写学生成绩信息管理程序,学生信息采用文件存储;2) 要求能实现学生成绩信息的增、删、改、查;3) 程序采用子程序结构,结构清晰;4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。2.设计中使用的关键技术和方法2.1宏汇编宏是源程序中一段有独立功能的代码。宏定义是用一组伪操作来实现的,其格式如下:macro name MARCO dummy parameter list (宏定义体) ENDM宏指令的调用称为宏调用,宏调用的格式:macro name actual parameter list实元表(actual parameter list)中的每一项为实元,相互之间用逗号隔开2.2子程序结构子程序又称为过程,它相当于高级语言中的过程和函数。过程定义伪操作用在过程的前后,是整个过程形成清晰的,具有特定功能的代码块。其格式如下:procedure name PROC Attribute procedure name ENDP过程的调用格式:call procedure name2.3 BIOS显示中断(INT 10H)本次程序中使用了BIOS显示中断的3个功能,如下表:AH功能调用参数返回参数/注释00设置显示方式AL=03 80*25 16色文本02置光标位置BH=页号,DH=行,DL=列06屏幕初始化或上卷AL=上卷行数,AL=0全屏幕为空白,BH=卷入行属性,CH/CL=左上角的行/列号DH/DL=右下角的行/列号2.4 DOS系统功能调用(INT 21H)本次程序中使用了DOS系统功能调用的个功能,如下表:AH功能调用参数返回参数01键盘输入并回显AL=输入字符02显示输出DL=输出字符07键盘输入(无回显)D AL=输入字符09显示字符串DS:DX=串地址,字符串以$结尾3D打开文件(handle)DS:DX=ASCIZ串地址AL=访问和文件共享方式0=读 1=写 2=读/写成功:AX=文件代号 失败:AX=错误码3E关闭文件(handle)BX=文件代号失败:AX=错误码3F读文件或设备(handle)DS:DX=数据缓冲区地址BX=文件代号 CX=读取的字节数成功:AX=实际读入字节数 AX=0 已到文件尾 失败:AX=错误码40写文件或设备(handle)DS:DX=数据缓冲区地址BX=文件代号 CX=写入的字节数成功:AX=实际写入字节数 AX=0 已到文件尾 失败:AX=错误码42移动文件指针BX=文件代号 CX:DX=位移量AL=移动方式成功:DX:AX=新指针位置 失败AX=错误码4C带返回码终止AL=返回码2.5 本次程序用到的控制转移指令(1)JZ 结果为零(或相等)则转移 格式:JZ OPR 测试条件:ZF=1(2)JL 小于,或者不大于或等于则转移 格式:JL OPR 测试条件:SFOF=1(3)JNZ 结果不为零(或不相等)则转移 格式:JNZ OPR 测试条件:ZF=0(4)JMP 跳转指令 无条件地转移到指令的地址去执行从该地址开始的指令(5)LOOP 循环指令 格式: LOOP OPR 测试条件:(Count Reg0)3.设计方案说明3.1程序结构的描述本程序实现学生成绩的管理,主要功能有插入,查询,修改,删除等。本程序首先定义数据块data,其中包括运行界面的定义;score struc是用来定义一条学生记录中所包含的姓名,学号,成绩等信息;另外用宏定义用来实现函数,show函数用来输出定义好的mess语句,来实现界面;set_p函数用来定义光标位置,以实现不同位置的输入;clear函数用来清屏;newline函数实现换行,这样在主函数中实现换行时直接调用newline即可;show_item用来输出记录;getin函数用来接收从键盘输入的记录。main函数中定义了几个子函数分别用来实现不同的功能,这几个子函数均是调用data中的函数来实现自身功能的,其中insert函数用来插入记录;query用来按姓名查找记录;query1用来按学号查找记录;modify用来实现修改记录;delete用来实现删除记录;list函数可以实现所有记录的显示。3.2 程序流程图main输入字符 i q Q m d e 插入记录insert按姓名查找query删除记录delete修改记录modify按学号查找qiery1 e e e e e 退出exit3.3主要数据结构和函数的定义和说明(1)学生成绩数据结构,包括姓名。学号,和四科成绩,其中姓名定义为13个字节,学号和成绩各占2个字节,所以每条记录占23个字节。score strucnames db 13 dup( )number db 0,0maths db 0,0english db 0,0chinese db 0,0others db 0,0score ends(2)置光标函数,set_p1用于输入记录时的光标位置,它带有一个参数a,用来动态的调整光标所在行,从而输入一条完整的记录;set_p2用于查询记录输入关键字或输出错误信息时的光标位置,set_p3用于程序刚开始时输入控制字符时的光标位置。用到了BIOS功能的调用(INT=10H,AH=2)。 set_p1 macro a mov ah,2 mov dh,a mov dl,36 mov bh,0 int 10h ;bh=page dh/dl=h/l endm(3)清屏函数clear,clear1,clear2均是用来在不同时期清屏,用到了BIOS功能的调用(INT=10H,AH=6)。 clear macro ;all screen mov al,0 mov cl,0 mov ch,0 mov dh,24 mov dl,79 mov bh,7 mov ah,6 ;screen int 10h endm(4)输出记录函数show_item,其中定义了两个变量iloop,w10。iloop用于输出姓名,用到了jl跳转指令从而挨个字节的输出13个自己的姓名;w10利用循环指令loop循环5次来分别输入学号和四门成绩,用到了DOS系统功能调用(INT=21H,AH=2)。(5)接受字符函数 getin,其中定义了四个变量zeroit,lp,input_end,exit。将用于在后面插入子函数insert中调用的get_rec子函数来调用,方可实现记录的输入。(6)插入记录函数insert,先打开文件然后进行写入,写入时先写入姓名,学号和四门成绩将调用子函数get_rec来写入,而get_rec函数又调用接受字符函数 getin来写入记录,用到了DOS系统功能调用(INT=21H,AH=1和AH=3e,3d)等对文件的打开和关闭操作等。(7)查询函数包括按姓名查找和按学号查找,以前者为例, b: mov ah,3fh mov cx,23 mov dx,offset buffer2 int 21h ;read file lea si,buffer2 lea di,buffer1 mov cx,13 ;cx countc: mov al,byte ptrsi cmp al,byte ptrdi jnz b ;not equal inc si inc di loop c 这两个模块实现对姓名的匹配用到了跳转指令jnz和循环指令loop实现对姓名的矮个字符的匹配对照。若匹配成功则输出相应的记录,次记录是保存在buffer2中的。mov buffer2+23,$ show_item buffer2 即可实现记录的正确输出。(8)修改记录函数modify。 read: mov dx,offset buffer2 mov cx,23 mov ah,3fh ;read file int 21h lea si,buffer2 lea di,buffer1 mov cx,13c5: mov dl,byte ptrsi cmp dl,byte ptrdi jnz read inc si inc di loop c5 这两个模块实现姓名的匹配从而找到正确的记录位置,然后调用DOS系统功能INT=21H,AH=42实现文件指针的正确定位,具体为从记录末尾向前移23字节即可,即cx=0ffffh,dx=-23。AH=40用于写入修改后的记录。最后关闭文件即可,如果找不到匹配的记录,则输出错误提示信息“ there is not this student”。(9)删除记录函数delete,和修改记录函数一样先是实现姓名的匹配,然后文件指针正确定位。在此要说明的是,本程序删除记录并不是真正意义上的删除,而是将待删除的记录的学号和成绩全部附为0,从而变相的删除记录,所以在找到正确记录的位置时,只需写入10个0 将原有记录替代即可: mov cx,10 mov dx,offset del mov ah,40h int 21h 其中del为:“del db 10 dup(0)”(10)输出全部记录函数list:调用show_item函数输出一条记录,并利用jmp跳转指令循环输出其他记录,知道记录全部输出完毕。4. 测试及调试过程4.1 调试过程将程序在记事本中编辑完成后,保存在masm文件夹下,格式为.asm。另外在本文件夹下创建一个文本文档score.txt用于保存学生成绩记录。然后打开命令提示符窗口,跳转到masm文件夹下进行操作,首先进行汇编:masm hb;产生二进制的目标文件,如果有错则进行修改只到没有错误为止,然后利用link程序产生exe文件:link hb;最后在建立了exe文件后,就直接从dos执行程序:hb。4.2 测试结果(1)本程序运行界面如下:(2)插入一条记录时(键盘输入i)的界面如下:(3)按姓名查找(键盘输入q)一条记录时的界面如下: 先输入要查找的姓名:如Tom 然后按回车键即会显示相应的要查找的记录,如下图: 按学号查找与其类似,不再展示。 (4)修改一条记录,在输入控制字符“m”后,光标便跳到“name”后便可进行重新录入, 若输入的姓名在记录里面没有,则会在屏幕下方显示出错信息“ there is not this student”。修改姓名为:Tom的记录如下图: 修改后再进行一次对caijun的查询如下图,即可发现记录以改变:(见下页)(5)删除一条记录的界面如下: 在name后输入要删除的记录Tom后,按回车记录即已被删除,学号和成绩即全部为零。(6)显示全部记录的界面如下: 可以看到Tom的记录后面全是零,这是因为上一步中对其记录进行了删除。这些记录全部记录在同目录下的文本文档score.txt里面。5. 设计心得本次课程设计完成的是学生成绩管理系统的汇编实现,采用宏汇编、子程序结构等方式实现。由于这次一次综合性的设计实验,光靠课本上的知识是远远不够的,并且有一定的难度。在老师的指导,同学的帮助,以及上网查询资料后,我顺利的完成了本次课程设计。通过这次课程设计,我对汇编语言程序设计有了更进一层的理解,同时对以前学的组成原理中的一些内容也有了更深的理解。在本次实验中我遇到了很多困难,实验刚开始时,不知从何下手,后来我把老师提供的参考部分通读了一遍,许多题目要求就基本搞懂了。我就按要求来写算法,画出流程图,然后就逐个去实现其中的功能。类似题目的课程设计在C+中里面已经做过,但是在开始做汇编的课程设计时发现非常难,因为汇编是第一次进行学习,然后又要做这么复杂的程序,当时真的 感觉很难,在图书馆查书,上网寻找相关资源后,最后勉强完成任务,程序比较长,通读的时候有点烦,但只要思路清晰了,读起来还是可以的。 本次实验的改进阶段花的时间最多,不过在这个阶段收获也很多,在改进阶段我发现了很多程序设计时需要养成的好习惯。对以后编出更好的程序有很好的启发。 这整个过程让我学到了不少,知识上有了收获,毅力也得到了锻炼,对以后的学习工作都起到了很大的帮助。这一个星期里面将书翻了好多遍,对汇编的知识比以前更熟悉了,相信这肯定是有好处的。我觉得在以后的学习过程中还应该多做这样的设计,它可以让我们把所学的理论用于实践,一方面可以检验并巩固我们所学的内容,另一方面可以让我们在实践中感到所学知识的实用性,从而提高我们的学习兴趣。通过这次课程设计,我的编程能力又得到进一步的提高,同时也培养了我思维能力。总之,这次课程设计不仅丰富了我的理论知识,也加强了我的动手能力,还锻炼了我的思维能力。对于汇编语言程序设计这门课程的学习不能就此结束,它也是我今后学习的基础,并且我目前所学的仅仅是这门课程的入门知识,学无止境。6.参考文献1 沈美明、温冬蝉,IBM-PC汇编语言程序设计(第2版),清华大学出版社,2004年1月出版。2 沈美明、温冬蝉、张赤红,IBM-PC汇编语言程序设计实验教程,清华大学出版社,2003年3月出版。7. 附录:源程序清单data segmentmess1 db student grade management system,0ah,0dh,$mess2 db this is main menu,0ah,0dh,$mess3 db insert (i) please input:,0ah,0dh,$mess4 db modify (m) name :,0ah,0dh,$mess5 db delete (d) number :,0ah,0dh,$mess6 db queryna (q) maths :,0ah,0dh,$mess7 db querynu (Q) english :,0ah,0dh,$mess8 db chinese :,0ah,0dh,$mess9 db exit (e) others :,0ah,0dh,$mess10 db *$mess11 db name Nu Ma En Ch Ot,0ah,0dh,$mess12 db name Nu Ma En Co Ch,0ah,0dh,$mess14 db name Nu Ma En Co Ch,0ah,0dh,$mess13 db list (l),0ah,0dh,$err1 db there is not this student$fname db g:score.txt;具体看hb.asm存在何目录下buffer1 db 23 dup(?)buffeer db 0ah,0dh,$buffer2 db 30 dup(?)buffer3 db 8 dup(0)handle dw ?del db 10 dup(0)x db ?data endsshow macro addrslea dx,addrsmov ah,9 ;display char dxint 21hendmset_p1 macro a ;输入记录是光标位置arrow target /insertmov ah,2mov dh,amov dl,36mov bh,0int 10h ;bh=page dh/dl=h/lendmset_p2 macro ;查询记录输入关键字或输出错误信息时的光标位置querymov ah,2mov dh,12mov dl,0mov bh,0int 10hendmset_p3 macro ;程序刚开始时输入控制字符时的光标位置start localmov ah,2mov dh,1mov dl,30mov bh,0int 10hendmclear macro ;清屏函数clear,clear1,clear2均是用来在不同时期清屏all screenmov al,0mov cl,0mov ch,0mov dh,24mov dl,79mov bh,7mov ah,6 ;screenint 10hendmclear1 macro ;left screenmov al,0mov bh,7mov ch,4mov cl,36mov dh,10mov dl,79mov ah,6int 10hendmclear2 macro ;down screenmov al,0mov bh,7mov ch,12mov cl,0mov dh,24mov dl,79mov ah,6int 10hendmnewline macro ;=enterpush axpush dxmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hpop dxpop axendmshow_item macro addrs ;输出记录函数local iloop,w10push bxpush cxmov bx,0iloop: mov dl,addrsbx ;display charmov ah,2int 21hinc bxcmp bx,13jl iloopmov cx,5w10: mov dl, mov ah,2int 21hmov dl, mov ah,2int 21hmov dl, mov ah,2int 21hmov dl,addrsbxmov ah,2int 21hinc bxmov dl,addrsbxmov ah,2int 21hinc bxloop w10newlinepop cxpop bxendmgetin macro addrs,count2 ;接受字符函数write charlocal zeroit,lp,input_end,exitpush bxpush axmov bx,0zeroit: mov addrsbx, inc bxcmp bx,13jl zeroitmov bx,0lp: mov ah,1 ;keyboard input and display alint 21hcmp al,0ahjz input_endcmp al,0dhjz input_endmov addrsbx,alinc bxcmp bx,count2jl lpinput_end: cmp al,0dhjz exitcmp al,0ahjz exitmov ah,7int 21hjmp input_endexit:pop axpop bxendmcode segmentmain proc farassume cs:code,ds:data,es:datastart:mov ax,datamov ds,axmov ah,0 ;set display waymov al,3int 10hclearshow mess1show mess2show mess13show mess3show mess4show mess5show mess6show mess7show mess8show mess9newlineshow mess10set_p3w: mov ah,7int 21hcmp al,ijnz n1call insertjmp wn1: cmp al,mjnz n2call modifyjmp wn2: cmp al,djnz n3call deletejmp wn3: cmp al,qjnz n4call queryjmp wn4: cmp al,ljnz n5call listjmp wn5: cmp al,Qjnz n6call query1jmp wn6: cmp al,ejz exitfjmp wexitf:mov ah,4chint 21hretmain endpinsert proc nearpush axpush bxpush cxpush dxmov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axclear1set_p1 4call get_recmov cx,0 ;move file pointer to endmov dx,0mov al,2mov ah,42hint 21hmov cx,23 ;write filemov dx,offset buffer1mov ah,40hint 21hmov ah,3ehint 21hset_p3pop dxpop cxpop bxpop axretinsert endpget_rec proc near;写入的子函数push axpush bxgetin buffer2,13mov bx,0mov cx,13continue: mov al,buffer2bxmov buffer1bx,alinc bxloop continueset_p1 5getin buffer2,2mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxset_p1 6getin buffer2,2mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxset_p1 7getin buffer2,2mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxset_p1 8getin buffer2,2mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxset_p1 9getin buffer2,2mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxpop bxpop axretget_rec endpquery proc near ;query by namepush axpush bxpush cxpush dxclear1clear2mov dx,offset fnamemov al,2mov ah,3dh ;open fileint 21hmov bx,axset_p2getin buffer1,13lea dx, mess12mov ah,9 ;display char dxint 21hb:mov ah,3fhmov cx,23mov dx,offset buffer2int 21h ;read filelea si,buffer2lea di,buffer1mov cx,13 ;cx countc:mov al,byte ptrsicmp al,byte ptrdijnz b ;not equalinc siinc diloop cmov buffer2+23,$show_item buffer2mov ah,3eh ;close fileint 21hpop dxpop cxpop bxpop axretquery endpquery1 proc near ;query by numberpush axpush bxpush cxpush dxclear1clear2mov dx,offset fnamemov al,2mov ah,3dh ;open fileint 21hmov bx,axset_p2getin buffer1,2lea dx, mess14mov ah,9 ;display char dxint 21hd:mov ah,3fhmov cx,23mov dx,offset buffer2int 21h ;read filelea si,buffer2+13lea di,buffer1mov cx,2e:mov al,byte ptrsicmp al,byte ptrdijnz dinc siinc diloop emov buffer2+23,$show_item buffer2mov ah,3ehint 21hpop dxpop cxpop bxpop axretquery1 endpmodify proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dh ;open file al=2/r/wint 21hmov bx,axmov handle,axcall get_rec ; contact is in buffer1read:mov dx,offset buffer2mov cx,23mov ah,3fh ;read fileint 21hlea si,buffer2lea di,buffer1mov cx,13c5:mov dl,byte ptrsicmp dl,byte ptrdijnz readinc siinc diloop c5mov bx,handl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 面试职业能力测试题及答案
- 2025年新版手卫生知识试题及答案
- 2025年【电工证】模拟考试题及答案
- 高中历史原创真题及答案
- 屠宰原料多元化采购创新创业项目商业计划书
- 人教版初中道德与法治七年级下册期中重点突破试卷及答案
- 高质量公司注销合同模板(3篇)
- 2025年多功能气象卫星接收系统项目立项申请报告
- 矿井测风工中秋节后复工安全考核试卷含答案
- 阴阳极制作工中秋节后复工安全考核试卷含答案
- 工伤受伤经过简述如何写
- 银行现金取款申请书
- 人事外包招聘代理合同
- 数字经济学-课件 第3章 数字技术
- AI引领时尚设计新潮-个性化需求的新一代解决方案
- 高二数学直线倾斜角与斜率同步练习题
- 2024-2030年全球及中国热障涂层(TBC)行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 大轻质泡沫混凝土研究报告
- 室内装修工程质量保障措施方案
- 闽教版小学3-6年级英语词表
- Unit2写作课课件(2024)七年级英语上册
评论
0/150
提交评论