汇编试验报告学生信息管理系统Word格式.docx

上传人:b****1 文档编号:1526256 上传时间:2023-04-30 格式:DOCX 页数:27 大小:114.97KB
下载 相关 举报
汇编试验报告学生信息管理系统Word格式.docx_第1页
第1页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第2页
第2页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第3页
第3页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第4页
第4页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第5页
第5页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第6页
第6页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第7页
第7页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第8页
第8页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第9页
第9页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第10页
第10页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第11页
第11页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第12页
第12页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第13页
第13页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第14页
第14页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第15页
第15页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第16页
第16页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第17页
第17页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第18页
第18页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第19页
第19页 / 共27页
汇编试验报告学生信息管理系统Word格式.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编试验报告学生信息管理系统Word格式.docx

《汇编试验报告学生信息管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《汇编试验报告学生信息管理系统Word格式.docx(27页珍藏版)》请在冰点文库上搜索。

汇编试验报告学生信息管理系统Word格式.docx

显示平均成绩和分段人数

关键算法的流程图:

关于分段人数与总成绩的计算冒泡排序算法:

5.效果图

输入三人信息,班级学好姓名,然后输入此人成绩。

可以看到三人的按成绩排序,然后将平均值输出,而且统计了各个分数区间的人数。

输入5人信息,并将其打印出来。

6.实验心得

通过编写学生管理系统的汇编实验,让我对汇编语言有了很深的了解,对于语言的熟悉度也提高了很多。

在编写的过程中遇到了很多的问题,由于汇编语言使用起来比较繁琐(个人感觉),很多内部运行的数据不能很好的呈现出来,所以对数据的保存,处理等方面出现了很大的错误,主要是在字符的输入与二进制的转换,还有就是在数据处理的时候会出现很多标志位,这些标准为对于处理后数据的保存有很大的影响,但是通过课本上的实验例子,对于这些问题基本上都能得到一定的解决。

还有就是在需要跳转的时候,由于跳转指令使用对标志位或者条件使用比较灵活,有很多种的跳转指令,这些指令在使用起来是很方便但是由于判断条件很多,可能不小心就出现了跳转出错。

还有就是,跳转不到想要跳转的地方。

这些问题需要在编写的过程中非常的小心,同时也能将这些指令得使用规则得到一个很好的理解与记忆。

总之,在此次的汇编实验的编写过程中,理解了很多在课堂上学习到的知识,也同时记忆了这些指令的使用规则与方法。

对于汇编语言有了一定程度的理解与掌握。

 

源程序:

DATASSEGMENT;

此处输入数据段代码

输入输出提示字符

STUDENT_NUMDB'

Pleaseinputthenumberofstudents(1-99):

'

'

STUDENT_INFORMATIONDB0DH,0AH,'

Pleaseinputthestudentinformation(classidname):

0DH,0AH,'

STUDENT_GRADEDB0DH,0AH,'

Pleaseinputthestudentgrade(0.0-100.0):

AVERAGE_GRADEDB0DH,0AH,'

Theaveragegradeis:

RESULT1DB0DH,0AH,'

Thenumberofstudentin[>

=90]is:

各分数段人数

RESULT2DB0DH,0AH,'

Thenumberofstudentin[80-90]is:

RESULT3DB0DH,0AH,'

Thenumberofstudentin[70-80]is:

RESULT4DB0DH,0AH,'

Thenumberofstudentin[60-70]is:

RESULT5DB0DH,0AH,'

Thenumberofstudentin[<

=60]is:

GRADE_RANKDB0DH,0AH,'

Thegradelist(hightolow)is:

打印排名

BLANKDB'

'

HUANHANGDB0DH,0AH,'

KAISHISHUCHUDB0DH,0AH,'

***********************************'

数据

第一个存整数部分(二进制形式),第二个存小数部分(二进制形式)

N0DB0;

各分数段人数存储区(二进制形式)

N1DB0

N2DB0

N3DB0

N4DB0

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

START:

此处输入代码段代码

MOVAX,DATAS

MOVDS,AX

MOVSI,0;

指向每个学生信息

MOVDI,0;

指向每个学生成绩

MOVCX,100;

初始化学生数

MOVDX,OFFSETSTUDENT_NUM;

请求输入学生总数

MOVAH,09

INT21H

CALLSTORE_STUDENT_NUM;

CMPCX,0;

输入为0退出

JLEOUTTODOS

CMPCX,100;

学生数超出本程序范围,退出

JGEOUTTODOS

INPUT:

MOVDX,OFFSETSTUDENT_INFORMATION;

请求输入学生信息

CALLSTORE_STUDENT_INFORMATION;

ADDSI,20;

指向下一个学生信息

MOVDX,OFFSETSTUDENT_GRADE;

请求输入学生成绩

CALLSTORE_STUDENT_GRADE;

ADDDI,7;

指向下一个学生

LOOPINPUT;

循环,直到输入所有学生成绩

CALLSORT;

排序

CALL_DISPLAY;

CALLFIND_RESULT;

OUTTODOS:

MOVAH,1;

任意键结束

MOVAX,4C00H;

返回DOS

******************存储学生数目的函数******************

STORE_STUDENT_NUMPROC;

调用之后,cx中存储了学生数(二进制)

PUSHAX

PUSHBX

MOVBX,0

S1:

MOVAH,1

CMPAL,0DH;

是否为回车

JES2

ANDAL,0FH;

转换为非压缩的BCD码

MOVNUMBER[BX],AL

INCBX

JMPS1

S2:

CMPBX,2

JGS5;

大于2

JZS3;

等于2

小于2

MOVAL,NUMBER

JMPS4

S3:

MOVAH,NUMBER

MOVAL,NUMBER+1

AAD;

BCD码转换为二进制数

S4:

MOVNUMBER+2,AL

MOVCX,0

MOVCL,NUMBER+2

S5:

POPBX

POPAX

RET

STORE_STUDENT_NUMENDP

******************存储学生信息的函数******************

STORE_STUDENT_INFORMATIONPROC

PUSHDX

MOVAL,18

MOVINFORMATION[SI],AL

LEADX,INFORMATION[SI]

MOVAH,0AH

MOVBL,INFORMATION[SI+1];

实际输入的字符个数

MOVAL,'

MOVINFORMATION[SI+BX+2],AL;

将回车换成'

MOVINFORMATION[SI+19],'

将每个存储单元的最后一个字节置为'

以便输出

POPDX

STORE_STUDENT_INFORMATIONENDP

******************存储学生成绩的函数******************

STORE_STUDENT_GRADEPROC

PUSHCX

MOVDX,DI

DEAL0:

判断是否为回车

JZDEAL2;

是回车

CMPAL,'

.'

是否为小数点

JNZDEAL1;

不是小数点

MOVBX,CX;

bx指向小数点处

INCBX;

标记小数点字符出现在第几个位置

DEAL1:

MOVBX,DX

MOVGRADE[BX],AL

INCCX;

记录输入字符的个数

INCDX

JMPDEAL0

DEAL2:

CMPBX,0

JNZDEAL3;

有小数点

无小数点

CMPCX,3

JGGOUT;

大于100

JZDEAL4;

等于100

小于100

CMPCX,2

JZDEAL5;

输入数目为2位数

个位数

DEAL6:

处理个位数

MOVAL,GRADE[DI]

SUBAL,'

0'

MOVGRADE[DI+5],AL

JMPGOUT

DEAL5:

处理2位数

MOVAH,GRADE[DI]

ANDAH,0FH

MOVAL,GRADE[DI+1]

ANDAL,0FH

AAD

DEAL4:

处理3位数

MOVAL,100

DEAL3:

处理带有小数部分的成绩

MOVAL,GRADE[DI+BX];

将小数部分处理

MOVGRADE[DI+6],AL

CMPBX,4

出现在输入字符的第四位,则输入的整数部分为3位数

整数部分大于3位数

CMPBX,3

出现在输入字符的第三位,则输入的整数部分为2位数

JMPDEAL6;

否则为个位数

GOUT:

POPCX

STORE_STUDENT_GRADEENDP

******************排序学生成绩的函数******************

SORTPROC

PUSHSI

PUSHDI

MOVDX,0

MOVDL,NUMBER+2

LOOP1:

使用冒泡排序法

MOVCX,DX

MOVDI,0

MOVSI,0

LOOP2:

先比整数部分,再比小数部分

MOVAL,GRADE[DI+5]

CMPAL,GRADE[DI+12]

JGNEXT;

大于,向下个移动

JLSWAP1;

小于,交换成绩,名字

等于,比较小数部分

MOVAL,GRADE[DI+6]

CMPAL,GRADE[DI+13]

JGENEXT;

大于或等于,向下个移动

SWAP1:

MOVBX,SI

SWAP11:

交换学生信息

MOVAL,INFORMATION[BX+2]

XCHGAL,INFORMATION[BX+22]

MOVINFORMATION[BX+2],AL

JNZSWAP11

SWAP2:

交换学生成绩

MOVAL,GRADE[DI+BX]

XCHGAL,GRADE[DI+BX+7]

MOVGRADE[DI+BX],AL

CMPBX,7

JNZSWAP2

NEXT:

ADDSI,20

ADDDI,7

DECCX

JNZLOOP2

DECDX

JNZLOOP1

POPDI

POPSI

SORTENDP

******************显示最后结果的函数******************

FIND_RESULTPROC

MOVCL,NUMBER+2;

cl中保存学生人数

F1:

CMPAL,100

JGFOUT;

JZF90;

CMPAL,90

JGEF90;

大于等于90

小于90

CMPAL,80

JGEF80;

大于等于80

小于80

CMPAL,70

JGEF70;

大于等于70

小于70

CMPAL,60

JGEF60;

大于等于60

小于60

处理<

60

MOVDL,N4

INCDL

MOVN4,DL

FNEXT:

处理平均成绩处理方式:

整数部分*10+小数部分,结果先除以学生人数,再输出(输出整数时除以10)

MOVDL,10

MULDL

MOVDL,GRADE[DI+6]

MOVDH,0

ADDAX,DX

ADDBX,AX

JMPF2

FOUT:

F90:

处理>

=90

MOVDL,N0

MOVN0,DL

JMPFNEXT

F80:

处理大于等于80小于90

MOVDL,N1

MOVN1,DL

F70:

处理大于等于70小于80

MOVDL,N2

MOVN2,DL

F60:

处理大于等于60小于70

MOVDL,N3

MOVN3,DL

F2:

JNZF1;

处理所有学生

MOVDX,OFFSETKAISHISHUCHU;

打印一段************

MOVDX,OFFSETAVERAGE_GRADE;

打印平均成绩

MOVAX,BX

DIVCX

MOVCL,10

DIVCL

CALLSHOW;

先打印平均成绩的整数部分

MOVDL,'

打印'

MOVAH,2

MOVAL,AH

再打印平均成绩的小数部分

MOVDX,OFFSETRESULT1;

输出大于等于90的人数

MOVAL,N0

CALLSHOW

MOVDX,OFFSETRESULT2;

输出大于等于80并小于90的人数

MOVAL,N1

MOVDX,OFFSETRESULT3;

输出大于等于70并小于80的人数

MOVAL,N2

MOVDX,OFFSETRESULT4;

输出大于等于60并小于70的人数

MOVAL,N3

MOVDX,OFFSETRESULT5;

输出小于60的人数

MOVAL,N4

FIND_RESULTENDP

******************输出分数排序的函数******************

_DISPLAYPROC

MOVDX,OFFSETGRADE_RANK

D1:

MOVDX,OFFSETINFORMATION

ADDDX,SI

ADDDX,2

MOVDX,OFFSETBLANK;

打印一段空白

movAl,GRADE[DI+5]

pushax

MOVGRADE[DI+5],'

将保存成绩的单元中第6个字节置为'

,便于输出

MOVDX,OFFSETGRADE;

输出成绩

ADDDX,DI

popax

movGRADE[DI+5],Al

MOVDX,OFFSETHUANHANG;

打印换行

JNZD1;

直至将所有成绩都输出

_DISPLAYENDP

******************将二进制数输出的函数******************

SHOWPROC

MOVCL,100

MOVAH,0

DIVCL;

将al中的二进制数除以100

MOVBX,AX;

保存

CMPAL,0

JZX1;

如果商为0,则表示原数小于100

否则将百位数打印出来

MOVDL,AL

ADDDL,30H

X1:

MOVAL,BH

将al中的二进制数除以10

JZX2;

如果商为0,则表示原数小于10

否则将十位打印出来

X2:

打印个位

MOVDL,BH

SHOWENDP

****************

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2