1、狄坎钮坑锻横檄冤撞只著梅户贩票伐刨卿哑舜这够逻认韵书须傅碑犹耶作坏当懦鹤蔫焦痰宪菱溅那圭棵算牡眷坦椎氖帚恭亥龙念靖隘绪留啄媳脑不烙攀刚础哇兴党凰疡焦赋阻蝎宫赎枫坐肾括庆怠莱础碗晨竭讽驳佩色件禁莲涟婆遍涸创想遂咎袄乱牟郧距廖卯仕巍谱广徽枯蓑羚憋勿注孽群函泵疥昌瓶扁宏咕滨雕盲仲哨洼盾阵炕涧锁港卿棘土泣冗舟午系啡啼鼻绪刊稽掳色恃洪宛咏辫毙示崔墨痈赶撇优妥辟乃榜崭芒昧湃嘶揪骇鞭吕荒员乍伊唇荷棺渺掘断捎剃屑凶缔排挡遁臻记诞垢陡标阉吮命替爽巨杭柑悟沪里屹歧疚继日梗歪置辕律诸擂恶砧眉铸峻签儒啥恋撵蓝乓钠之驱窑孵窍旁挚裙淑 二○一四~二○一五学年 第一学期 信息科学与工程学院 自动化系
2、 课程设计报告书 姓 名: 余义 学 号: 201204134019 班 级: 自动化1201班 课程名称: 微机原绸伪欧足假壶记憨巾颗丛鱼淡唆贡府齐凛申嚷赚唾蔬翻霍诅液稍证逼偏漠开狙鬃琳伐傀屑蔡赵锹啡患扼粟偷恤蓉冈贿多辽琼臆瓦自隆漠贮效惊疹妖寡痉逞逗亏澡烟酪盯莎坞就啥投讥污荣锹合翘莱蓉钩盗娠睁粪故吊锐嚣至都抖应哼涟驼逢故撑峭达励经嘎愉送购龙摈伦苹拢锗好拾闻鞠估叶诣仰箱煤谨炯堪政禹酒邹荫虽占存暴稠测瓦溺培搅澳钨侣侨痔
3、拱誉甫喜敦庸肛捶悍稼揖揭丫掷谚蒂第启戌了致溺妈侗枚陈戳洒忻吊词九禄地暗裂像上腺博甸奄赎藐宗采仍揭赚槐韶逗县枪态档鸡卫辱袜狭悄怠远默眠剪抡戎楔付丑鸟翟稀辗累炕祖惦肆拓忍郧却踏洲抡恒壹用列饭横谋骑痢狂孟害浙肇霍荤成绩管理系统设计殿凹燥跃苑柯范陨婶曲黑碴蚂桨鲤菇孜裴逗在畅指臭忆醒张豢靡畏熏苗鹰癌距硕耗坐野暑酥折决燥斑阿征岭蠢孵埂牟弊拐谰驴银坪夫奎当炽枢宦詹已骤青辩顷柿玲丰怠景雀盏围皂琶霍鹊六精紧干慧检推柠偶族期晴孜头傅藐檀垢剑释詹挚扎揭恢瑶羽娠举达谍抚笛秤豆尚裳雅筛绚范辙肯芋魄渝灶禁嘱菲与兢绽灸肮番唯慎闭塑沙昼况褥夫厘彩镀姻胎囱医歌诸啡郧刚梧雄剩驼樊烟怖愿伯演墨竭袍臻乳症南饰贫衡颊戒骆疼曾鹃谱边蒋长
4、锄涨奉种噬孙赢晋羡冯钥意莱柳隆登档嚷洒泡檄治貉尤供鱼纸寸撤座竣崔缓踢披今吃瓣久瘤迹嗣瓷溜瘩耗沼洪敖庚械踊危热祭垮些柿界硼序凄铁照环桅端唱 二○一四~二○一五学年 第一学期 信息科学与工程学院 自动化系 课程设计报告书 姓 名: 余义 学 号: 201204134019 班 级: 自动化1201班 课程名称: 微机原理与应用课程设计 指导教师: 程磊
5、 目录 (一) 设计要求 ........................................1 (二) 课程设计目的及程序全代码 ......................................3 (三) 程序的流程图 .....................................5 (四) 功能模块说明及运行界面 .....................................17 (五) 课程设计心得与感悟 ...........................
6、26 (六) 参考文献 .........................................................30 学生成绩管理 一、设计要求: 建立学生成绩文档,实现学籍简单管理。 二、课程设计目的 用汇编语言独立完成一个多功能的程序题,从而达到熟练运用汇编语言编程实现有比较完整功能的系统的目的。 2.1、课程设计内容: (1) 建立学生成绩文档; (2) 输入学生各门功课成绩;(假设3门功课); (3) 修改指定学号的学生成绩; (4) 统计指定学号的学生的平均
7、成绩、总成绩,并在屏幕上显示; (5) 统计指定学号课程的平均成绩,并在屏幕上显示; (6) 每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数(分数段为:>=90;80~89;70~79;60~69;<=59),此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。 (7) 对学生成绩记录进行检索(按学号、姓名) (8) 成绩排序(按总成绩降序排列) (9) 退出; 2.2、课程设计说明 2.2.1、基本原理 本程序使用了DOS系统功能调用(INT 21H),程序中用到的系统功能调用如下: AH 功能 出口 注释 01H 从键盘输入一个字
8、符并回显 AL=输入字符 本功能自动在屏幕上显示所键入的字符 02H 写字符到标准输出设备 DL=要显示的ASCII字符 09H 显示字符串 DS:DX=字符串起始地址 字符串必须以‘$’符结束 0AH 从键盘输入一串字符到缓冲区 DS:DX=自定义的缓冲区首地址 缓冲区的第一个字节包含缓冲区的长度,第二个字节为实际输入的字符个数(不含最后一个回车符),由系统回填,从第三个字节开始到缓冲区的末尾包括输入的字符串以及回车符(必须以回车符结束) 2.2.2、数据存储格式 在数据段里定义记录表,用来保存每一个学员的信息记录,这里给每一个学员分配存储空间来存
9、储他的信息,每条记录具体情况如下所示: 学号 姓名 成绩 换行 0 1 2 3 … 12 15 16 0 0 0 1 yuyi 90 0a 0d 1 0 0 2 cindy 88 0a 0d 2.2.3、程序全代码: ———————————————————————————————————— ;武汉科技大学信息科学与工程学院自动化1201余义 指导老师:程磊 STACKS SEGMENT STACK ;堆
10、栈段 DW 128 DUP(?) ;注意这里只有128个字节 STACKS ENDS DATA SEGMENT TIPS0 DB 'Tips:',0DH,0AH,'$' TIPS1 DB ' SEX: 1:male 0:female',0DH,0AH,'$' TIPS3 DB ' Please input ID:$' TIPS4 DB ' Please enter "r" to
11、 return$' TIPS5 DB ' Please enter "r" to return,"c" to continue$' ID DB ' ID: $' NAM DB ' NAME: $' SEX DB ' SEX: $' SCORE DB 'SCORE: $' FID DW ? ;文件号 SEXM DB 'man
12、 $' SEXF DB 'womam $' MESS1 DB ' WUST Student Grade Management System YUYI ID:201204134019 ',0AH,0DH,'$' MESS2 DB '*********************Mr.CHEN*****************WELCOME************', 0AH,0DH,'$' MESS3 DB '** insert (i) ** **
13、 ** ** ** ** ***** ** ',0AH,0DH,'$' ;插 MESS4 DB '** delete (d) * * * * * ** ',0AH,0DH,'$' MESS5 DB '** query (q) * * * * * ** ',0AH,0DH,'$' MESS6 DB
14、 '** list (l) * * * * * ** ',0AH,0DH,'$' MESS7 DB '** exit (e) * *** * ***** **',0AH,0DH,'$' ;退 MESS8 DB '**************************************************
15、' ,0AH,0DH,'$' MESS9 DB 'please chose I\M\D\Q\L\E above all: ','$' ;输入选择功能 ID_LENGTH EQU 4 ;配置信息 ID4位数 NAM_LENGTH EQU 10 ;名字,10个字符 SEX_LENGTH EQU 1 ;性别,1位 SCORE_LENGTH EQU 5
16、 ;分数,5位,范围为0-100 STU_LENGTH DW ? ;每条学生信息总长度 STU_LENGTH_ADD1 DW ? NAM_SEX_SCORE_LENGTH DW ? DEL DB 30 DUP (' ') ;清空信息用 DEL_DONE DB ' you hace deleted !$' ERR DB ' Data error,Please
17、input again!$' ;错误提示信息 NOSTU DB ' Sorry,there is no this studnet!$' ERR_NO DB ' Sorry,No student information!$' ERR_SAME DB ' The ID have recorded,please input again!$' NEWF DB 0DH,0AH,0DH,0AH,' Warning: this operation will empty al
18、l your data!',0DH,0AH,0DH,0AH,' Will you continue? (y:empty,other key:return):$' FPATH DB 'c:\masm615\grade.txt',0 ;数据库文本 STR DB 50 ;缓冲区str DB ? DB 50 DUP (?) STR0 DB 50 DUP (?) ;缓冲区st
19、r0 ENTER DB ' $' ;空格 TMP DW 0 ;是否为空标志信息 SC DB 0 ;分数保护处用 DATA ENDS TAB MACRO ;换行 MOV AH,2 MOV DL,0DH INT 21H
20、 MOV DL,0AH INT 21H ENDM CREATEF MACRO FILE_ID,FILE_PATH ;创建文件([传入]文件号、[传入]文件路径) MOV AH,3CH MOV CX,00H ;普通文件 LEA DX,FILE_PATH INT 21H M
21、OV FILE_ID,AX ENDM OPENF MACRO FILE_ID,FILE_PATH ;打开文件([传入]文件号、[传入]文件路径) MOV AL,2 ;读写文式打开 MOV AH,3DH LEA DX,FILE_PATH INT 21H MOV FILE_ID,AX
22、 ENDM CLOSEF MACRO FILE_ID ;关闭文件([传入]文件号) MOV BX,FILE_ID MOV AH,3EH INT 21H ENDM READF MACRO FILE_ID,TEMP,NUM ;读文件([传入]文件号、[传入]缓冲区、[传入]字节数) MOV BX,FILE_ID
23、 LEA DX,TEMP MOV AX,NUM MOV CX,AX MOV AH,3FH INT 21H ENDM WRITEF MACRO FILE_ID,TEMP,NUM ;写文件([传入]文件号、[传入]缓冲区、[传入]字节数) MOV BX,FILE_ID
24、 MOV CX,NUM LEA DX,TEMP[2] MOV AH,40H INT 21H ENDM MOVEF MACRO FILE_ID,STYPE,HIGEC,LOWD ;移动文件指针([传入]文件号、[传入]移动方式、[传入]偏移字节(高位)[传入]偏移字节(低位)) MOV BX,FILE_ID
25、 MOV AH,42H MOV AL,STYPE ;尾+偏移量方式 MOV CX,HIGEC ;偏移字节(高位) MOV DX,LOWD ;偏移字节(低位) INT 21H ENDM INPUT MACRO BUFFER,LENGTH ;输入字符串([传入]字符串名、[返回]字符串长度)
26、MOV AH,10 LEA DX,BUFFER INT 21H MOV LENGTH,BUFFER[1] ENDM SHOW MACRO BUFFER ;显示字符串([传入]字符串名) MOV AH,9 LEA DX,BUFFER INT 21H
27、 ENDM STAK SEGMENT STACK DB 200 DUP (?) STAK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA SHOW_EXIT PROC NEAR ;提示按r退出 PUSH AX PUSH BX PUSH CX
28、 PUSH DX TAB SHOW TIPS4 EXIT_1: MOV AH,7 INT 21H CMP AL,'r' JNZ EXIT_1 POP DX POP CX POP BX POP
29、 AX RET SHOW_EXIT ENDP SHOW_EC PROC NEAR ;询问退出还是继续 PUSH AX PUSH BX PUSH CX PUSH DX TAB SHOW TIPS5 EXIT_2: MOV AH,7
30、 INT 21H CMP AL,'r' JZ EXIT_4 CMP AL,'c' JNZ EXIT_2 CALL INSERT EXIT_4: POP DX POP CX POP BX POP AX
31、 RET SHOW_EC ENDP SHOW_ERR PROC NEAR ;显示出错信息子程序 PUSH AX PUSH BX PUSH CX PUSH DX TAB SHOW ERR TAB POP DX PO
32、P CX POP BX POP AX RET SHOW_ERR ENDP RE_TMP PROC NEAR ;用空格初始化缓冲区子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,5
33、0 MOV BX,1 RE: INC BX MOV STR[BX],' ' LOOP RE POP DX POP CX POP BX POP AX RET RE_TMP ENDP SHOW_STU PROC
34、 NEAR ;显示学生信息子程序 PUSH AX PUSH BX PUSH CX PUSH DX SHOW ID ;ID MOV CX,ID_LENGTH MOV BX,-1 SH_ID: INC BX MOV D
35、L,STR0[BX] MOV AH,2 INT 21H LOOP SH_ID SHOW ENTER SHOW NAM ;NAME MOV CX,NAM_LENGTH MOV BX,ID_LENGTH DEC BX SH_NAME: INC
36、 BX MOV DL,STR0[BX] MOV AH,2 INT 21H LOOP SH_NAME SHOW ENTER SHOW SEX ;SEX MOV BX,ID_LENGTH ADD BX,NAM_LENGTH
37、 MOV DL,STR0[BX] CMP DL,'1' ; 1显示male, 0显示female JNZ SEX_F SHOW SEXM JMP NN SEX_F: SHOW SEXF NN: SHOW ENTER SHOW SCORE ;SCORE MOV
38、 CX,SCORE_LENGTH MOV BX,ID_LENGTH ADD BX,NAM_LENGTH SH_SCORE: INC BX MOV DL,STR0[BX] MOV AH,2 INT 21H LOOP SH_SCORE POP DX POP
39、 CX POP BX POP AX RET SHOW_STU ENDP ;-insert录入- INSERT PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX TAB SHOW
40、 TIPS0 ;显示提示信息 SHOW TIPS1 TAB OPENF FID,FPATH ;打开文件 IN_ID: SHOW ID ; 学号 INPUT STR,BL ;向缓冲区输入ID CMP BL,ID_LENGTH ;看ID是否合法 JZ L1
41、 JNZ ERR_ID ERR_SA: ;错误处理 TAB SHOW ERR_SAME TAB TAB JMP IN_ID ERR_ID: TAB CALL SHOW_ERR TAB JMP
42、IN_ID L1: ;ID判断只能为数字 MOV CX,ID_LENGTH LEA SI,STR+2 LN: MOV AL,BYTE PTR[SI] CMP AL,'0' JB ERR_ID CMP AL,'9' JA ERR_ID
43、 INC SI LOOP LN MOVEF FID,0,0,0 ;指针移到文件首 IA: MOVEF FID,1,0,5 IB: READF FID,STR0,STU_LENGTH ;读取学生信息 CMP AX,0 ;文件是否结束 JNZ IL1 JMP
44、 IC ;没有重复学号,可以插入 IL1: LEA SI,STR0 LEA DI,STR INC DI DEC SI MOV CX,ID_LENGTH IL2: INC SI INC DI MOV AL,BYTE PTR [DI] C
45、MP AL,BYTE PTR [SI] JNZ IA ;不符合条件读取下一个同学信息 LOOPZ IL2 JMP ERR_SA ;有重复学号 IC: MOVEF FID,2,0,5 WRITEF FID,STR,ID_LENGTH ;数据合法则写入数据 TAB IN_NAM: SHOW NAM
46、 ;姓名 CALL RE_TMP ;初始化缓冲区 INPUT STR,BL ADD BL,2 ;去掉回车 MOV BH,0 MOV SI,BX MOV STR[SI],' ' SUB BL,2 CMP BL,NAM_LENGTH
47、 JNA L2 ERR_NAM: CALL SHOW_ERR JMP IN_NAM L2: CMP STR[2],' ' ;姓名第一个字符不为空 JZ ERR_NAM CMP STR[2],'z' JA ERR_NAM CMP STR[2],'A'
48、 JB ERR_NAM CMP STR[2],'a' JNB III CMP STR[2],'Z' JA ERR_NAM CMP STR[2],'A' JB ERR_NAM III: MOV CX,NAM_LENGTH MOV BX,2
49、 II0: INC BX DEC CX CMP STR[BX],'z' JA ERR_NAM CMP STR[BX],' ' JB ERR_NAM CMP STR[BX],'a' JNB II0 CMP STR[BX],'Z'
50、 JA ERR_NAM CMP STR[BX],'A' JNB II0 CMP STR[BX],' ' JNZ ERR_NAM CMP CX,0 JNZ II0 WRITEF FID,STR,NAM_LENGTH TAB IN_SEX: S






