处理成绩输入的子程序检查输入成绩是否在0100之间的子程序并转化为二进制数CHANGEPROCNEAR把3位数字转换为二进制数PUSHAXPUSHBXPUSHCXMOVCLPRESCMPCL3JAJEMINVALID四位数或以上,溢出THRDIG三位数TWODIG两位数ONEDIG一位数
CMPCL2JE
CMPCL1JE
第32页
f微机原理软件实验报告
THRDIG判断是否是100,是则直接在临时成绩区写入100MOVBLCHAR0百位SUBBL30HCMPBL1JNEMINVALIDMOVBLCHAR1十位SUBBL30HCMPBL0JNEMINVALIDMOVBLCHAR2个位SUBBL30HCMPBL0JNEMINVALIDMOVMTMP100写入100JMPCRETURNTWODIG当是两位数时判断十位是否是0,不是则进行转换,然后写入临时成绩中MOVBLCHAR0十位SUBBL30HCMPBL0JEMINVALIDMOVAL10MULBL成10取得十位数MOVBLCHAR1个位SUBBL30HADDALBL因为小于100所以有效数在AL中,;可以直接加个位数得结果MOVMTMPAL写入转换后的数字JMPCRETURNONEDIG一位数时直接写入临时成绩区即可MOVBLCHAR0个位SUBBL30H
第33页
f微机原理软件实验报告
MOVMTMPBLJMPCRETURNMINVALIDMOVERROR4CALLPRINTERRMOVCHEOK1CRETURNPOPCXPOPBXPOPAXRETCHANGEENDP打印错误信息子程序PRINTERRPROCNEARPUSHAXPUSHDXPUSHBXMOVALERRORCBWMOVBXAXMOVAH09HMOVDXERRLISTBXINT21HPOPBXPOPDXPOPAXRETPRINTERRENDP排序子程序SORTPROCNEARPUSHAXPUSHBX
第34页
f微机原理软件实验报告
PUSHCXPUSHDXPUSHSIPUSHDI写入偏移量作为分数的指针MOVALCOUNTB读取学生数目XORBXBXBX作为寻址计数器顺序写入成绩偏移量SLOPDECALMOVRANKTMPBXALINCBXCMPAL0JNESLOP排序名次,冒泡排序法MOVCXCOUNTWCX记录了总的学生人数DECCXJZWRRAK如果只有一个学生则直接写入名次,否则排序异常
LOP1XORDIDI从第一个名次开始LOP2MOVALRANKTMPDI取出地址指针,即成绩偏移量XORAHAHMOVSIAXMOVDLMARKSI取出成绩1MOVALRANKTMPDI1XORAHAHMOVSIAXMOVDHMARKSI同理取出成绩2CMPDLDHJGENEXTCMPMOVAHRANKTMPDI交换分数指针XCHGAHRANKTMPDI1MOVRANKTMPDIAHNEXTCMPINCDICMPDICX
第35页
f微机原理软件实验报告
JNELOP2
LOOPLOP1写入最后的名次WRRAKXORSISIMOVCXCOUNTWMOVBL1保存名次LOPSAVECMPSICXJEFINISH
MOVALRANKTMPSI提取该名次学生的地址指针XORAHAHMOVDIAXMOVRANKDIBL写入该学生的名次INCBLINCSIJMPLOPSAVEFINISHPOPDIPOPSIPOPDXPOPCXPOPBXPOPAXRETSORTENDP打印输入成绩和名次子程序PRINTPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPRINTr