南昌大学汇编语言成绩管理教学提纲.docx
- 文档编号:12514977
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:21
- 大小:18.56KB
南昌大学汇编语言成绩管理教学提纲.docx
《南昌大学汇编语言成绩管理教学提纲.docx》由会员分享,可在线阅读,更多相关《南昌大学汇编语言成绩管理教学提纲.docx(21页珍藏版)》请在冰豆网上搜索。
南昌大学汇编语言成绩管理教学提纲
南昌大学---汇编语言--成绩管理
汇编语言程序设计期末大作业:
编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:
8位数字、姓名:
不多余10个英文字符,语文:
0-100的整数、数学:
0-100的整数、英语:
0-100的整数)后,
(1)将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;
(2)按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;
(3)输出总分高于班平均总分的全部学生记录。
stacksegmentstack
db200dup(0)
stackends
DATASEGMENTPARA'DATA'
menuDB'*******************************',0dh,0ah;主菜单列表
DB'*mainmenu*',0dh,0ah
DB'**',0dh,0ah
DB'*1.outputallstudentscore*',0dh,0ah;输出所有学生的成绩
DB'*2.statisticsscore(ABCED)*',0dh,0ah;显示每个成绩段的学生人数
DB'*3.sortscore*',0dh,0ah;学生成绩的排序
DB'*4.intputfivenamesandscores*',0dh,0ah;任意添加五个学生的姓名与成绩
DB'*5.intputonenameandscore*',0dh,0ah;任意输入一个学生的姓名与成绩,会显示出其成绩的等级
DB'*6.clearscreen*',0dh,0ah;清屏
DB'*7.exit*',0dh,0ah;退出
DB'************************',0dh,0ah
PlaseDB'plasechoose:
(1-7):
',0dh,'$';选择1-7
errdb'thedataerror$'
put0db'plaseintputonenameandscore',0dh,'$'
putdb'plaseintputfivenamesandscores',0dh,'$'
byedb'***************thankyoutouse*********************',0dh,'$'
scoredw64,71,66,61,78,80,83,89,79,96
n1=($-score)/2;score的长度
scoreaddDB3;增加的分数存入指定单元
DB?
DB3DUP(0)
db'$'
scoreadd2DB3;增加的分数存入指定单元
DB?
DB3DUP(0)
db'$'
scoreadd3DB3;增加的分数存入指定单元
DB?
DB3DUP(0)
db'$'
scoreadd4DB3;增加的分数存入指定单元
DB?
DB3DUP(0)
db'$'
scoreadd5DB3;增加的分数存入指定单元
DB?
DB3DUP(0)
db'$'
score1db15dup(0)
mes1DB'THENUMBEROFE(0---59):
$';显示E等级的人数的界面,对应V1
mes2DB'THENUMBEROFD(60--69):
$';显示D等级的人数的界面,对应V2
mes3DB'THENUMBEROFC(70--79):
$';显示C等级的人数的界面,对应V3
mes4DB'THENUMBEROFB(80--89):
$';显示B等级的人数的界面,对应V4
mes5DB'THENUMBEROFA(90-100):
$';显示A等级的人数的界面,对应V5
mes6DB'$';12字节空格使显示分数及对应名字相隔
mes7db'name:
score:
',0ah,0dh,'$'
mes8db'name:
',0ah,0dh,'$';提示输入姓名
mes9db'score:
',0ah,0dh,'$';提示输入分数
bo1DB'youinputthescoreofstudentisA$';判断输入的数据的等级后显示对应级别A
bo2DB'youinputthescoreofstudentisB$';判断输入的数据的等级后显示对应级别B
bo3DB'youinputthescoreofstudentisC$';判断输入的数据的等级后显示对应级别C
bo4DB'youinputthescoreofstudentisD$';判断输入的数据的等级后显示对应级别D
bo5DB'youinputthescoreofstudentisE$';判断输入的数据的等级后显示对应级别E
bo6DB'1.outputallstudentscore2.statisticsscore(ABCED)'
DB'3.sortscore4.intputfivenamesandscores'
DB'5.intputonenameandscore6.clearscreen7.exit',0dh,'$';清屏后提示
v1db?
;0---59段人数计数器
v2db?
;60--69段人数计数器
v3db?
;70--79段人数计数器
v4db?
;80--89段人数计数器
v5db?
;90-100段人数计数器
nam1DB'chenbo$';学生姓名已存入指定数据存储单元NAM(1-10)
nam2DB'chenhin$'
nam3DB'chenhun$'
nam4DB'huanwei$'
nam5DB'tanghui$'
nam6DB'chenfan$'
nam7DB'maoyun$'
nam8DB'zhanjun$'
nam9DB'zhanhua$'
nam10DB'chenlin$'
nam11DB8;增加的名字存入指定单元
DB?
DB8DUP(0)
nam12DB8
DB?
DB8DUP(0)
nam13DB8
DB?
DB8DUP(0)
nam14DB8
DB?
DB8DUP(0)
nam15DB8
DB?
DB8DUP(0)
;NUMDB21,22,23,24,25,26,27,28,29,30
;***********显示***************
showmacrom
leadx,m
movah,9
int21h
endm
;***********输入******************
inputmacrof
leadx,f
movah,10
int21H
endm
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
STARTPROC
MOVAX,DATA
movds,AX
showmenu
chen:
showplase
movah,1;选择菜单项
int21h
callad
cmpal,'7'
jaerror;当输入非法数据时,报错
cmpAL,'1'
jberror;当输入非法数据时,报错
CMPAL,'1'
JEone;当输入1时,转入分支程序,实现输出分数及名字功能
CMPAL,'2'
JEtwo;当输入2时,转入TWO分支程序,实现统计功能
CMPAL,'3'
JEthree;当输入3时,转入THREE分支程序,实现排序功能
cmpAL,'4'
JEfo;当输入4时,转入FO分支程序,实现键盘输入功能及输出
cmpAL,'5'
jefiv;当输入5时,转入FO分支程序,实现键盘输入功能能及等级判断
cmpal,'6'
jesix;当输入6时,转入SIX分支程序,实现清屏
CMPAL,'7'
jmpbyebye;当输入7时,转入BYEBYE分支程序,退出
error:
;分支程序,当输入非法数据时,报错
showerr
callad
jmpchen
quit:
;分支程序,退出
movah,4ch
int21h
byebye:
showbye
jmpquit
;********************1显示所有成绩**************
one:
;ONE分支程序,实现输出分数及名字功能
movcx,n1
leadi,score
showmes7
movbp,offsetnam1
chen1:
;*********以下显示姓名**************
movdx,bp
movah,9
int21h
addbp,8
showmes6
;*********以下显示分数**************
movax,[di]
movbx,10
leasi,score1
callradix
mov[si],byteptr0dh
mov[si+1],byteptr0ah
mov[si+2],byteptr'$'
leadx,score1
movah,9
int21h;以上是2-10进制转换及显示
adddi,2
;*********以上显示分数**************
deccx
jnzchen1
jmpchen
;***********2-10***************
radixproc;2-10进制转换
pushcx;(cx)=10
pushdx;movcx,0;P进制入站时的计数器
L1:
MOVDX,0
DIVBX;商置ax,
pushdx;
inccx
orax,ax
jneL1
l2:
popax;出栈
cmpal,10;比较
jbnext;跳入下一个
addal,7;进行加法运算
next:
addal,30h
mov[si],al
incsi
deccx
jnzl2
popdx;出栈
popcx;出栈
ret
radixendp
;*****************2号统计各分段人数******************
two:
leasi,score
movcx,n1
callcount;统计各分段人数
callad
jmpchen
;********************3号顺序分数排序***************
three:
leabx,score
movcx,n1
callsort;排序并存放在score为首址的单元中
;************显示所有成绩************
movcx,n1
leadi,score
chen2:
;***********冒泡排序子程序***************
sortproc;P128排序
pushax;入栈
pushdx;入栈
pushsi;入栈
pushdi;入栈
movdx,cx
subdx,2
movsi,2
lopi:
movax,[di]
movbx,10
leasi,score1
callradix
mov[si],byteptr0dh
mov[si+1],byteptr0ah
mov[si+2],byteptr'$'
leadx,score1
movah,9
int21h;以上是2-10进制转换及显示
adddi,2
deccx
jnzchen2
jmpchen
movdi,si
adddi,2
movax,[bx+si-2]
lopj:
cmpax,[bx+di-2]
jbelopk
xchg[bx+di-2],ax
mov[bx+si-2],ax
lopk:
showmes8;显示信息
inputnam12
callad
showmes9;显示信息
inputscoreadd2
callad;调动程序
showmes8;显示信息
inputnam13
callad;调动程序
showmes9;显示信息
inputscoreadd3
callad;调动程序
adddi,2
cmpdi,20
jbelopj
addsi,2
cmpsi,18;比较
jbelopi
popdi
popsi;出栈
popdx;出栈
popax;出栈
ret;返回
sortendp
;******************4输出输入成绩*******************
fo:
showput;显示
callad
showmes8;显示信息
inputnam11;输入姓名
callad
showmes9;显示信息
inputscoreadd;输入
callad;调动程序
showmes8
inputnam14
callad
showmes9
inputscoreadd4
callad
;**************显示对应名字分数************
showmes7;显示对应名字分数
;callad
shownam11+2;显示name
showmes6
showscoreadd+2;显示score
callad
shownam12+2;显示name
showmes6
showscoreadd2+2;显示score
callad
shownam13+2;显示name
showmes6
showscoreadd3+2;显示score
callad
shownam14+2;显示name
showmes6
showscoreadd4+2;显示score
callad
shownam15+2;显示name
showmes6
showscoreadd5+2;显示score
callad
jmpchen
fiv:
;*******************6清屏程序*************
six:
callclr
showbo6
jmpchen
showput0
callad
showmes8
inputnam11;输入姓名
callad
showmes9;显示信息
inputscoreadd;输入分数
callad
showput
callad
showmes8;显示信息
inputnam11;输入姓名
callad;调用
showmes9;显示信息
inputscoreadd
callad
showmes7;显示对应名字分数
shownam11+2;显示name
showmes6
showscoreadd+2;显示score
callad
leabx,scoreadd+2
callabcde
callad
jmpchen
;*************判断ABCDE子程序*************
abcdeproc
pushax;入栈
movax,0
leabx,scoreadd+2
movah,[bx]
incbx
moval,[bx];把bx中所存地址包含的内容移动到al
b1:
cmpax,'59';与59进行比较
jgb2;>
showbo5;0-59
callad
jmpchen;跳到chen:
执行程序
b2:
cmpax,'69';与69进行比较
jgb3;60-69>
showbo4
callad
jmpchen;跳到chen:
执行程序
b3:
cmpax,'79';与79进行比较
jgb4;70-79>
showbo3
callad
jmpchen;跳到chen:
执行程序
b4:
cmpax,'89';与89进行比较
jgb5;80-89>
showbo2
callad
jmpchen;跳到chen:
执行程序
b5:
showbo1
callad
jmpchen
popax
abcdeendp
;***********统计成绩子程序******************
countproc
m1:
loopm1
movdx,offsetmes1
movah,09h
int21h
movdl,v1
adddl,30h
movah,02h
int21h
callad
movbx,[si]
addsi,2
cmpbx,59
jgm2;>
incv1;0---59段人数计数器
jmpm6;0-59
m2:
cmpbx,69
jgm3;60-69>
incv2;60--69段人数计数器
jmpm6
m3:
cmpbx,79
jgm4;70-79>
incv3;70--79段人数计数器
jmpm6
m4:
cmpbx,89
jgm5;80-89>
incv4;80-89段人数计数器
jmpm6
m5:
incv5;90-99段人数计数器
m6:
movdx,offsetmes2
movah,09h
int21h
movdl,v3
adddl,30h;将30h中的内容移到d1中
movah,02h;将02h中的内容移到ah中
int21h
callad
movdx,offsetmes4;偏移地址
movah,09h
int21h
movdl,v4
adddl,30h
movah,02h
int21h
callad
movdl,v2
adddl,30h;相加
movah,02h;将02h中的内容移到ah中
int21h
callad
movdx,offsetmes3;移动
movah,09h;将09h中的内容移到ah中
int21h
movdx,offsetmes5
movah,09h
int21h
movdl,v5
adddl,30h
movah,02h
int21h
ret
countendp
;****************清屏子程序***********
CLRPROC
MOVAH,2
MOVBH,0
MOVDX,0
INT10H
MOVAH,0AH
MOVAL,''
MOVBH,0
MOVCX,2000
INT10H
ret
CLRendp
;************回车换行子程序*******
adproc
pushax;压入栈
pushdx;压入栈
movdl,0ah
movah,2
int21h
movdl,0dh
movah,2
int21h
popdx;出栈
popax;出栈
ret
adendp
;*********************************
STARTENDP
codeends
endSTART;结束程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南昌大学 汇编语言 成绩 管理 教学 提纲
![提示](https://static.bdocx.com/images/bang_tan.gif)