《南昌大学---汇编语言--成绩管理(共12页).doc》由会员分享,可在线阅读,更多相关《南昌大学---汇编语言--成绩管理(共12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上汇编语言程序设计期末大作业:编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,(1) 将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;(2) 按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;(3) 输出总分高于班平均总分的全部学生记录。stack segment stack db 200 dup (0)stack endsDATA SEGMENT PARA DATAmenu DB * ,0dh,
2、0ah ;主菜单列表 DB * main menu * ,0dh,0ah DB * * ,0dh,0ah DB * 1.output all student score * ,0dh,0ah;输出所有学生的成绩 DB * 2.statistics score(ABCED) * ,0dh,0ah;显示每个成绩段的学生人数 DB * 3.sort score * ,0dh,0ah;学生成绩的排序 DB * 4.intput five names and scores * ,0dh,0ah;任意添加五个学生的姓名与成绩 DB * 5.intput one name and score * ,0dh,
3、0ah;任意输入一个学生的姓名与成绩,会显示出其成绩的等级 DB * 6.clear screen * ,0dh,0ah;清屏 DB * 7.exit * ,0dh,0ah;退出 DB * ,0dh,0ah Plase DBplasechoose:(1-7): ,0dh,$ ;选择1-7 err db the data error$put0 db plase intput one name and score,0dh,$put db plase intput five names and scores,0dh,$bye db *thank you to use*,0dh,$score dw 6
4、4,71,66,61,78,80,83,89,79,96n1 =($-score)/2;score的长度scoreadd DB 3; 增加的分数存入指定单元 DB ? DB 3 DUP(0) db $scoreadd2 DB 3; 增加的分数存入指定单元 DB ? DB 3 DUP(0) db $scoreadd3 DB 3; 增加的分数存入指定单元 DB ? DB 3 DUP(0) db $scoreadd4 DB 3; 增加的分数存入指定单元 DB ? DB 3 DUP(0) db $ scoreadd5 DB 3; 增加的分数存入指定单元 DB ? DB 3 DUP(0) db $sco
5、re1 db 15 dup(0)mes1 DB THE NUMBER OF E(0-59):$; 显示E等级的人数的界面,对应V1mes2 DB THE NUMBER OF D(60-69):$; 显示D等级的人数的界面,对应V2mes3 DB THE NUMBER OF C(70-79):$; 显示C等级的人数的界面,对应V3mes4 DB THE NUMBER OF B(80-89):$; 显示B等级的人数的界面,对应V4mes5 DB THE NUMBER OF A(90-100):$; 显示A等级的人数的界面,对应V5mes6 DB $; 12字节空格使显示分数及对应名字相隔mes7
6、db name: score:,0ah,0dh,$mes8 db name:,0ah,0dh,$; 提示输入姓名mes9 db score:,0ah,0dh,$; 提示输入分数bo1 DB you input the score of student is A$; 判断输入的数据的等级后显示对应级别Abo2 DB you input the score of student is B$; 判断输入的数据的等级后显示对应级别Bbo3 DB you input the score of student is C$; 判断输入的数据的等级后显示对应级别Cbo4 DB you input the sc
7、ore of student is D$; 判断输入的数据的等级后显示对应级别Dbo5 DB you input the score of student is E$; 判断输入的数据的等级后显示对应级别Ebo6 DB 1.output all student score 2.statistics score(ABCED) DB 3.sort score 4.intput five names and scores DB 5.intput one name and score 6.clear screen 7.exit ,0dh,$ ;清屏后提示v1 db ? ;0-59段人数计数器 v2 d
8、b ? ;60-69段人数计数器 v3 db ? ;70-79段人数计数器 v4 db ? ;80-89段人数计数器 v5 db ? ;90-100段人数计数器 nam1 DB chen bo$; 学生姓名已存入指定数据存储单元NAM(1-10)nam2 DB chenhin$nam3 DB chenhun$nam4 DB huanwei$nam5 DB tanghui$nam6 DB chenfan$nam7 DB mao yun$nam8 DB zhanjun$nam9 DB zhanhua$nam10 DB chenlin$nam11 DB 8; 增加的名字存入指定单元 DB ? DB
9、8 DUP(0) nam12 DB 8 DB ? DB 8 DUP(0) nam13 DB 8 DB ? DB 8 DUP(0) nam14 DB 8 DB ? DB 8 DUP(0) nam15 DB 8 DB ? DB 8 DUP(0) ;NUM DB 21,22,23,24,25,26,27,28,29,30;*显示*show macro m lea dx,m mov ah,9 int 21h endm;*输入*input macro f lea dx,f mov ah,10 int 21H endmDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA
10、,SS:STACK,ES:DATASTART PROC MOV AX,DATA mov ds,AX show menuchen: show plase mov ah,1;选择菜单项 int 21h call ad cmp al,7 ja error ;当输入非法数据时,报错 cmp AL,1 jb error; 当输入非法数据时,报错 CMP AL,1 JE one; 当输入1时,转入分支程序,实现输出分数及名字功能 CMP AL,2 JE two; 当输入2时,转入TWO分支程序,实现统计功能 CMP AL,3 JE three; 当输入3时,转入THREE分支程序,实现排序功能 cmp A
11、L,4 JE fo; 当输入4时,转入FO分支程序,实现键盘输入功能及输出 cmp AL,5 je fiv; 当输入5时,转入FO分支程序,实现键盘输入功能能及等级判断 cmp al,6 je six;当输入6时,转入SIX分支程序,实现清屏 CMP AL,7 jmp byebye; 当输入7时,转入BYEBYE分支程序,退出error: ;分支程序,当输入非法数据时,报错 show err call ad jmp chenquit: ; 分支程序,退出 mov ah,4ch int 21hbyebye: show bye jmp quit ;* 1显示所有成绩 *one: ; ONE分支程序
12、,实现输出分数及名字功能 mov cx,n1 lea di,score show mes7 mov bp,offset nam1chen1:;*以下显示姓名* mov dx,bp mov ah,9 int 21h add bp,8 show mes6;*以下显示分数* mov ax,di mov bx,10 lea si,score1 call radix mov si,byte ptr 0dh mov si+1,byte ptr 0ah mov si+2,byte ptr $ lea dx,score1 mov ah,9 int 21h;以上是2-10进制转换及显示 add di,2;*以上
13、显示分数* dec cx jnz chen1 jmp chen;*2-10*radix proc;2-10进制转换 push cx;(cx)=10 push dx; mov cx,0;P进制入站时的计数器L1: MOV DX,0 DIV BX;商置ax, push dx; inc cx or ax,ax jne L1l2: pop ax;出栈 cmp al,10;比较 jb next;跳入下一个 add al,7;进行加法运算next: add al,30h mov si,al inc si dec cx jnz l2 pop dx;出栈 pop cx;出栈 retradix endp; *2
14、号统计各分段人数 *two: lea si,score mov cx,n1 call count ;统计各分段人数 call ad jmp chen; *3号顺序分数排序 *three: lea bx,score mov cx,n1 call sort;排序并存放在score为首址的单元中;*显示所有成绩* mov cx,n1 lea di,scorechen2: ;*冒泡排序子程序*sort proc;P128排序 push ax;入栈 push dx;入栈 push si;入栈 push di ;入栈 mov dx,cx sub dx,2 mov si,2lopi: mov ax,di m
15、ov bx,10 lea si,score1 call radix mov si,byte ptr 0dh mov si+1,byte ptr 0ah mov si+2,byte ptr $ lea dx,score1 mov ah,9 int 21h;以上是2-10进制转换及显示 add di,2 dec cx jnz chen2 jmp chen mov di,si add di,2 mov ax,bx+si-2lopj: cmp ax,bx+di-2 jbe lopk xchg bx+di-2,ax mov bx+si-2,axlopk: show mes8;显示信息 input nam
16、12 call ad show mes9;显示信息 input scoreadd2 call ad;调动程序 show mes8;显示信息 input nam13 call ad;调动程序 show mes9;显示信息 input scoreadd3 call ad;调动程序 add di,2 cmp di,20 jbe lopj add si,2 cmp si,18;比较 jbe lopi pop di pop si;出栈 pop dx ;出栈 pop ax;出栈 ret;返回sort endp; *4输出输入成绩*fo: show put;显示 call ad show mes8;显示信息
17、 input nam11;输入姓名 call ad show mes9;显示信息 input scoreadd;输入 call ad;调动程序 show mes8 input nam14 call ad show mes9 input scoreadd4 call ad ;*显示对应名字分数* show mes7;显示对应名字分数 ; call ad show nam11+2;显示name show mes6 show scoreadd+2;显示score call ad show nam12+2;显示name show mes6 show scoreadd2+2;显示score call a
18、d show nam13+2;显示name show mes6 show scoreadd3+2;显示score call ad show nam14+2;显示name show mes6 show scoreadd4+2;显示score call ad show nam15+2;显示name show mes6 show scoreadd5+2;显示score call ad jmp chen fiv: ; *6清屏程序*six: call clr show bo6 jmp chen show put0 call ad show mes8 input nam11;输入姓名 call ad s
19、how mes9;显示信息 input scoreadd;输入分数 call ad show put call ad show mes8;显示信息 input nam11;输入姓名 call ad;调用 show mes9;显示信息 input scoreadd call ad show mes7;显示对应名字分数 show nam11+2;显示name show mes6 show scoreadd+2;显示score call ad lea bx,scoreadd+2 call abcde call ad jmp chen ;*判断ABCDE子程序*abcde proc push ax;入
20、栈 mov ax,0 lea bx,scoreadd+2 mov ah,bx inc bx mov al,bx;把bx中所存地址包含的内容移动到alb1: cmp ax,59;与59进行比较 jg b2; show bo5;0-59 call ad jmp chen;跳到chen:执行程序b2: cmp ax,69;与69进行比较 jg b3 ;60-69 show bo4 call ad jmp chen;跳到chen:执行程序 b3: cmp ax,79;与79进行比较 jg b4 ;70-79 show bo3 call ad jmp chen;跳到chen:执行程序b4: cmp ax
21、,89;与89进行比较 jg b5 ;80-89 show bo2 call ad jmp chen;跳到chen:执行程序b5: show bo1 call ad jmp chen pop axabcde endp ; *统计成绩子程序 *count procm1:loop m1 mov dx,offset mes1 mov ah,09h int 21h mov dl,v1 add dl,30h mov ah,02h int 21h call ad mov bx,si add si,2 cmp bx,59 jg m2; inc v1 ; 0-59段人数计数器 jmp m6 ;0-59m2:
22、cmp bx,69 jg m3 ;60-69 inc v2 ; 60-69段人数计数器 jmp m6 m3: cmp bx,79 jg m4 ;70-79 inc v3 ; 70-79段人数计数器 jmp m6 m4: cmp bx,89 jg m5 ;80-89 inc v4 ; 80-89段人数计数器 jmp m6 m5: inc v5 ; 90-99段人数计数器m6: mov dx,offset mes2 mov ah,09h int 21h mov dl,v3 add dl,30h ;将30h中的内容移到d1中 mov ah,02h ;将02h中的内容移到ah中 int 21h cal
23、l ad mov dx,offset mes4 ;偏移地址 mov ah,09h int 21h mov dl,v4 add dl,30h mov ah,02h int 21h call ad mov dl,v2 add dl,30h;相加 mov ah,02h ;将02h中的内容移到ah中 int 21h call ad mov dx,offset mes3 ;移动 mov ah,09h ;将09h中的内容移到ah中 int 21h mov dx,offset mes5 mov ah,09h int 21h mov dl,v5 add dl,30h mov ah,02h int 21h ret count endp ; *清屏子程序*CLR PROC MOV AH,2MOV BH,0MOV DX,0INT 10HMOV AH,0AHMOV AL, MOV BH,0MOV CX,2000INT 10HretCLR endp; *回车换行子程序 *ad proc push ax;压入栈push dx;压入栈mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h pop dx;出栈pop ax;出栈ret ad endp ;*START ENDPcode endsend START;结束程序专心-专注-专业
限制150内