已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XXXXX 课程设计说明书 汇编语言课程设计汇编语言课程设计 班级 网络 B101 姓名 XXX 学号 XXX 设计题目 学生成绩管理 设计时间 2012 12 09 至 2012 12 21 指导教师 XXX 评 语 评阅成绩 评阅教师 一 一 课程设计的目的课程设计的目的 进行程序设计方法和技能的基本训练 巩固在课堂上学到的有关程序设计 的基本知识和基本方法 通过实际动手能力的培养 进一步熟悉汇编语言的结 构和使用方法 达到能独立阅读 编制和调试一定规模的汇编语言程序的水平 二 二 设备与环境设备与环境 PC 兼容机 Windows 操作系统 汇编程序 masm for windows 2010 三 课程设计要求三 课程设计要求 1 要求编写并调试通过一个小型软件 实现对软件或硬件的操作 2 遵循模块化 结构化的程序设计方法 3 要求程序必须正确 4 程序简明易懂 多运用输入输出提示 出错信息及必要的注释 5 要求程序结构合理 语句使用得当 6 适当追求编程技巧和程序运行效率 四 课程设计的课题和分析四 课程设计的课题和分析 题目 学生成绩管理 分析 建立学生成绩文档 输入学生各门功课成绩 假设3门功课 修 改指定学号的学生成绩 统计指定学号的学生的平均成绩 总成绩 并在屏幕 上显示 统计指定学号课程的平均成绩 并在屏幕上显示 每门课程成绩分 析在屏幕上显示3门课程的各个分数段的学生人数 分数段为 90 80 89 70 79 60 69 59 此处可以以表格的形式给出数据 或者以坐标 曲线的形式给出 对学生成绩记录进行检索 按学号 姓名 成绩排序 按 总成绩降序排列 退出 最好用到文件处理 五 流程图 总体设计 详细设计五 流程图 总体设计 详细设计 学生成绩管理 最基本能实现的的功能是输入学号 同时显示该学生的基 本的信息 我设计的成绩管理系统功能还包括了显示该生的语文 英语 数学 三门学科的成绩 求出了该生的总分 以及该生的平均分 动态输入学生的成 绩 而且成绩是按照三位数显示的 可以输入任意多的学生人数 每个学生都 是三门课程 最后统计输入所有学生的各科各个分数段的人数 最后显示出所 有学生的成绩排名情况 为了使系统更实际一些 我设计的系统包括建立了文 件 方便学生的信息一次录入之后可以保存该数据 将该数据保存在 score txt 文件中 而且文件的路径与该软件默认的安装路径一致 为了使系 统更方便用户使用 我设计了菜单 菜单中设计了六个功能 包括插入 删除 查询 修改 查看 退出等 以下是对程序中常用的六个个功能进行解析 1 数据输入功能 这是必不缺少的功能 学号的输入 成绩的输入都离不了这 个功能 在输入成绩时 特地加了一个判断功能 在输入不合理的成绩时 程序将提示出错 并要求重新输入 在输入学生学号的时候 程序首先会判 断此学生的成绩是否存在 如果存在 则程序提示需重新输入 插入一条学 生记录子模块 搜索可用单元 接收输入的记录 并写入文件 建立成绩表 子模块 控制输入界面 并多次调用插入记录子模块 完成成绩的建立 2 修改功能 考虑到会存在在输入成绩时 容易输入错误 或者发生个别学生 的试卷被误判需修改成绩等情况 所以加了此功能 在发生以上情况时可以 调用此功能 修改指定学生的成绩 3 删除学生信息的功能 如果输入的学生信息根本不存在 或者发生其它情况 需删除一个无意义的学生信息时 可以调用此功能 此功能将实现将指定学 号学生的信息删除 4 信息查找功能 当需要查询某个学生的成绩或者检查输入是否有误时 可以 调用此功能 此功能实现将指定学号学生的成绩显示出来 实际上在调用此 功能的同时 程序会首先求的总成绩 平均成绩 然后产生排名结果 最后 将数据信息显示 5 显示排名信息功能 此功能会将学生成绩自动相加 得到每位学生的总成 绩及平均成绩 然后进行排名 得到每个学生的名词 最后按照输入顺序将 所有学生的学号 语文成绩 英语成绩 数学成绩 平均成绩 总成绩 名 次依次输出 模块中排名处理 学科平均成绩计算 均需取出某一学科的所 有学生成绩 因而此操作作为公用子程序以供调用 个人总分及平均分处理 较为简单 根据索引逐条处理记录 排名处理 排名结果为一维数组 与学 科成绩存在对应关系 查询学生记录 先进行学号匹配 再输出一条记录 查询该生的所有信息 6 文件写入及退出功能 此功能实现将学生的信息保存在一个文件里 此程序 默认将文件放在 C 盘下 名称为 score 属性为 txt 格式的文本文档 该 文档能够保存数据 以便数据不需要重复录入 是系统更能满足用户需求 写入文件完毕后 关闭文件 并退出程序 该程序的流程图 文件创建和菜单显示 在创建文件时使用命令请求创建文件 以下是菜单显示 首先显示菜单的界面 1 号功能接收功能 程序先和菜单中所有的功能都进行比较 假如都不是功能 菜单 则提示输入错误 重新输入 假如输入正确 则调用相对应的子程序 创建新文件 mov ah 3eh 设置属性 设置路径 保存文件 菜单的显示 选择系统功能 插入 调用 insert Y 修改 N 调用 modify Y 删除 N 调用 delete Y 调用 show 排名分段 调用 count N N N again Y 创建成功 ESC 调用 esc YYY 文件内容显示 在文件查找的子程序会显示该生的学号 三门的成绩 该生的总分 平均分和 该生成绩的排名情况 则在显示学生信息之前先处理数据 成绩和总分是按照 三位数的处理 学号和名次是按照两位数处理的 总分是字类型 其他的是字 节类型 所以必须要转换基址才能找到该生相对应的总分 文件的删除则是先 找到该学生的信息 然后显示该生的成绩缓存区的地址的下一位 则显示的是 空白 调用总分子程序 调用平均分子程序 学号存在 开始 N 输出三门成绩 以 si 和 n 的比较输 出学生信息 按三位处理 Y 输出平均分 需要扩展 si 指针依次下移2 输出总分 输出名次 结束 调用二位学号输入 的子程序 学号存在 开始 N 地址相减 Y Add si 1 删除完成 显示内容为空 循环删除之后内容 n 减 1 结束 为 0 为零则 ret Y N 总分和名次 定义子程序 sum proc near 先是从存放各科的缓存区移出数据 然后相加 采用循环 对用户输入的数据都是按照这个规则求出该生的总分 ping proc near 是求出该生的平均分 把之前存放在 zc bx 的总分数据取出来 然后除以 3 存储器清零 cx si 循环开始 开始 N Mov Mc si 1 名次初值是 1 Y jge continue 总分进行比较 Zc bx 与 Zc di add mc si 1 把学生个数给 bx 结束 大于或者等于 mov dx zc di Y N 名次为字节则 si 1 Si 与 ax 比较为 0 Y N 六 遇到的问题及解决办法六 遇到的问题及解决办法 问题问题 在编写程序时 不知道删除的程序应该如何实现 以及在创建文件时不 知道如何下手 然后老师提示是采用中断 我们需要自学中断 在设置光标和 屏幕显示也是采用中断 我自能自学课本的第九章内容 然后再写程序 在文 件的删除那里我卡住了研究好久也不知道怎么实现 最后我问了我同学 我们 一起讨论出的结果就是让屏幕不显示当前指针指向的内容 显示指针指向的一 个内容即可 这样就可以实现删除功能 删除功能就是删除该学号学生的成绩 数据 使这些数据全部清空则达到了删除文件的功能 关键代码 关键代码 此段代码时是实现数据段插入功能首先提示输入学号的语句 然后 调用 shuru 的宏定义 这个宏定义是接收键盘输入的两位数 然后处理成十进 制输出 比较符合实际 然后把 n 学生个数给 bl 将输入的学生学号保存在 xh bx 数组中 方便使用 然后判断该学号是否为第一次输入 是则跳转 假 如不是第一次输入 则提示用户该学号已经存在 需要重新输入 跳转到输入 成绩的子程序 在调用 shuruu 宏 此功能是处理三位数 使成绩是按照三位数 显示的 而且必须是在合理的范围内的 假如输入的数据是不合理的则又跳转 到重新输入的界面 要求用户输入有效数据 数据输入完成之后则存入相对应 的缓存区 input proc near 输入学生学号 成绩 e6 output mess1 shuru mov bl n 统计输入学生个数 mov bh 0 mov xh bx dl 输入的个数同时以地址指针形式显示 cmp bx 0 判断是不是第一次输入 如果是 则跳过比较程序 je qq1 继续输入成绩 mov cl n 如果不是第一次输入则要将输入的学号与以前输入的比较 cbw mov si 0 mov al xh bx e7 cmp al xh si je e5 add si 1 loop e7 jmp qq1 e5 output ts4 jmp e6 qq1 output mess2 如果不是重复的学号则可以继续输入成绩和其他信息 output mess4 mov si 0 mov cx 3 qq3 shuruu cmp dx 78h 比较输入的成绩是否大于120 如果大于120的话 那么重新输入成绩 jbe qq2 output ts3 提示输入错误 jmp qq1 qq2 mov buf si dl 把输入的学生信息保存在缓存区 output bg add si 1 loop qq3 mov bl n cbw mov al buf 0 以下是把之前的成绩数据保存到相对应的缓存区 mov chi bx al mov al buf 1 mov eng bx al mov al buf 2 mov mat bx al ret input endp 该关键代码是实现该学号学生的总分和名次的交换以及显示 首先是先把即将 要用到的存储器全部清零 将名次 mc si 初值为 1 si 依次 1 因为存放名次 的数组是字节类型的 然后把 n 学生的个数赋给 cl 接下来就是处理查找总分 的地址指针 因为总分数组是字型所以需要使 bl 2 然后 cx 清零 按照学号找 到相对应该生的总分 两个总分相比较此时大的则暂时为第一名 然后再继续 接受总分 接受的总分又要和之前暂时的第一比较然后和暂时的第二名比较 循环找出第一名 继续循环 显示总分和名次 rank proc near 排名 mov cl n mov ch 0 将用到的存储器清零 mov si 0 rrc mov mc si 1 将存储名次的存储器给予的初值是1 add si 1 loop rrc mov al n 此处2n最后放到al中 是为了下面总分的输出 mov bl 2 mul bl mov cl n mov ch 0 mov si 0 mov bx 0 mov di 0 rrb mov dx zc di rra cmp dx zc bx 总分之间的比较 jge continue 大于等于的那个分数则为第一名 add mc si 1 continue add bx 2 loop rra 余下的继续比较依次排出名次 mov cl n cbw add si 1 名次是字节类型的 add di 2 总分是字类型的 mov bx 0 cmp si ax ax里面是2n为了找到总分输出 jbe rrb ret rank endp 七 结果显示七 结果显示 菜单显示界面图 首次输入学生信息界面 修改学生信息界面 查看学生各个分数段的界面 删除学生信息界面 查看学生成绩排名情况界面 八 感想 收获及体会八 感想 收获及体会 终于完成了一门课程设计 比起之前完成的综合实验我觉得自己又上升了 一个台阶 学到的东西更多了 虽然自己付出了两周的时间 但是一个好的程 序员就需要舍得花时间去创建更加完美的程序 完成更多的功能 满足用户更 多的要求 这次的课程设计和自己上课学到的东西有很多不同 需要自己去查 看中断的代码 因为此次课程设计老师要求我们必须有文件的创建和文件存储 和文件关闭 给课程设计增加了难度 课设正是这样 所以在完成这门课设之 后 我真心觉得自己的编程水平又上升 同时也说明了好多东西是可以靠自己 领悟和自学得来的 课程设计完成了 但是我设计的成绩管理系统还是存在不 足 成绩都是用整数表示的 没有实现浮点运算 平均成绩也是按照整型的 查询功能中只能通过学号查询 没有实现学号或者通过姓名查询的选择 主菜 单界面设计不够人性化 不够简单明了 缺少美观 没有使用彩色的界面 虽 然我的程序中出现那么多的不完美 但是只有我有一颗追求完美的心 则我就 会有一个继续学下去的心 此次的课程设计 我还是和以前的综合实验的感触有些类似 在此之前 大多数时候都在用高级语言编写程序 已经习惯了高级语言的方便灵活的语法 形式 一下子突然转为用汇编语言进行程序设计 总是要经过一个很不习惯的 适应过程 但是我们学习编语言 可以让我们更好地理解程序设计的本质和原 理 对以后的学习和工作都带好很多好处 这次在编写和调式汇编程序过程中 体会最深的就是 没有好的工具 汇编程序的调式工作太困难了 这次使用的 是微软的 masm5 0 编译工具 是 DOS 底下的编译工具 但是没有其它可视化 的调式工具 只能利用 DOS 底下的 debug 命令进行调式 程序稍微长一点的时 候 调试起来就不是那么方便了 主要问题是在 debug 中虽然可以反汇编 但 是反汇编后的源程序与自己写的不太一样了 符号常量和标号都变成了数字地 址 不方便辨认当前调式程序对应于源代码中的哪一行 这些疑问都是我完成 课设的难点 自己学的不是很透彻 在完成报告之前 我花了一天的时间和同 学讨论我的程序 通过对这学生成绩管理的的设计 使我对汇编语言的基本知 识的使用更加熟练 同时也增加了我对汇编语言的一些认识 在作业完成过程 中通过和同学的交流 也增加了合作的技巧 通过查阅资料也学到了一些课本 上没有的东西 有幸接触到中断这个功能 同时更是让我明白了即使是低级的 汇编语言也可以完成高级语言可以完成的程序 历时两周终于完成 这次课程 设计中有很多源程序的子程序的源代码可以从资料中或获得 但有很多都需要 我们仔细琢磨才能明白其中的原理 同时程序中需要调用大量的 BIOS 和 DOS 系 统功能调用 如显示字符串的功能调用 光标设置的功能的调用 清屏的功能 调用等 这些问题如不查询资料就无法理解 因为上汇编语言基础时对这些 DOS 和 BIOS 的系统功能了解很少 所以我们需要查询 DOS 和 BIOS 功能的系统 调用的基本信息 还有在一些循环结构设计上也有许多不能理解的地方 都需 要加以深刻的理解才能将问题顺利的解决 多整个程序的理解也有了更进一步 的了解 有时候遇到自己查资料和不能理解的地方时 自己不能解决时 先找 同学讨论一下 会有意想不到的收获 有些问题就会迎刃而解 即使是花了两 个周的时间完成一个程序 但是我可以骄傲的告诉别人我完成一个程序了 完 成了一个设计 将来我更有底气的告诉别人这个是我的成品 就如老师说的 我们可以骄傲的告诉面试老师我曾经完成的作品 目前已是大三的我们 我们完成的课程设计已经很多了 但是我对此次的 课设感慨真的很多 因为这次完成真的太不容易 因为我自己本人觉得我真的 一点都学不会 居然也可以完成如此浩大的程序编写 真的是我想不到的 虽 然此程序我参考了资料 咨询了同学 但是那些收获是我都很惊叹的 进一步 的拓宽了我的汇编知识 同时最重要的一点是要学的精通可以靠自己自学 很 多知识是我们自己就可以领悟的 虽然本程序仍然存在不少缺点和不足 但是 只要我有心 只要我舍得花时间去自学 看看视频 一定能使我的编程能力提 升 克服所以的不足 设计出更出色的作品 九九 参考文献参考文献 1 郑晓薇编著 汇编语言 机械工业出版 2 IBM PC 汇编语言程序设计实验教程 3 IBM PC 汇编语言程序设计 第 2 版 十十 附录 附录 用户手册使用说明 可以根据我上面粘贴的运行界面进行使用 选择自 己需要的功能 源程序清单 huancun macro j t 将三位数的数据转换成为三个对应的字符 并将其存入缓冲区zs中j t是两个哑元 push bx 入栈是对存储器里面的值进行保护 mov si t 对两个哑元进行说明 mov ax j mov bl 100 对输出的数据进行处理 显示出百位十位个位 div bl add al 30h mov zs si al 把处理好的百位进行缓存区 add si 1 mov al ah cbw mov bl 10 对十位的处理 div bl add al 30h add ah 30h mov zs si al add si 1 mov zs si ah 对个位的处理 add si 1 对输入的数据反复处理 指针下移 pop bx 存储器出栈 endm clear MACRO 清屏的宏定义 MOV AH 2 设置光标位置 MOV DH 0 行号 MOV DL 0 列号 INT 10H 屏幕及光标控制int 10h MOV AH 6 屏幕开窗口 MOV AL 0 MOV BH 7 颜色属性是正常显示 黑底白字 MOV CH 0 左上角的行号 MOV CL 0 左上角的列号 MOV DH 24 右上角的行号 MOV DL 79 右上角的列号 INT 10H 调用10号功能 设置屏幕的坐标是 0 0 24 79 ENDM kong macro 回车换行的宏定义 mov ah 2 2号功能输出回车换行 mov dl 0ah int 21h mov ah 2 mov dl 0dh int 21h endm output macro p 字符串输出 mov dx offset p mov ah 9 int 21h endm shuru macro 二位数数据输入 mov ah 01 1号功能的输入 输入的值放在dl中 int 21h sub al 30h 对输入的数据先减掉30h cbw 字节扩展成字类型 mov bl 10 对输入的数据进行乘以10 mul bl mov dl al 把al中的乘积取出来 放在dl中 mov ah 01h int 21h sub al 30h 处理完了要加上30h再用一号功能输出 add dl al endm zhuane macro e b 将二位数转换成对应两个字符 并将其存入缓冲区zs push bx mov si b 以下是对两个哑元的说明 mov al e cbw mov bl 10 对二位数据的处理就是先显示出十位然后显示出个位 div bl add ah 30h add al 30h mov zs si al 处理好的数据存放在zs存储区 add si 1 mov zs si ah add si 1 指针再下移 继续处理下一个 pop bx endm zhuans macro f s 将三位数成绩转换成为对应的三个字符 并存入缓冲区zs中 push bx mov si s mov al f cbw 需要扩展 字节扩展成字 mov bl 100 div bl add al 30h mov zs si al 百位存放在存储区 add si 1 mov al ah 把余数取出来 cbw 字节扩展成字 mov bl 10 div bl add al 30h 把ah中的余数取出来再进行除以10 最后的余数还是存放在ah中 此次的商放在 存储区zs中 add ah 30h mov zs si al add si 1 mov zs si ah 最后的余数在ah中 其实就是三位数的个位 add si 1 指针下移 pop bx endm shuzi macro r 二位数据输出 以下是对数据输出的处理 mov al r cbw mov bl 10 对数据的输出和输入一样也需要进行处理 以十进制显示出来 div bl mov bl ah mov dl al add dl 30h mov ah 2 2号功能显示十位 int 21h mov dl bl add dl 30h mov ah 2 2号功能显示个位 int 21h endm shuruu macro 三位数数据输入 shuru mov al dl 用1号功能的输入值存放在dl中 首先把dl中的值存放在al中 mov dl 10 mul dl mov dx ax 乘以10以后的值存放在ax中 需要取出放在dx中 mov ah 1 int 21h sub al 30h cbw 加完30h再把字节扩展成字 add dx ax endm shuzii macro u 三位数数据输出 mov ax u mov bl 100 对百位的处理 把100赋给bl div bl mov bl ah 商在al中 余数在ah中 mov dl al 把商从al中取出来 add dl 30h 在显示百位之前加30h 再放到dl中 mov ah 2 2号功能显示 int 21h shuzi bl endm DATAS SEGMENT m dw 0 移动文件指针时 选择绝对移动方式 则m代表指针偏移量 zs db 18 dup 缓冲区用来存放单个学生信息的字符 pathnam db C score txt 00h 建立目录项 handle dw 文件句柄 buf db 3 dup 输入缓冲区 zc dw 100 dup 存放总成绩的数组 pj db 100 dup 存放平均成绩数组 n db 0 存放输入的学生信息的个数 gs0 db 5 dup 0 记录所查询科目分数段的 gs1 db 5 dup 0 gs2 db 5 dup 0 mc db 100 dup 1 存放学生的名次的数组 chi db 100 dup 存放学生成绩的数组 eng db 100 dup mat db 100 dup xh db 100 dup 存放学生学号的数组 cour0 db chinese 语文 cour1 db english 英语 cour2 db maths 数学 ts db 13 10 You are successful press anykey to continue 13 10 以下是提示语句 ts1 db 13 10 You are wrong Try again 13 10 ts3 db 13 10 The score you input is bigger than 127 input agian 13 10 ts4 db 13 10 The school number you input is exist please try again 13 10 cai0 db The Student Grade Management System 0ah 0dh cai00 db made by wei qiao yuan 0ah 0dh cai db Insert a data 13 10 菜单的格式 cai1 db Modify a data 13 10 cai2 db Delete a data 13 10 cai3 db Find a data 13 10 cai4 db Show the rank 13 10 cai6 db Show the count 13 10 cai5 db Exit with the keyboard of ESC 13 10 ts2 db Please choose the Function 13 10 mess db 13 10 The data you input is not exist input again 13 10 mess1 db 13 10 Please input the school number 2 13 10 mess2 db 13 10 Please input three scores 0 120 13 10 mess4 db chinese english maths 13 10 mess3 db Thank you 13 10 strr1 DB score and rank 13 10 strr2 DB 13 10 number wen eng math average sum rank 13 10 strr3 db 13 10 course 90 80 70 60 60 13 10 bg db DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS CODES DS DATAS SS STACKS START MOV AX DATAS MOV DS AX mov es ax mov ah 3ch 请求创建文件 mov cx 00 默认属性 lea dx pathnam 装入pathnam的地址 int 21h mov handle ax 保存文件句柄 main 主菜单显示 output cai0 output cai00 output cai output cai1 output cai2 output cai3 output cai4 output cai6 output cai5 output ts2 mov ah 1 输入字符 选择功能键 int 21h cmp al i jne n1 call insert 调用insert子程序 输入学生学号 成绩 jmp rk n1 cmp al m jne n2 call modify 调用modify子程序 修改指定学生的成绩 jmp rk n2 cmp al d 调用de子程序 删除制定学生的成绩 jne n3 call de jmp rk n3 cmp al f 调用find子程序 显示指定学生的成绩及名次 jne n4 call find jmp rk n4 cmp al s 调用show子程序 显示所有学生的各科成绩 平均成绩 总成绩及名次 jne n5 call show jmp rk n5 cmp al c 调用showw子程序 显示各科各分数段的学生数量 jne n6 call showw jmp rk n6 cmp al 1bh 调用exit子程序 将数据保存到score txt文件中 并退出程序 jne n7 call exit n7 clear 清屏 output ts1 以上都不选择则说明出错 jmp main 再次跳转到菜单 rk output ts mov ah 1 int 21h clear jmp main exit proc near 退出 mov cl n 写入文件的次数 cbw mov bx 0 mov di 0 zh push di 保存di cx bx中的内容 push bx push cx mov si 0 对si进行赋初值 zhuane xh bx si 调用宏zhuane将两位数的学号转换为对应的二个字符 并存放到zs缓冲区中 zhuans chi bx si 调用宏zhuans将三位数的语文成绩转换为对应的三个字符 并存放到zs缓冲区 中 zhuans eng bx si 调用宏zhuans将三位数的英语成绩转换为对应的三个字符 并存放到zs缓冲区 中 zhuans mat bx si 调用宏zhuans将三位数的数学成绩转换为对应的三个字符 并存放到zs缓冲区 中 zhuans pj bx si 调用宏zhuans将三位数的平均成绩转换为对应的三个字符 并存放到zs缓冲区 中 huancun zc di si 调用宏zhuanss将三位数的总成绩成绩转换为对应的三个字符 并存放到zs缓冲 区中 zhuane mc bx si 调用宏zhuane 将两位数的名词 转换为对应的二个字符 并存放到zs缓冲区 中 mov ah 42h 移动读写指针 mov al 00 移动方式为绝对移动方式 mov bx handle mov cx 00 mov dx m 指针偏移量 int 21h add m 20 mov ah 40h 调用40h功能 请求写文件 mov bx handle 获取文件句柄 mov cx 19 写入长度为19个字节 lea dx zs 将缓冲区zs中的内容写入文件score txt int 21h pop cx pop bx pop di add di 2 目的指针加2 add bx 1 sub cx 1 输入一个之后cx统计的个数就依次减1 cmp cx 0 判断写入是否完毕 jg zh mov bx handle 写入完毕 关闭文件 mov ah 3eh int 21h clear output mess3 关闭文件之后就显示提示语句 MOV AH 4CH 退出程序 INT 21H ret exit endp 子程序结束 sum proc near 求学生的总成绩 mov cl n 对运用到的存取器进行清零 mov ch 0 mov si 0 mov bx 0 sss mov al chi si 将三科成绩相加 将总成绩传给数组zc mov ah 0 高位清零 mov dl mat si 存放数学的数组 mov dh 0 add ax dx 数学和语文相加 mov dl eng si mov dh 0 add ax dx mov zc bx ax 最后把语文数学和英语的三门成绩总分存放在zc总分的缓存区 add bx 2 add si 1 loop sss 运用循环对输入的三门成绩求总分 ret sum endp ping proc near 求学生的平均成绩 mov cl n n是统计输入学生信息的个数 cbw mov si 0 mov bx 0 p p mov ax zc bx 将总成绩除以三 获取的数据传送给数组pj mov dl 3 div dl mov pj si al 把除以之后的商从al中总取出放入pj平均的存储区 add si 1 下标依次加1 add bx 2 基址加2 loop p p ret ping endp modify proc near 修改学生学号 成绩 md1 output mess1 提示语句 shuru mov bl n 把学生个数给bl mov bh 0 mov al dl mov si 0 md cmp al xh si 先查找输入的学生是否存在 je qq1 1 查到的话 就跳转到qq1 1输入修改的值 也就是重新输入 add si 1 cmp si bx 不存在的话则继续输入继续比较 jbe md output mess jmp md1 不相等继续输入学号 qq1 1 mov di si output mess2 输入学号 output mess4 输入成绩 mov si 0 mov cx 3 cx存放的的科目 qq3 1 shuruu 分别输入语文 英语 数学成绩 并将其放在缓冲区buf中 cmp dx 78h 比较输入的成绩是否大于120 如果大于120的话 那么重新输入成绩 jbe qq2 1 output ts3 jmp qq1 1 qq2 1 mov buf si dl output bg 输出一段空格 add si 1 loop qq3 1 mov al buf 0 将存入buf中的成绩 分别赋值给存放对应科目的成绩的数组 mov chi di al mov al buf 1 buf 1 放的是英语 mov eng di al mov al buf 2 buf 2 放的是数学 mov mat di al ret modify endp countt proc near 统计各科各个分数段学生的个数 mov cx 5 有五个成绩分数段 mov si 0 zl mov gs0 si 0 存放语文科目各个分数段的缓存区 add si 1 loop zl mov cl n mov ch 0 mov si 0 c11 mov al chi si 取出存放在缓存区的数据和90进行比较 cmp al 90 jl cc1 大于则跳转 add gs0 0 1 小于等于90则进行个数的累加 jmp cc8 继续循环一直比较完五个分数段 cc1 cmp al 80 和80进行比较 jl cc2 add gs0 1 1 进行累加存放入缓存区 jmp cc8 cc2 cmp al 70 和70进行比较 jl cc3 add gs0 2 1 jmp cc8 cc3 cmp al 60 与60进行比较 jl cc4 add gs0 3 1 jmp cc8 cc4 add gs0 4 1 最后剩下的数据存放在gs0 4 的缓存区 cc8 add si 1 统计完一个数据则需要继续统计 则和那些分数段比较之后满座条件的继续统 计 loop c11 lea si gs0 lea di gs1 mov cx 5 cld 清除方向标 rep movsb 以字节传送 mov cx 5 mov si 0 cc9 mov gs0 si 0 对存放分数段的缓存区清零 add si 1 地址指针加1 loop cc9 mov cl n 存储器先清零 mov ch 0 mov si 0 mov cl n 给存储器赋值 mov ch 0 mov si 0 c111 mov al eng si 对英语成绩进行分段 统计各个分数段的个数 cmp al 90 和90比较 jl cc15 大于则跳转 add gs0 0 1 小于等于则继续统计 jmp cc88 继续比较 继续存储 cc15 cmp al 80 和80比较 jl cc22 add gs0 1 1 符合条件则存储在缓存区 jmp cc88 cc22 cmp al 70 和70比较 jl cc33 add gs0 2 1 jmp cc88 cc33 cmp al 60 和60进行比较 jl cc44 add gs0 3 1 jmp cc88 cc44 add gs0 4 1 最后的数据存放在gs0 4 cc88 add si 1 loop c111 符合各个分数段的继续进行比较 继续加到各个分数段 lea si gs0 lea di gs2 mov cx 5 cld rep movsb mov cx 5 mov si 0 ct mov gs0 si 0 以si的值来统计 和显示各个分数段的数量 add si 1 loop ct mov cl n mov ch 0 mov si 0 c13 mov al mat si 对数学这门成绩的统计和分段 cmp al 90 和90比较 jl cc1 2 add gs0 0 1 jmp cc8 2 cc1 2 cmp al 80 和80比较 jl cc2 2 add gs0 1 1 jmp cc8 2 cc2 2 cmp al 70 和70比较 jl cc3 2 add gs0 2 1 jmp cc8 2 cc3 2 cmp al 60 和60比较 jl cc4 2 add gs0 3 1 jmp cc8 2 cc4 2 add gs0 4 1 60以下的 cc8 2 add si 1 loop c13 ret countt endp 这个子程序结束 find proc near 查找学生成绩 call sum 调用子程序 call ping bj1 output mess1 提示输入学号 shuru mov bl n n是统计输入学生的个数 mov bh 0 mov al dl 把值从DL从移出放在AL中 mov si 0 si清零 bj cmp al xh si 将输入的学号与输入的学号相比 je i 存在的话 将此学生的成绩以及信息输出 add si 1 指针下移 cmp si bx 和 jbe bj output mess jmp bj1 i output strr2 输出信息的提示语句 shuzi xh si 调用宏 则输出之前处理好的三位数的三门成绩 output bg 输出空格 mov al chi si 输出语文成绩 cbw shuzii ax output bg mov al eng si 输出英语成绩 cbw shuzii ax output bg mov al mat si 输出数学成绩 cbw shuzii ax output bg 输出空格的字符串 用于与标题栏对齐 mov al pj si 输出平均分 cbw 字节扩展成字 shuzii ax output bg mov ax si 为了找到该学生总分的存放位置 所以si需乘以2 mov bl 2 mul bl mov bx ax shuzii zc bx 输出总分 output bg shuzi mc si 输出名次 ret find endp insert proc near 插入学生 学号及成绩 call input 调用输入的子程序 add n 1 ret insert endp show proc near 显示结果排名 call sum 调用显示总分的子程序 call ping 调用显示平均分的子程序 call rank 调用显示排名的子程序 call shuchu 调用输出的提示子程序 ret show endp showw proc near 显示各个学科各分数段的人数 call countt output strr3 显示各个分数段的格式 output cour0 输出语文提示 output bg shuzi gs1 0 输出语文90分以上的 output bg shuzi gs1 1 输出80分至90分的 output bg shuzi gs1 2 输出70至80 output bg shuzi gs1 3 输出60至70 output bg shuzi gs1 4 输出去60分以下的 kong output cour1 显示英语的提示 output bg shuzi gs2 0 英语90分以上的 output bg shuzi gs2 1 显示80到90之间 output bg shuzi gs2 2 显示70至80分的英语成绩 output bg shuzi gs2 3 显示60至70分 output bg shuzi gs2 4 显示60分一下的英语成绩 kong output cour2 显示数学提示 output bg shuzi gs0 0 显示数学分数在90分以上的个数 output bg shuzi gs0 1 显示80至90分数段的人数 output bg shuzi gs0 2 显示70至80分数段的人数个数 output bg shuzi gs0 3 显示60至70的 output bg shuzi gs0 4 显示60以下的人数个数 ret showw endp de proc near 删除某个学生的记录 sc1 output mess1 shuru 调用宏shuru 接受输入的学号 mov bl n mov bh 0 mov al dl mov si 0 sc cmp al xh si 查询输入学号的学生信息是否存在 不存在的话 重新输入学号 je sc2 add si 1 地址指针继续下移 继续查找 cmp si bx jbe sc 假如这个地址指针小于等于si中的 说明这条查找的信息是存在的 output mess 否则是不存在的 jmp sc1 跳转回原
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年忻州市岢岚县数学三年级第二学期期中联考试题含答案
- 2025-2026学年延安市黄陵县数学四年级第二学期期中调研模拟试题含答案
- 2025-2026学年广西壮族北海市数学三年级下学期期中复习检测试题含答案
- 2025-2026学年平凉市灵台县数学四年级下学期期中考试试题(含答案)
- 包装机岗位考核试题及答案解析
- 妇科手术护理试卷题目及详细答案
- 农村柑橘种植知识培训试题及详细答案
- 雪中蓬莱境试题及答案
- 2026年后勤自查报告(3篇)
- 食品初加工专项试题及参考答案
- 2026秋统编版小学语文六年级上册第七单元《20 文言文二则》曹冲称象教学设计
- 北京市丰台区2026届四年级数学下学期期末考试试题含答案解析
- 2026年秋新教材外研版九年级上册英语Unit 1-8课文+翻译
- 2026年防疫员技师实操题库及评分细则
- 2026年四川省宜宾市网格员招聘考试备考试题及答案解析
- 初中八年级历史与社会“全球视野下的文明互鉴:郑和下西洋与哥伦布航海的比较研究”教学设计
- 工行合规教育培训课件
- 2026中国资源循环集团电池有限公司招聘4人考试参考题库及答案解析
- 高校实验课程项目评估标准
- 2025年中国带状疱疹疫苗行业发展研究报告
- 浦发银行招聘真题及答案
评论
0/150
提交评论