学生信息管理程序 汇编语言Word格式文档下载.docx
- 文档编号:18691316
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:25
- 大小:19KB
学生信息管理程序 汇编语言Word格式文档下载.docx
《学生信息管理程序 汇编语言Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生信息管理程序 汇编语言Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
显示各分段人数
5.Exit.'
退出
msg1db'
name:
msg2db'
class:
msg3db'
number:
msg4db'
score:
m_str_ldb0dh,0ah,'
[length<
14byte]'
m_num_ldb0dh,0ah,'
[value<
100]'
tabledwCASE0,CASE1,CASE2,CASE3,CASE4,CASE5
buflendb100;
输入缓冲区大小100
aclendb?
实际输入长度
bufdb100dup(0),'
实际缓冲区
bufrearequoffsetbuf+100;
缓冲区尾
ns6db0;
用于统计各分数段人数
n67db0
n78db0
n89db0
n91db0
ms6db'
failed:
'
显示各分数段人数
m67db'
60~70:
m78db'
70~80:
m89db'
80~90:
m91db'
90~100:
.CODE
START:
psmacrostr;
打印字符串,要求以'
结尾
pushax
pushdx
leadx,str
movah,9
int21h
popdx
popax
endm
pcmacroch;
打印字符
movdl,ch
movah,2
endlmacro;
打印'
\n'
pc0dh
pc0ah
scsmacro;
从键盘输入字符串,保存在buf中,串长aclen
leadx,buflen
movah,10
sccmacro
从键盘输入字符,保存在al
movah,1
memcpymacrodest,src,len;
经典的内存拷贝
pushcx
pushsi
pushdi
movax,ds
moves,ax;
串操作di要用到附加段
movcl,len
movch,0
leasi,src
leadi,dest
cld
repmovsb
mov[di],'
popdi
popsi
popcx
endm
使bx指向编号为ax的学生单元
寄存器:
ax,bx,cx
GET_STUmacro
leabx,stu_db
movcl,5
shlax,cl
addbx,ax;
bx指向这个学生的存储单元
movax,@data
movds,ax
WELC:
endl
pswelcome
pc'
:
输入选项
scc;
ascii码保存在al
movah,0
movbx,ax
subbx,'
0'
cmpbx,5
jbeCASE0TO5
jmpWELC
CASE0TO5:
shlbx,1
jmptable[bx];
基址寻址
CASE0:
录入学生成绩(十进制形式)
callins_stu
CASE1:
按学号排序显示
callnum_sort
callprint_seq
CASE2:
按成绩排序显示
callscore_sort
callprint_seq
CASE3:
callget_average
CASE4:
统计各分数段人数
callget_sat
CASE5:
movah,4ch
ins_stu:
输入学生信息
入口:
stu_num已有学生人数,即最新空白编号
出口:
stu_db
存储单元:
stu_db,stu_num
ins_stuprocnear
pushbx
moval,stu_num
确定存放在第几个位置
addbx,ax;
bx指向空白单元
input_name:
psm_str_l
psmsg1
scs
cmpaclen,14
jaeinput_name
memcpy(studentptr[bx]).xname,buf,aclen
input_class:
psmsg2
jaeinput_class
memcpy(studentptr[bx]).class,buf,aclen
psm_num_l
psmsg3
callstr2num
mov(studentptr[bx]).num,ax
psmsg4
callscore_fmt
mov(studentptr[bx]).score,ax
incstu_num;
增加学生记录
popdx
popbx
ret
ins_stuendp
pnum:
以十进制形式输出一个无符号数
ax需要输出的正数
pnumprocnear
movbx,bufrear
decbx
mov(studentptr[bx]),'
movbyteptr[bx],'
OUTLOOP:
orax,ax
jzOUTLOOPFIN;
ax为零
movdx,0
movcx,10
divcx
adddl,'
movbyteptr[bx],dl
jmpOUTLOOP
OUTLOOPFIN:
cmpbx,offsetbufrear-1;
输出0
jnePRINT_NUM
movBYTEptr[bx],'
PRINT_NUM:
movdx,bx
ret
pnumendp
pscore:
以十进制形式输出带一位小数的分数
存储单元:
pscoreprocnear
OUTLOOP2:
jzOUTLOOPFIN2
jmpOUTLOOP2
OUTLOOPFIN2:
cmpbx,offsetbufrear-1;
x要改成0x,以便小数格式输出
jeS0X
cmpbx,offsetbufrear;
空要改成00,以便小数格式输出
jnePRINT_SCORE
S00:
==,为空
S0X:
PRINT_SCORE:
movcl,[bx];
暂存小数
movbyteptr[bx],'
movdx,bx
.'
pccl
pscoreendp
pstu:
输出学生信息
ax存储编号
pstuprocnear
GET_STU
ps(studentptr[bx]).xname;
ps(studentptr[bx]).class
movax,(studentptr[bx]).num
callpnum
movax,(studentptr[bx]).score
callpscore
pstuendp
str2num:
将数字由字符串转成数值
buf
ax
buf缓冲区,aclen缓冲区内容长度
str2numproc
movax,0
movcl,aclen
leasi,buf
GET_NUM:
movax,dest;
adddest,dest*10+[si]-'
movbl,10
mulbl;
以前的数*10,乘法指令必须用ax
movbl,[si]
movbh,0
addax,bx
subax,'
incsi
loopGET_NUM
str2numendp
score_fmt:
将分数格式存储
score_fmtproc
GET_SCORE:
cmpBYTEptr[si],'
这个类型很重要
jnzMUL_DEX;
不是小数点
movdx,1;
发现小数点
loopGET_SCORE
MUL_DEX:
mulbl
loopGET_SCORE
cmpdx,0
jnzEND_SCORE
END_SCORE:
score_fmtendp
get_average:
算平均分并输出
出口
get_averageprocnear
movcx,0;
学生编号
movax,0;
暂存平均成绩低8位
movdx,0;
暂存平均成绩高8位
REPERT:
cmpcl,stu_num
jaeOUT_PUT;
总分已经加完了
找到编号为cx的学生
movax,cx
addax,(studentptr[bx]).score;
32位加法
adcdx,0
inccl
jmpREPERT
OUT_PUT:
movcl,stu_num
orcl,0;
假设学生人数不多于255人
jnzEND_AVE;
没有学生,不能除0
inccx
END_AVE:
divcx;
扩展为16位除法,商保存在ax中
get_averageendp
get_sat:
统计各分数段人数并输出
ns6,n67,n78,n89,n91,stu_db,stu_num
get_satprocnear
pushcx
movns6,0
movn67,0
movn78,0
movn89,0
movn91,0
学生编号(人数-1)
SAT_IN:
jaeSAT_OUT;
已经完了
cmpax,600
jbIS6
cmpax,700
jbI67
cmpax,800
jbI78
cmpax,900
jbI89
>
=90
incn91
jmpSAT_IN
IS6:
incns6
I67:
incn67
I78:
incn78
I89:
incn89
SAT_OUT:
psms6
moval,ns6
psm67
moval,n67
psm78
moval,n78
psm89
moval,n89
psm91
moval,n91
get_satendp
print_seq:
根据序列stu_seq输出列表
输入:
stu_seq
输出:
print_seqprocnear
stu_seq保存了编号序列,以'
结束
leabx,stu_seq
PRINT_SEQ_BEGIN:
moval,[bx]
cmpal,'
jzPRINT_SEQ_END
callpstu
incbx
jmpPRINT_SEQ_BEGIN
PRINT_SEQ_END:
print_seqendp
num_sort:
num_sortprocnear
movdl,0
SORT_BEGIN:
cmpdl,stu_num
jaeSORT_END
movBYTEptr[bx],dl
incdl
jmpSORT_BEGIN
SORT_END:
stu_seq保存了按输入顺序的序列,以'
cmpstu_num,1;
学生数小于等于1,没必要排序
jleNON_NUM
movcl,stu_num;
循环次数,内存量不能直接减
deccl
LOOP1:
movdi,cx
暂存外循环cx
指向第一个序号
LOOP2:
moval,BYTEptr[bx]
movdx,(studentptr[bx]).num
popbx;
dx前一个序列号对应的学号
moval,BYTEptr[bx+1]
cmpdx,(studentptr[bx]).num;
[bx].num后一个序列号对应的学号
jaeCONTI
moval,BYTEptr[bx];
小于则交换两个序列号
callpnum
endl
xchgal,BYTEptr[bx+1]
movBYTEptr[bx],al
CONTI:
incbx;
下一个序列号
loopLOOP2
movcx,di;
恢复外循环
loopLOOP1
NON_NUM:
num_sortendp
score_sort:
score_sortprocnear
SCORE_BEGIN:
jaeSCORE_END
jmpSCORE_BEGIN
SCORE_END:
jleNON_SCORE
deccl
SLOOP1:
movdi,cx;
leabx,stu_seq;
SLOOP2:
movdx,(studentptr[bx]).score;
dx前一个序列号对应的学号
popbx
cmpdx,(studentptr[bx]).score;
jaeSCONTI
SCONTI:
loopSLOOP2
movcx,di;
loopSLOOP1
NON_SCORE:
score_sortendp
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生信息管理程序 汇编语言 学生 信息管理 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)