显示学生名次表汇编语言.docx
《显示学生名次表汇编语言.docx》由会员分享,可在线阅读,更多相关《显示学生名次表汇编语言.docx(12页珍藏版)》请在冰点文库上搜索。
显示学生名次表汇编语言
******学院综合性
实验报告
课程名称汇编语言
实验学期2011至2012学年第2学期学生所在系部计算机学院计算机科学与技术系
年级2010级专业班级*************学生姓名*****学号****************任课教师####实验成绩
计算机学院制
《汇编语言》课程综合性实验报告
第5页
第6页
第7页
第8页
第9页
价
附程序:
DATASEGMENT
infor0db0ah,0dh,'sort=$'
infor1db0ah,0dh,'inputname:
$'
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
int21h
leadx,buff1;输入姓名
movah,10
int21h
moval,buff1+1;实际输入个数,al
addal,2;+2,包含buffer1的0,1号单元movah,0
movsi,ax;回车od所在位置,跟在最后一个字符后
movbuff1[si],0;将od换为0,便于输出显示
leadx,infor2;显示提示2
movah,9
int21h
leadx,buff2;输入成绩
movah,10
int21h
moval,buff2+1;实际输入个数
addal,2;个数+2,包含0,1单元找到odmovah,0
movsi,ax
movbuff2[si],0;将od换为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;加上间隔值
cld
repmovsb
leasi,buff2+2
movdi,sign2
callchange;二进制成绩,scorel2
ret
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;保存外循环次数
movbx,0
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;下一个成绩
incsi
looploop2
popcx;恢复外循环次数
looploop1
ret
sortendp
;子程序5,打印排序名单
printproc
leadx,infor0;显示结果提示
movah,9
int21h
movcx,p
movbx,0
movax,0
movdi,0
rept3:
movdl,0ah;回车换行
movah,2
int21h
movdl,0dh
int21h
movdl,cont;显示名次序号
movah,2
####学院综合性实验报告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页