南昌大学汇编语言成绩管理教学提纲Word文档下载推荐.docx
《南昌大学汇编语言成绩管理教学提纲Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《南昌大学汇编语言成绩管理教学提纲Word文档下载推荐.docx(21页珍藏版)》请在冰点文库上搜索。
选择1-7
errdb'
thedataerror$'
put0db'
plaseintputonenameandscore'
putdb'
plaseintputfivenamesandscores'
byedb'
***************thankyoutouse*********************'
scoredw64,71,66,61,78,80,83,89,79,96
n1=($-score)/2;
score的长度
scoreaddDB3;
增加的分数存入指定单元
DB?
DB3DUP(0)
db'
scoreadd2DB3;
增加的分数存入指定单元
scoreadd3DB3;
scoreadd4DB3;
scoreadd5DB3;
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'
提示输入姓名
mes9db'
score:
提示输入分数
bo1DB'
youinputthescoreofstudentisA$'
判断输入的数据的等级后显示对应级别A
bo2DB'
youinputthescoreofstudentisB$'
判断输入的数据的等级后显示对应级别B
bo3DB'
youinputthescoreofstudentisC$'
判断输入的数据的等级后显示对应级别C
bo4DB'
youinputthescoreofstudentisD$'
判断输入的数据的等级后显示对应级别D
bo5DB'
youinputthescoreofstudentisE$'
判断输入的数据的等级后显示对应级别E
bo6DB'
1.outputallstudentscore2.statisticsscore(ABCED)'
3.sortscore4.intputfivenamesandscores'
DB'
5.intputonenameandscore6.clearscreen7.exit'
清屏后提示
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;
增加的名字存入指定单元
DB8DUP(0)
nam12DB8
nam13DB8
nam14DB8
nam15DB8
NUMDB21,22,23,24,25,26,27,28,29,30
***********显示***************
showmacrom
leadx,m
movah,9
int21h
endm
***********输入******************
inputmacrof
leadx,f
movah,10
int21H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
STARTPROC
MOVAX,DATA
movds,AX
showmenu
chen:
showplase
movah,1;
选择菜单项
callad
cmpal,'
7'
jaerror;
当输入非法数据时,报错
cmpAL,'
1'
jberror;
当输入非法数据时,报错
CMPAL,'
JEone;
当输入1时,转入分支程序,实现输出分数及名字功能
2'
JEtwo;
当输入2时,转入TWO分支程序,实现统计功能
3'
JEthree;
当输入3时,转入THREE分支程序,实现排序功能
4'
JEfo;
当输入4时,转入FO分支程序,实现键盘输入功能及输出
5'
jefiv;
当输入5时,转入FO分支程序,实现键盘输入功能能及等级判断
6'
jesix;
当输入6时,转入SIX分支程序,实现清屏
jmpbyebye;
当输入7时,转入BYEBYE分支程序,退出
error:
;
分支程序,当输入非法数据时,报错
showerr
jmpchen
quit:
分支程序,退出
movah,4ch
byebye:
showbye
jmpquit
********************1显示所有成绩**************
one:
ONE分支程序,实现输出分数及名字功能
movcx,n1
leadi,score
showmes7
movbp,offsetnam1
chen1:
*********以下显示姓名**************
movdx,bp
int21h
addbp,8
showmes6
*********以下显示分数**************
movax,[di]
movbx,10
leasi,score1
callradix
mov[si],byteptr0dh
mov[si+1],byteptr0ah
mov[si+2],byteptr'
leadx,score1
int21h;
以上是2-10进制转换及显示
adddi,2
*********以上显示分数**************
deccx
jnzchen1
***********2-10***************
radixproc;
2-10进制转换
pushcx;
(cx)=10
pushdx;
movcx,0;
P进制入站时的计数器
L1:
MOVDX,0
DIVBX;
商置ax,
inccx
orax,ax
jneL1
l2:
popax;
出栈
cmpal,10;
比较
jbnext;
跳入下一个
addal,7;
进行加法运算
next:
addal,30h
mov[si],al
incsi
jnzl2
popdx;
popcx;
ret
radixendp
*****************2号统计各分段人数******************
two:
leasi,score
callcount;
统计各分段人数
********************3号顺序分数排序***************
three:
leabx,score
callsort;
排序并存放在score为首址的单元中
************显示所有成绩************
chen2:
***********冒泡排序子程序***************
sortproc;
P128排序
pushax;
入栈
pushsi;
pushdi;
movdx,cx
subdx,2
movsi,2
lopi:
jnzchen2
movdi,si
movax,[bx+si-2]
lopj:
cmpax,[bx+di-2]
jbelopk
xchg[bx+di-2],ax
mov[bx+si-2],ax
lopk:
showmes8;
显示信息
inputnam12
showmes9;
inputscoreadd2
callad;
调动程序
inputnam13
inputscoreadd3
cmpdi,20
jbelopj
addsi,2
cmpsi,18;
jbelopi
popdi
popsi;
popdx;
ret;
返回
sortendp
******************4输出输入成绩*******************
fo:
showput;
显示
inputnam11;
输入姓名
inputscoreadd;
输入
showmes8
inputnam14
showmes9
inputscoreadd4
callad
**************显示对应名字分数************
showmes7;
显示对应名字分数
shownam11+2;
显示name
showscoreadd+2;
显示score
shownam12+2;
showscoreadd2+2;
shownam13+2;
showscoreadd3+2;
shownam14+2;
showscoreadd4+2;
shownam15+2;
showscoreadd5+2;
fiv:
*******************6清屏程序*************
six:
callclr
showbo6
showput0
输入分数
showput
调用
inputscoreadd
leabx,scoreadd+2
callabcde
*************判断ABCDE子程序*************
abcdeproc
movax,0
movah,[bx]
incbx
moval,[bx];
把bx中所存地址包含的内容移动到al
b1:
cmpax,'
59'
与59进行比较
jgb2;
>
showbo5;
0-59
jmpchen;
跳到chen:
执行程序
b2:
69'
与69进行比较
jgb3;
60-69>
showbo4
执行程序
b3:
79'
与79进行比较
jgb4;
70-79>
showbo3
b4:
89'
与89进行比较
jgb5;
80-89>
showbo2
b5:
showbo1
popax
abcdeendp
***********统计成绩子程序******************
countproc
m1:
loopm1
movdx,offsetmes1
movah,09h
movdl,v1
adddl,30h
movah,02h
movbx,[si]
addsi,2
cmpbx,59
jgm2;
incv1;
0---59段人数计数器
jmpm6;
m2:
cmpbx,69
jgm3;
incv2;
60--69段人数计数器
jmpm6
m3:
cmpbx,79
jgm4;
incv3;
70--79段人数计数器
m4:
cmpbx,89
jgm5;
incv4;
80-89段人数计数器
m5:
incv5;
90-99段人数计数器
m6:
movdx,offsetmes2
movdl,v3
adddl,30h;
将30h中的内容移到d1中
movah,02h;
将02h中的内容移到ah中
movdx,offsetmes4;
偏移地址
movdl,v4
movdl,v2
adddl,30h;
相加
movdx,offsetmes3;
移动
movah,09h;
将09h中的内容移到ah中
movdx,offsetmes5
movdl,v5
ret
countendp
****************清屏子程序***********
CLRPROC
MOVAH,2
MOVBH,0
INT10H
MOVAH,0AH
MOVAL,'
MOVBH,0
MOVCX,2000
INT10H
ret
CLRendp
************回车换行子程序*******
adproc
pushax;
压入栈
pushdx;
movdl,0ah
movah,2
int21h
movdl,0dh
popdx;
popax;
ret
adendp
*********************************
STARTENDP
codeends
endSTART;
结束程序