汇编语言综合实验 - 学生成绩排序(单链表实现) - 图文(2)

2020-03-29 19:17

华北科技学院综合性实验报告 ②按名次由高到低输出学生成绩信息子程序(即单链表方式顺序输出): 5.总结与体会: (1)程序主要完成功能: ①从键盘输入学生成绩信息,依次将学生的学号、姓名、语文成绩、数学成绩、总成绩(经过计算后),存放在对应数组元素的字段中。 第 5 页

华北科技学院综合性实验报告 ②按照总成绩从高到低排序,即完成单链表的建立,将单链表的头指针保存在 DX 寄存器中,在输出时从头指针开始遍历单链表。 ③按照学生总成绩的名次顺序(由高到低)输出学生成绩信息,即对②所建立的单链表的遍历,在初始时需要将单链表头指针(DX寄存器中存放)赋值给 BX,以便完成遍历输出。 (2)程序的实现: ①主要采用了结构数组,因为每一个学生数据项都具有相同的结构,因此先定义一个 STUDENT 类型的结构体,使用该结构体名作为伪操作指令定义n个相同的结构体类型的数组元素。在每一个数组元素中都包含一个 LINK 字段,初始值为0。 ②建立单链表,即完成对学生成绩信息的降序排列。 首先从所有数组元素中找出总成绩最大的一项,将该数组元素作为单链表的头指针,保存在DX中,同时将LINK字段赋值为 1; 其次,从 LINK 字段为0的数组元素中找到总成绩最大的一项,将该数组元素的偏移地址作为前一节点的LINK字段值,同时将该节点的 LINK 字段值置为 1; 重复上述步骤直到该结构体类型数组中的最后一个节点LINK字段置为1,该节点即为单链表的链尾。 ③遍历单链表,即对学生成绩信息按总成绩由高到低输出。 首先将单链表的头指针赋值给BX,依次循环 COUNT(学生人数) 次输出每一个数组元素的值,每次输出结束后,将 BX 的值加上 TYPE S_ARRAY(即加 16字节),BX指向下一个数组元素的首地址。 其次在输出每一个数组元素后,即循环的过程中必须同时满足两个条件:计数器CX != 0 且 [BX].LINK != 1 ,若有任意一个条件不满足则跳出循环。使用 LOOPNZ 指令即可实现。 ④对于将学生成绩信息保存到文件,以及从文件中读取学生成绩信息并输出,关于文件的打开、读取、写入、关闭,这一块相关功能并没有实现。 ⑤程序纠错功能较差,当用户输入错误后,没办法实现退格删除,重新输入,有待改进。 ⑥由于学生的姓名不定长,导致输出时对齐存在一定困难。 ⑦程序还可以继续优化,结合子程序与宏各自的优点,宏的调用速度块,可以用实元代替哑元的方式完成调用不同的子程序,以及灵活的传值,而子程序应该做到可以被多次调用,写的更为灵活、复用性高。 (3)收获和体会: 通过本次综合实验不仅提高了汇编语言程序设计的能力,也对高级汇编技术有了初步的认识与了解,如子程序与宏的配合使用。同时对于程序的算法,才是程序的核心,是程序设计的重点,根据对程序中数据的分析,采取不同的数据结构,结合优良的算法,可以大大提高程序的效率。对自己在以后的学习中更应该重视基础、把握重点,编程语言是工具,而算法、结构才是核心。只有结合良好的思想指导,熟悉利用工具才能做出好的软件。 第 6 页

华北科技学院综合性实验报告 源代码: CRLF MACRO ;回车换行宏定义 MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH INT 21H ;空格宏定义 ENDM BLANK MACRO NUM MOV CX,NUM CALL BLANK_PROC ;显示字符串宏定义 ENDM SHOW MACRO STRING LEA DX,STRING MOV AH,09H INT 21H ;定义学生结构体 ENDM STUDENT STRUC LINK DW 0 ID DB '000' ;指针,指向下一个节点 ;学号 ;姓名 ;语文成绩 ;数学成绩 ;总分 NAMES DB '$$$$$$$$' CSCORE DB ? MSCORE DB ? SUM DB ? STUDENT ENDS DATASG SEGMENT DW ? ;避免数组元素和 LINK 字段冲突 ;预设学生人数 S_ARRAY STUDENT 4 DUP(<>) NUMBER DW 0 ;键盘输入学生人数 COUNT EQU LENGTH S_ARRAY ;COUNT EQU NUMBER ;定义学生人数个数 COUNT ;==================菜单======================= MENU1 DB 0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH DB \ ------------------MENU(Load OR Create)--------------------- \

第 7 页

华北科技学院综合性实验报告 DB \ 1.Load the student information from an existing file DB \ 2.Create a new file and write the student information DB \ 3.Exit the student achievement management system DB \ ----------------------------------------------------------- (L)\(C)\(E)\\ DB \ Please Input Your Choice:\ MENU2 DB 0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH DB \ ------------MENU(Display)-------------- \ DB \ 1.Sort by student ID \ DB \ 2.Sort by scores \ DB \ 3.Back to previous menu \ DB \ --------------------------------------- \ DB \ Please input your chioce:\PRESS_KEY db 0dh,0ah,'Please press any key to continue...','$' INPUT_NUMBER db 'Please input the number of students: ','$' INPUT_INFO db 0Dh,0Ah,'ID NAME Chinese Math',0Dh,0Ah,0Dh,0Ah,'$' OUTPUT_INFO db 'ID NAME Chinese Math SUM',0dh,0ah,0Dh,0Ah,'$' ;================菜单定义结束=============== DATASG ENDS STACKSG SEGMENT DW 200 DUP(?) STACKSG ENDS CODESG SEGMENT ASSUME CS:CODESG,DS:DATASG,SS:STACKSG START: MOV AX,DATASG MOV DS,AX MOV AX,STACKSG MOV SS,AX MOV SP,200 ;=============输出菜单1================== MAIN_MENU1: MOV AX,0003H ;清屏 第 8 页

华北科技学院综合性实验报告 结束 INT 10H SHOW MENU1 MOV AH,01H INT 21H XOR AH,AH CMP AX,'L' ;JZ _LODEFILE CMP AX,'C' JZ CALL_INPUT CMP AX,'E' JZ ENDPROC CMP AX,'1' ;JZ _LODEFILE CMP AX,'2' JZ CALL_INPUT CMP AX,'3' JZ ENDPROC JMP MAIN_MENU1 ;暂时不做处理 ;暂时不做处理 ;输出菜单1 ;=============输出菜单2================= MAIN_MENU2: ;输入3位学号、姓名、语文、数学成绩,并计算总成绩,其中输入姓名、成绩以空格MOV AX,0003H INT 10H SHOW MENU2 MOV AH,01H INT 21H XOR AH,AH CMP AX,'1' ;JZ CALL_OUTPUT1 CMP AX,'2' JZ CALL_OUTPUT2 CMP AX,'3' JZ MAIN_MENU1 JMP MAIN_MENU2 ;按总分排序 ;学号排序暂时不做处理 ;输出菜单2 ;清屏 CALL_INPUT: MOV AX,0003H ;清屏 第 9 页


汇编语言综合实验 - 学生成绩排序(单链表实现) - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:论人大代表履职能力的提升途径

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: