显示学生名次表汇编语言Word格式.docx
《显示学生名次表汇编语言Word格式.docx》由会员分享,可在线阅读,更多相关《显示学生名次表汇编语言Word格式.docx(12页珍藏版)》请在冰点文库上搜索。
infor2db0ah,0dh,'
inputscore:
$'
nequ15;
姓名长度
mequ4;
成绩长度(3位+回车pequ4;
输入的人数(4个qequ3;
成绩位数
buff1dbn,?
ndup(0,'
;
姓名缓冲区,加$以便输出
buff2dbm,?
mdup(0,'
成绩缓冲区
snamedbpdup(n+1dup(0;
保存姓名
score1dwpdup(m+1dup(0;
保存成绩
score2dwpdup(m+1dup(0
mingcidbpdup(0;
名次
xdw?
sign1dw0
sign2dw0
contdb'
1'
;
计数
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
mainprocfar
MOVAX,DATA
MOVDS,AX
moves,ax
movbx,0
movcx,0
callinput
callsort
callprint
movah,4ch
int21h
mainendp
子程序1,输入姓名、成绩
inputproc
incbx;
输入次数统计
cmpbx,p;
输入次数
jaexit
leadx,infor1;
显示提示1
movah,9
leadx,buff1;
输入姓名
movah,10
moval,buff1+1;
实际输入个数,al
addal,2;
+2,包含buffer1的0,1号单元movah,0
movsi,ax;
回车od所在位置,跟在最后一个字符后
movbuff1[si],0;
将od换为0,便于输出显示
leadx,infor2;
显示提示2
leadx,buff2;
输入成绩
moval,buff2+1;
实际输入个数
个数+2,包含0,1单元找到odmovah,0
movsi,ax
movbuff2[si],0;
movmingci[bx-1],bl;
bx为输入次数,保存输入次序cmpbx,1;
第一次输入转let1
jzlet1
addsign1,n+1;
姓名间隔为n+1
addsign2,q;
成绩间隔为q
let1:
callcopy;
子程序嵌套
jmpinput
exit:
ret
inputendp
子程序2,数据转存
copyproc
movcx,n+1;
姓名长度+1(包含$
leasi,buff1+2
leadi,sname;
姓名传送到sname
adddi,sign1;
加上间隔值
cld
repmovsb
movcx,n
movax,'
用$覆盖姓名区,清除已输入的姓名leadi,buff1+2
repstosb
movcx,m+1;
成绩位数+1(包含s
leasi,buff2+2
leadi,score1;
成绩传送到scorel
adddi,sign2;
movdi,sign2
callchange;
二进制成绩,scorel2
copyendp
子程序3,十进制数ASCII码→二进制
changeproc
movx,0
movcx,[si-1];
成绩的位数,cx
andcx,000fh;
保留低4位
rept2:
moval,[si];
按位取出成绩
cmpal,30h;
是否在0~9之间
jlexit1
cmpal,39h
jgexit1
andax,000fh;
去掉ASCII码
xchgax,x
movdx,10;
将ax中前一次形成的数扩大10倍
muldx
addx,ax;
保存到x
incsi
looprept2
movax,x;
按十进制形成的成绩以二进制保存
movscore2[di],ax;
二进制成绩送入score2movx,0
addsign2,2;
下一个成绩单元
exit1:
ret
changeendp
子程序4,按成绩排序
sortproc
movcx,p;
数组长度
deccx
loop1:
pushcx;
保存外循环次数
movsi,0
loop2:
movax,score2[bx]
cmpax,score2[bx+m+1];
m+1=5
jgenext;
降序
xchgax,score2[bx+m+1];
交换成绩
movscore2[bx],ax
moval,mingci[si]
xchgal,mingci[si+1];
movmingci[si],al
next:
addbx,m+1;
下一个成绩
looploop2
popcx;
恢复外循环次数
looploop1
sortendp
子程序5,打印排序名单
printproc
leadx,infor0;
显示结果提示
movcx,p
movax,0
movdi,0
rept3:
movdl,0ah;
回车换行
movah,2
movdl,0dh
movdl,cont;
显示名次序号
####学院综合性实验报告int21hinccontmovdl,0ahmovah,2int21hmovdl,0dhint21hmovax,0moval,mingci[di]decalmovbl,9mulblleadx,snameadddx,axmovah,9int21hmovdl,0ahmovah,2int21hmovdl,0dhint21hmovax,0movbx,0moval,mingci[di]decalmovbl,5mulblleadx,score1adddx,axmovah,9int21hincdilooprept3retprintendp;
回车换行;
取名次;
位置-1,因为地址从0开始;
姓名位置=al×
9(包含$;
偏移地址+姓名位移量;
显示名字;
地址从0开始;
成绩位移量=al×
5(包含$;
显示成绩codeendsENDSTART第15页