北邮汇编语言实验报告文档格式.docx
- 文档编号:3656162
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:27
- 大小:57.73KB
北邮汇编语言实验报告文档格式.docx
《北邮汇编语言实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《北邮汇编语言实验报告文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
(2)排序:
(按成绩分布排序)
(3)提示信息:
Student_num:
提示输入学生数目
student_information:
提示输入学生信息
student_grade:
提示输入成绩信息
average_grade:
提示输出平均成绩
grade_rank:
提示输出成绩排名
Result1:
(90-100)分数段人数
Result2:
(80-90)分数段人数
Result3:
(70-80)分数段人数
Result4:
(60-70)分数段人数
Result5:
(0-60)分数段人数
blank:
输出空格,便于查看结果
huanhang:
输出换行,便于查看结果
3.子程序:
(1)store_student_num存储用户输入的学生数目;
(2)store_student_information存储学生姓名和班级和学号;
(3)store_student_grade存储学生成绩;
(4)sort排序学生成绩的函数;
(5)find_result显示最后结果的函数;
(6)display输出分数排序的函数。
(7)show将二进制数(不大于127的十进制整数)输出的函数
4.流程图:
3、运行实例:
输入四个学生的信息:
结果如下
4、实验总结
通过这次的汇编程序,我从中学习到了很多知识。
虽然刚开始的时候遇到了很多难题,但是通过与老师、同学的交流之后,逐步克服了一个个的难题。
提高了自己编程的思维能力,在将来的学习,生活之中能够快速的解决问题。
汇编相对于别的编程语言而言,难度是比较大。
汇编是直接对CUP进行操作,能够直接控制计算机编程。
由于汇编不像JAVA
那样的高级编程语言面向对象,在编程的时候思维有点乱,容易出错,而且小的错误也不容易找到,特别是程序代码长的时候。
5、附页(源代码)
;
输入学生数目格式:
1到99的整数
输入学生信息格式:
班级(class)-学号(NUM)—姓名(NAME),班级最多5位,学号最多5位,姓名最多6位,加上1位中间分隔符—
输入学生成绩格式:
0.0-100.0最多一位小数
!
警告:
任何错误的输入都将导致程序运行失败或错误!
#######################################################数据段开始
DATASSEGMENT;
此处输入数据段代码
;
输入输出提示字符
student_numdb'
Pleaseinputthenumberofstudents(1-99):
'
0dh,0ah,'
student_informationdb0dh,0ah,'
Pleaseinputthestudentinformation(CLASS-NUM-NAME):
student_gradedb0dh,0ah,'
Pleaseinputthestudentgrade(0.0-100.0):
average_gradedb0dh,0ah,'
Theaveragegradeis:
result1db0dh,0ah,'
Thenumberofstudentin[Up90]is:
各分数段人数
result2db0dh,0ah,'
Thenumberofstudentin[80-90]is:
result3db0dh,0ah,'
Thenumberofstudentin[70-80]is:
result4db0dh,0ah,'
Thenumberofstudentin[60-70]is:
result5db0dh,0ah,'
Thenumberofstudentin[Below60]is:
grade_rankdb0dh,0ah,'
Thegraderank(fromhightolow)is:
打印排名
blankdb'
'
'
huanhangdb0dh,0ah,'
kaishishuchudb0dh,0ah,'
***********************************'
数据
numberdb3dup(0);
第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进制)
0对应最大字符,1对应实际输入,2-18对应输入信息,19对应'
informationdb99dup(20dup(0))
用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数
gradedb99dup(7dup(0))
average_grade_bufferdb2dup(0);
第一个存整数部分(二进制形式),第二个存小数部分(二进制形式)
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;
存储学生总数,结果送cx中
cmpcx,0;
输入为0退出
jleOutToDOS
cmpcx,100;
学生数超出本程序范围,退出
jgeOutToDOS
input:
movdx,offsetstudent_information;
请求输入学生信息
movah,09
callstore_student_information;
存储学生信息
addsi,20;
指向下一个学生信息
movdx,offsetstudent_grade;
请求输入学生成绩
movah,09
int21h
callstore_student_grade;
存储每个学生成绩
adddi,7;
指向下一个学生
loopinput;
循环,直到输入所有学生成绩
callsort;
排序
callfind_result;
显示平均成绩和分段人数
calldisplay;
显示排序结果
OutToDOS:
movah,1;
任意键结束
int21h
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
popax
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:
moval,grade[di+5]
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,结果先除以学生人数,再输出(输出整数时除以10)
movdl,10
muldl
movdl,grade[di+6]
movdh,0
addax,dx
addbx,ax
jmpF2
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
callshow
movdx,offsetresult4;
输出大于等于60并小于70的人数
moval,n3
movdx,offsetresult5;
输出小于60的人数
moval,n4
Fout:
find_resultendp
##########输出分数排序的函数
displayproc
movdx,offsetgrade_rank
D1:
leadx,offsetinformation
adddx,si
adddx,2
movdx,offsetblank;
打印一段空白
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 邮汇 语言 实验 报告