汇编语言成绩统计系统的实现
- 格式:doc
- 大小:145.00 KB
- 文档页数:17
汇编语言程序设计创新实验项目1. 编写一个完整的程序:根据零件的数量和总价格,计算出零件的单价。
主程序MAINPRO允许用户在键盘上输入零件数量和总价格;子程序SUBCONV 把从键盘输入的ASCII 码转化为二进制;子程序SUBCALC 计算出零件的单价;子程序SUBDISP 把二进制表示的单价转化为十进制数并显示出结果。
要求:在程序设计时要求使用顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,对于较大的子程序最好使用子程序嵌套,程序中如有多次重复的代码最好使用重复汇编。
2.编写一个完整的程序,分别输入有一个班学生的百分制成绩,根据学生百分制成绩转换出五级分数制。
如低于60分为E,60-69为D、70-79为C、80-89为B、90-99为A。
并统计该班学生人数。
要求:1、学生成绩从键盘接收;2、本程序可以重复运行,自行设计退出程序的方法;3、程序具有可操作性,如,应该有提示语句和判断非法操作的方法和处理方式。
3. 编写一个完整的程序,在屏幕上显示如图所示数字拼成的形状。
01234567891234567890234567890134567890124567890123567890123467890123457890123456890123456790123456784、按要求编写一个完整的程序。
要求:1、自BUFFER开始的内存单元中,存有一个ASCII码字符串。
查找已知字符串中含有多少个子字符串‘AB’的个数,将统计结果以十进制形式显示输出。
2、在查找到子字符串‘AB’后添加空格字符。
5、按要求编写一个完整的程序。
要求:1、编写子程序SORT,将内存中10个无符号字数据由小到大排序。
2、编写子程序FIND,在上述已排好的数据区里查找某一个数,若找到,显示其在数据区的位置,否则显示‘N’字符。
3、编写调用程序,完成排序及检索任务。
6、试编写一程序,要求根据用户键入的月份在终端上显示该月的英文缩写名。
实验四循环结构程序设计上机实验
一、实验目的:
1、掌握循环结构程序设计的基本方法。
2、掌握用masm for Windows编辑、编译、连接汇编语言源程序的基本方法。
3、掌握DEBUG调试程序的U、D、R、T、G、Q常用命令的用法。
二、实验步骤:
1、用ASM masm for Windows将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,则修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
4、用DEBUG调试程序并分析结果。
三、实验内容:
1. 在数据段中从变量DA1开始有N个带符号数。
把其中的正数、负数(设没有0)依次存入DA2、DA3开始的单元中并分别统计正、负数的个数存入DA4、DA5字节单元之中。
试编写程序。
将本例中的DEC指令修改为LOOP指令来实现循环程序的设计。
在修改过程中还应修改哪能些指令,请自己分析,为什么?
四、综合练习:
1.编写求100个正整数的和的程序。
如果和不超过16位字的范围(即65535),则将其和保存到WORDSUM单元中,若超过则显示OVERFLOW。
2.设有N个数,连续存放在以BUF为首址的字存储区中,试编写程序,统计其中最高的6位全1的数个数并将统计结果送入寄存器DX中。
五、实验报告(注意:将报告正反两面打印后用手写)附件如下:
实验四循环程序设计实验报告学号姓名成绩。
汇编语言程序设计实验指导【实验提要】以下列举的10个实验,都是以Intel的8086及后续系列微处理器的指令系统为核心,采用宏汇编工具MASM6. X以及调试工具DEBUG或DEBUG32,针对本教材所述内容进行相关的上机实践。
旨在帮助学生加深认识和理解理论教学知识,通过大量的上机实验熟悉8086 CPU的指令功能、用途和使用技巧,进而提高汇编语言程序设计的能力。
(带*号的为选作内容)实验一调试工具DEBUG的应用实验目的通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG的功能;2、DEBUG命令: A,D,E,F,H,R,T,U的使用;3、BCD码、ASCII码及用十六进制数表示二进制码的方法;4、寄存器: AX,BX,CX,DX,FLAGS,IP。
内容及步骤注:本次实验可以参照教材上关于DEBUG的叙述内容进行。
一、DEBUG 命令使用1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。
5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。
6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H (2)23H,45H (3)AB,3045H注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。
一.选择题(30)1.在一个8位二进制的机器中,-1的补码是AA.0FFH B.0FEH C.80H D.81H2.指令寄存器(IP)存放的是:____D____A.操作数B.操作码C.指令D.指令地址3.8088CPU的地址总线和数据总线分别是DA.16根和8根B.20根和16根C.16根和20根.D. 20根和8根4、5、6.用ASCII码(七位)表示字符5和7是__(1)_D_;按对应的ASCII值来比较__(2)_B; 二进制的十进制编码是___(3)_A.(1) A.1100101和1100111 B.10100011和01110111C.1000101和1100011D.0110101和0110111(2) A.“a”比“b”大 B。
“f”比“Q”大C.空格比逗号大 D。
“H”比“R”大(3)A.BCD码 B。
ASCII码 C。
机内码 D。
二进制编码7.在下列指令中,不影响堆栈内容的指令是__C_____A.PUSHB.RETC.JMPD.CALL8.中断向量地址是_B_____A.子程序入口地址B.中断服务子程序入口地址C.中断服务子程序入口地址指示器D. 剩余程序入口地址9.8088/8086工作于最大模式,是因为 CA.可以扩展内存空间B.可以扩大I/O空间C.可以构成多处理系统D.可以提高CPU主频10. 8088/8086 CPU要处理“1”号中断,其中断向量的地址在___D______A.00000H---00003HB.00001H-----00004HC.FFFF0HD.00004H----00007H11.执行串操作指令,MOVSB命令实行的操作是___B____A. (AX)←(BX)B.(DI)←(SI)C.(BX)←(BP)D.(BX)←(CX)12.汇编语言程序中的伪指令的功能是_____C___A.解释指令符号B.控制程序的执行C.控制汇编的执行D.仅给标号赋值13.可以直接存取64K字节内存的CPU地址线需要 AA.16 B。
《微机原理与接口技术》课程设计(学年论文)说明书课题名称:学生课程成绩统计程序设计(A1 难度系数1)学生学号:专业班级:学生姓名:学生成绩:指导教师:课题工作时间:2013-6-13 至2013-6-18填写说明:1. 一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;2. 第五项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3. 成绩评定由指导教师按评定标准评分。
4. 此表格填写好后与正文一同装订成册。
课程设计评审标准(指导教师用)学生课程成绩统计程序设计说明书1、方案论证(1)汇编程序设计步骤、要点(2)DOS系统调用2、程序设计(1)总体设计设计分析与思路说明总体框图(框图中每一个模块的功能说明)(2)程序设计流程图程序代码及注释3、程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(5)程序运行结果截屏图片结果说明4、结论用结果说明设计成功之处,对某些问题进行分析、展望。
1.方案论证(1)汇编程序设计步骤、要点1 引言汇编语言能充分利用计算机所有的硬件特性并对硬件进行直接控制,汇编语言编制的程序比使用其它语言编制的程序执行速度快、资源占用少,所以,汇编语言在工业自动化控制和智能化产品的生产上有着十分广泛的用途。
但是,汇编语言是一种低级符号语言,与机器指令有着一一对应的关系,与高级语言相比不太符合人的思维习惯,它向寄存器、内存单元,必须通过一种具体的计算机来学习,同时要求初学者应具有一定的硬件基础,真正掌握起来有一定的难度。
2 汇编语言程序设计技巧808618088汇编语言程序设计中一般说来遵循以下几个步骤:首先分析题意,确定解题算法。
然后根据算法由粗到精画程序流程图,最后编写程序。
3 寻址方式的准确使用程序设计的目的是将输入数据加工处理转换成输出数据,获取正确的数据是保证程序处理正确的前提,而获取正确的数据又与正确地使用寻址方式关系密切,所以有必要先从寻址方式谈起。
第一章绪论自1946 年人类第一台计算机(ENIAC)问世以来,50 多年过去了,计算机的软硬件发展日新月异,突飞猛进。
以个人电脑为例,硬件方面,以CPU、内存、硬盘为代表,CPU 已发展到当今的P4 2.8GHZ,PⅢ和PⅡ已淡出历史舞台,成为昨日黄花;256M DDR 内存,80G 以上的7200 转硬盘已成为标准配置。
如此高性能的配置,就是和 5 年之前相比,也不知高出了多少倍。
软件方面,已经从当初晦涩难懂的机器语言、汇编语言过渡到今天的第四代语言甚至第五代语言,第四代语言(4GL)是完全非过程化的语言,这种语言只要求用户指明将要干什么,而无需指明怎么干,如何做这一工作,则完全交给软件模块来自动处理,大大提高了软件的开发效率和软件质量,使软件开发人员从繁重的脑力、体力劳动中解脱出来。
伴随着计算机软硬件技术的发展,计算机的技术和应用获得了突飞猛进的发展,计算机已经在大致如下的领域得到广泛的应用:1、科学计算:如在天文学、生物学、空气动力学、核物理学、地质勘探、新材料的研制和天气预报等领域中。
2、数据处理:与科学计算不同,数据处理涉及的数据量大,但计算方法较简单。
3、过程控制:指由计算机通过传感器及时采集数据,根据采集的数据和预先设定的要求,由计算机处理后,产生控制信号并通过控制系统对受控对象进行控制或调整。
4、计算机模拟:用计算机程序及相应的设备代替或模拟实物或实际环境,用于实验、测试、特殊训练等。
5、计算机辅助系统:包括计算机辅助设计,计算机辅助制造、计算机辅助教育等。
6、人工智能:指用计算机模拟人的思维和行为,包括推理,学习,模拟人的感知等。
现在在机器人、专家系统、虚拟现实等方面已经获得了实际的应用。
7、办公自动化:可分为事务型、管理型和决策型三个层次。
事务型主要处理日常的办公事务。
管理型办公自动化系统又称为管理信息系统。
决策型办公自动化系统是在上述两个系统的基础上增加决策支持系统构成的。
一.选择题(30)1.在一个8位二进制的机器中,-1的补码是AA.0FFH B.0FEH C.80H D.81H2.指令寄存器(IP)存放的是:____D____A.操作数B.操作码C.指令D.指令地址3.8088CPU的地址总线和数据总线分别是DA.16根和8根B.20根和16根C.16根和20根.D. 20根和8根4、5、6.用ASCII码(七位)表示字符5和7是__(1)_D_;按对应的ASCII值来比较__(2)_B; 二进制的十进制编码是___(3)_A.(1) A.1100101和1100111 B.10100011和01110111C.1000101和1100011D.0110101和0110111(2) A.“a”比“b”大 B。
“f”比“Q”大C.空格比逗号大 D。
“H”比“R”大(3)A.BCD码 B。
ASCII码 C。
机内码 D。
二进制编码7.在下列指令中,不影响堆栈内容的指令是__C_____A.PUSHB.RETC.JMPD.CALL8.中断向量地址是_B_____A.子程序入口地址B.中断服务子程序入口地址C.中断服务子程序入口地址指示器D. 剩余程序入口地址9.8088/8086工作于最大模式,是因为 CA.可以扩展内存空间B.可以扩大I/O空间C.可以构成多处理系统D.可以提高CPU主频10. 8088/8086 CPU要处理“1”号中断,其中断向量的地址在___D______A.00000H---00003HB.00001H-----00004HC.FFFF0HD.00004H----00007H11.执行串操作指令,MOVSB命令实行的操作是___B____A. (AX)←(BX)B.(DI)←(SI)C.(BX)←(BP)D.(BX)←(CX)12.汇编语言程序中的伪指令的功能是_____C___A.解释指令符号B.控制程序的执行C.控制汇编的执行D.仅给标号赋值13.可以直接存取64K字节内存的CPU地址线需要 AA.16 B。
一、软件背景介绍学生成绩管理系统设计与实现学生成绩管理系统设计与实现摘要学生成绩管理系统是学校不可或缺的一个组成部分,随着计算机技术的逐渐发展,计算机在教育系统中的应用得到了巨大的发展。
教务管理正在逐步迈向管理信息现代化。
但是我国的教务管理信息化水平还处在初级阶段,主要表现在对学生的成绩管理、学生的课程管理还是采用原有的人工管理方式。
学校的规模不断扩大,学生数量急剧增加,有关学生的各种数据也成倍增长。
面对庞大的信息量,这时的人工管理几乎无法实现,在这种情况下用数据库进行管理变的尤为必要,这可以发挥计算机的优势,就需要有教务管理系统来提高学生成绩管理工作的效率.通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量和减少人为的错误。
进行数据库设计首先必须准确了解也分析用户需求(包括数据和处理)。
目的是为学生成绩管理数据库系统的设计打下牢牢的基础,是数据库开发的重要文件依据,主要为数据库设计人员使用,是用户和系统分析员的项目依据文件。
作为“地基”的需求分析是否做得充分与准确,它决定了在其上构建数据库大厦的速度和质量。
需求分析做得不好,甚至会导致整个数据库设计返工重做。
成绩管理系统是针对高等院校的学生学籍管理,因此此系统的用户应包括系统管理员和学生。
主要涉及系部信息、班级信息、学生信息、课程信息和成绩等多种数据信息。
经走访调查得出教务员有以下要求:(1)管理员、教师和学生登录后可以改自己的密码;(2)管理员、教师和学生可以查询课程信息;(3)管理员可以删除学生信息、教师信息、登录用户信息,还可以查询和删除学生成绩,添加、删除课程信息;(4)管理员批量导入、导出数据;(5)教师可以录入、修改成绩,批量导出数据;(6)学生可以查询成绩。
不过此次我做的系统只针对学生成绩管理实现的对学生成绩的统计,主要运用汇编语言来完成各个模块的应用,先以内存存储单元中读取数据(假设的学生成绩数据),将成绩及姓名放在两个存储单元,然后通过循环,地址的的增加,实现姓名与成绩的对应输出,其中有冒泡排序的实现及十进制显示输出,还有ABCDE等级的统计及附加功能等级的判断。
实现的功能略显逊色,但应用了很多技术,主要实现的功能如下:(1)显示学生成绩;(2)对成绩的等级划分;(3)对学生成绩进行排序;(4)输入新的学生姓名及成绩,并将其入库;(5)输入新的成绩显示出此成绩的等级;(6)清屏;(7)退出系统。
1、成绩统计管理系统运行的功能主菜单如下:图1主菜单功能图2、一号显示预存姓名及分数功能,运行时功能图如下:图2一号功能运行显示图二、核心算法思想先以内存存储单元中读取数据(假设的学生成绩数据),将成绩及姓名放在两个存储单元,然后通过循环,地址的的增加,实现姓名与成绩的对应输出。
统计可以设计个子程序SORT,直接调用统计出ABCDE等级的人数。
然后用冒泡法对成绩排序,再调用2-10进制显示转换的子程序显示结果。
增强功能输入数据存在内存中后,其显示及统计的实现和基本功能的方法是一样的。
在输入数据的时候,要符合自己定义的类型。
要体现统计和10进制输出的实现采用预存多组数据在内存单元中,这样一方面在运行时避免输入大量数据,而可以直接输出,检验结果;另一方面,可以防止写入的类型不对而卡住,而影响实现其他后续功能。
其次是考虑到程序的可行性问题。
当进入提示用户输入错误信息时如(当输入非1-7),系统不会必需要有报错及异常中断情况,否则进入死循环。
所以在程序设计时必须加对用户输入选项数据进行判断的分支或子程序。
在冒泡排序的实现上要注意是字还是字节,否则会无法达到每个都参与排序的目的。
在增强功能的实现中要特别主义审题, 即学生姓名及成绩根据屏幕提示由键盘录入再存入数据存储单元,要在程序代码功能中显示出来,开始对题审的不够清楚,所以才会有由键盘录入存入数据存储单元后显示及判断成绩等级的分支程序.而后申请题后加了4号选项功能,输入几组数后输出,输出对应的姓名及分数,如果还要实现对其统计,只需调用前面的2号选项的子程序即可。
三、核心算法流程图图3 程序主流程图2、在成绩统计管理程序中,三号功能运用冒泡法实现了对已输入的学生成绩的排序,其流程图如下:图4 三号功能流程图3、排序后十进制显示和顺序十进制显示调用的子程序,其流程图如下:图5 十进制显示算法流程图四、下面是成绩统计成绩系统的源代码:stack segment stackdb 200 dup (0)stack endsDATA SEGMENT PARA 'DA TA'menu DB ' ******************************* ',0dh,0ah ;主菜单列表DB ' * main menu * ',0dh,0ahDB ' * * ',0dh,0ahDB ' * 1.output all student score * ',0dh,0ah;输出所有学生的成绩DB ' * 2.statistics score(ABCED) * ',0dh,0ah;显示每个成绩段的学生人数DB ' * 3.sort score * ',0dh,0ah;学生成绩的排序DB ' * 4.intput five names and scores * ',0dh,0ah;任意添加五个学生的姓名与成绩DB ' * 5.intput one name and score * ',0dh,0ah;任意输入一个学生的姓名与成绩,会显示出其成绩的等级DB ' * 6.clear screen * ',0dh,0ah;清屏DB ' * 7.exit * ',0dh,0ah;退出DB ' ************************ ',0dh,0ahPlase DB'plasechoose:(1-7): ',0dh,'$' ;选择1-7err db ' the data error$'put0 db 'plase intput one name and score',0dh,'$'put db 'plase intput five names and scores',0dh,'$'bye db '***************thank you to use*********************',0dh,'$'score dw 64,71,66,61,78,80,83,89,79,96n1 =($-score)/2;score的长度scoreadd DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd2 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd3 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd4 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd5 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'score1 db 15 dup(0)mes1 DB 'THE NUMBER OF E(0---59):$'; 显示E等级的人数的界面,对应V1mes2 DB 'THE NUMBER OF D(60--69):$'; 显示D等级的人数的界面,对应V2mes3 DB 'THE NUMBER OF C(70--79):$'; 显示C等级的人数的界面,对应V3mes4 DB 'THE NUMBER OF B(80--89):$'; 显示B等级的人数的界面,对应V4mes5 DB 'THE NUMBER OF A(90-100):$'; 显示A等级的人数的界面,对应V5mes6 DB ' $'; 12字节空格使显示分数及对应名字相隔mes7 db 'name: score:',0ah,0dh,'$'mes8 db 'name:',0ah,0dh,'$'; 提示输入姓名mes9 db 'score:',0ah,0dh,'$'; 提示输入分数bo1 DB 'you input the score of student is A$'; 判断输入的数据的等级后显示对应级别A bo2 DB 'you input the score of student is B$';判断输入的数据的等级后显示对应级别B bo3 DB 'you input the score of student is C$'; 判断输入的数据的等级后显示对应级别C bo4 DB 'you input the score of student is D$';判断输入的数据的等级后显示对应级别D bo5 DB 'you input the score of student is E$'; 判断输入的数据的等级后显示对应级别E bo6 DB ' 1.output all student score 2.statistics score(ABCED) ' DB ' 3.sort score 4.intput five names and scores 'DB ' 5.intput one name and score 6.clear screen 7.exit ',0dh,'$' ;清屏后提示v1 db ? ;0---59段人数计数器v2 db ? ;60--69段人数计数器v3 db ? ;70--79段人数计数器v4 db ? ;80--89段人数计数器v5 db ? ;90-100段人数计数器nam1 DB 'chen bo$';学生姓名已存入指定数据存储单元NAM(1-10)nam2 DB 'chenhin$'nam3 DB 'chenhun$'nam4 DB 'huanwei$'nam5 DB 'tanghui$'nam6 DB 'chenfan$'nam7 DB 'mao yun$'nam8 DB 'zhanjun$'nam9 DB 'zhanhua$'nam10 DB 'chenlin$'nam11 DB 8; 增加的名字存入指定单元DB ?DB 8 DUP(0)nam12 DB 8DB ?DB 8 DUP(0)nam13 DB 8DB ?DB 8 DUP(0)nam14 DB 8DB ?DB 8 DUP(0)nam15 DB 8DB ?DB 8 DUP(0);NUM DB 21,22,23,24,25,26,27,28,29,30;***********显示***************show macro mlea dx,mmov ah,9int 21hendm;***********输入******************input macro flea dx,fmov ah,10int 21HendmDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART PROCMOV AX,DA TAmov ds,AXshow menuchen:show plasemov ah,1;选择菜单项int 21hcall adcmp al,'7'ja error ;当输入非法数据时,报错cmp AL,'1'jb error; 当输入非法数据时,报错CMP AL,'1'JE one; 当输入1时,转入分支程序,实现输出分数及名字功能CMP AL,'2'JE two; 当输入2时,转入TWO分支程序,实现统计功能CMP AL,'3'JE three; 当输入3时,转入THREE分支程序,实现排序功能cmp AL,'4'JE fo; 当输入4时,转入FO分支程序,实现键盘输入功能及输出cmp AL,'5'je fiv; 当输入5时,转入FO分支程序,实现键盘输入功能能及等级判断cmp al,'6'je six;当输入6时,转入SIX分支程序,实现清屏CMP AL,'7'jmp byebye; 当输入7时,转入BYEBYE分支程序,退出error: ;分支程序,当输入非法数据时,报错show errcall adjmp chenquit: ; 分支程序,退出mov ah,4chint 21hbyebye:show byejmp quit;******************** 1显示所有成绩************** one: ; ONE分支程序,实现输出分数及名字功能mov cx,n1lea di,scoreshow mes7mov bp,offset nam1chen1:;*********以下显示姓名**************mov dx,bpmov ah,9int 21hadd bp,8show mes6;*********以下显示分数**************mov ax,[di]mov bx,10lea si,score1call radixmov [si],byte ptr 0dhmov [si+1],byte ptr 0ahmov [si+2],byte ptr '$'lea dx,score1mov ah,9int 21h;以上是2-10进制转换及显示add di,2;*********以上显示分数**************dec cxjnz chen1jmp chen;***********2-10***************radix proc;2-10进制转换push cx;(cx)=10push dx; mov cx,0;P进制入站时的计数器L1:MOV DX,0DIV BX;商置ax,push dx;inc cxor ax,axjne L1l2:pop ax;出栈cmp al,10;比较jb next;跳入下一个add al,7;进行加法运算next:add al,30hmov [si],alinc sidec cxjnz l2pop dx;出栈pop cx;出栈retradix endp; *****************2号统计各分段人数****************** two:lea si,scoremov cx,n1call count ;统计各分段人数call adjmp chen; ********************3号顺序分数排序*************** three:lea bx,scoremov cx,n1call sort;排序并存放在score为首址的单元中;************显示所有成绩************mov cx,n1lea di,scorechen2:mov ax,[di]mov bx,10lea si,score1call radixmov [si],byte ptr 0dhmov [si+1],byte ptr 0ahmov [si+2],byte ptr '$'lea dx,score1mov ah,9int 21h;以上是2-10进制转换及显示add di,2dec cxjnz chen2jmp chen;***********冒泡排序子程序*************** sort proc;P128排序push ax;入栈push dx;入栈push si;入栈push di ;入栈mov dx,cxsub dx,2mov si,2lopi:mov di,siadd di,2mov ax,[bx+si-2]lopj:cmp ax,[bx+di-2]jbe lopkxchg [bx+di-2],axmov [bx+si-2],axlopk:add di,2cmp di,20jbe lopjadd si,2cmp si,18;比较jbe lopipop dipop si;出栈pop dx ;出栈pop ax;出栈ret;返回sort endp; ******************4输出输入成绩******************* fo:show put;显示call adshow mes8;显示信息input nam11;输入姓名call adshow mes9;显示信息input scoreadd;输入call ad;调动程序show mes8;显示信息input nam12call adshow mes9;显示信息input scoreadd2call ad;调动程序show mes8;显示信息input nam13call ad;调动程序show mes9;显示信息input scoreadd3call ad;调动程序show mes8input nam14call adshow mes9input scoreadd4call ad;**************显示对应名字分数************show mes7;显示对应名字分数; call adshow nam11+2;显示nameshow mes6show scoreadd+2;显示scorecall adshow nam12+2;显示nameshow scoreadd2+2;显示scorecall adshow nam13+2;显示nameshow mes6show scoreadd3+2;显示scorecall adshow nam14+2;显示nameshow mes6show scoreadd4+2;显示scorecall adshow nam15+2;显示nameshow mes6show scoreadd5+2;显示scorecall adjmp chenfiv:show putcall adshow mes8;显示信息input nam11;输入姓名call ad;调用show mes9;显示信息input scoreaddcall adshow mes7;显示对应名字分数show nam11+2;显示nameshow mes6show scoreadd+2;显示scorecall adlea bx,scoreadd+2call abcdecall adjmp chen; *******************6清屏程序************* six:call clrshow bo6show put0call adshow mes8input nam11;输入姓名call adshow mes9;显示信息input scoreadd;输入分数call ad;*************判断ABCDE子程序************* abcde procpush ax;入栈mov ax,0lea bx,scoreadd+2mov ah,[bx]inc bxmov al,[bx];把bx中所存地址包含的内容移动到al b1:cmp ax,'59';与59进行比较jg b2;>show bo5;0-59call adjmp chen;跳到chen:执行程序b2:cmp ax,'69';与69进行比较jg b3 ;60-69 >show bo4call adjmp chen;跳到chen:执行程序b3:cmp ax,'79';与79进行比较jg b4 ;70-79 >show bo3call adjmp chen;跳到chen:执行程序b4:cmp ax,'89';与89进行比较jg b5 ;80-89>show bo2call adjmp chen;跳到chen:执行程序b5:call adjmp chenpop axabcde endp; ***********统计成绩子程序****************** count procm1:mov bx,[si]add si,2cmp bx,59jg m2;>inc v1 ; 0---59段人数计数器jmp m6 ;0-59m2:cmp bx,69jg m3 ;60-69 >inc v2 ; 60--69段人数计数器jmp m6m3:cmp bx,79jg m4 ;70-79 >inc v3 ; 70--79段人数计数器jmp m6m4:cmp bx,89jg m5 ;80-89>inc v4 ; 80-89段人数计数器jmp m6m5:inc v5 ; 90-99段人数计数器m6:loop m1mov dx,offset mes1mov ah,09hint 21hmov dl,v1add dl,30hmov ah,02hint 21hcall admov dx,offset mes2int 21hmov dl,v2add dl,30h;相加mov ah,02h ;将02h中的内容移到ah中int 21hcall admov dx,offset mes3 ;移动mov ah,09h ;将09h中的内容移到ah中int 21hmov dl,v3add dl,30h ;将30h中的内容移到d1中mov ah,02h ;将02h中的内容移到ah中int 21hcall admov dx,offset mes4 ;偏移地址mov ah,09hint 21hmov dl,v4add dl,30hmov ah,02hint 21hcall admov dx,offset mes5mov ah,09hint 21hmov dl,v5add dl,30hmov ah,02hint 21hretcount endp; ****************清屏子程序*********** CLR PROCMOV AH,2MOV BH,0MOV DX,0INT 10HMOV AH,0AHMOV AL,' 'MOV BH,0MOV CX,2000INT 10HretCLR endp; ************回车换行子程序*******ad procpush ax;压入栈push dx;压入栈mov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hpop dx;出栈pop ax;出栈retad endp;*********************************START ENDPcode endsend START;结束程序五、心得体会通过这次学生成绩课设,我发现有很多东西,很多细节没注意,如循环中的循环次数的设计应特别注意,宏调用及子程序调用的区别与便捷性等等,真正自己动手做了才发现了自己的理论知识是如此的不扎实,字符窜的输入及输出要注意结束符等等。