由题意,要求五十个同学的成绩,令成绩的范围是0~100,随机数生成50个数据:
46 30 39 68 16 66 35 18 40 56 52 57 82 98 44 74 83 79 96 95 77 54 63 43 31 11 25 85 13 86 53 47 42 2 6 80 51 88 34 87 97 70 91 45 41 22 15 64 14 55
分析:
题目要求计算五十个同学成绩的平均值,求出最大值,最小值,不妨在主程序中计算平均值,使用子程序计算最大值、最小值,简化主程序的长度。
首先在数据段中输入五十个同学的成绩,并为最大值、最小值留下空间,估算成绩之和最大为50*100=5000=1388h没有超过十六位,故使用无符号的字加法,需要把数据段中的字节数据符号扩展到十六位,再累加,用dx寄存器临时存放累加的成绩之和,用ax存放实际总成绩之和,除以学生总人数50,al寄存器存放计算的商,ah寄存器存放计算的余数。
主程序代码:
首先利用堆栈的操作保护寄存器ax,bx的值,不影响主程序的代码,50个数比较找到最大数,只需要比较49次即可,令al寄存器为临时存储最大数的变量,依次递推和成绩数组后面的数比较,如果al大则继续比较,如果al小则让被比较的数作为al寄存器的值,不断迭代更新al的值,直到比较结束,al为最高成绩,存储到数据段中定义的变量max中,找到最高的成绩,最低成绩同理。
子程序代码cmp_max:
子程序代码cmp_min:
汇编学完了,总结收获记录日常,萌新请多指教~