80*86汇编语言学生成绩排序系统

五、实验结果及分析

1、实验运行过程及分析

(1)菜单:

主要代码:

        在输出菜单之前首先使用清屏效果,以下为清屏效果的源代码:

MOV AH,15

INT 10H

MOV AH,0

INT 10H

             之后调用宏指令输出菜单,并调用选择输入子程序:

OUTPUT_AH_9 CATALOG_1  

:

:

OUTPUT_AH_9 CATALOG_6

CALL INPUT_CHOICE   ; 调用选择输入子程序

             用BUTTON判断是否需要再次循环,比较BUTTON是否为1,如果输入ESC,则退出菜单循环结束程序,如果BUTTON为0,则循环输出菜单。

CMP BUTTON,1

JNE OUTPUT_CATALOG

 

(2)输入功能:

主要代码:

通过循环判断NAME_BUF[SI+2]中的值是否为回车,若不是,则将该名字传送到用来存储数据的空间NAME_GRADE_SAVE中。

LOOP_INPUT_NAME:

MOV AL, NAME_BUF[SI+2]

CMP AL,13

JE INPUT_GRADE

MOV NAME_GRADE_SAVE [DI][BX],AL

INC SI

INC BX

LOOP LOOP_INPUT_NAME

通过循环判断NAME_BUF[SI+2]中的值是否为回车,若不是,则将该成绩传送到用来存储数据的空间NAME_GRADE_SAVE中。

        LOOP_INPUT_GRADE:

                MOV AL,GRADE_BUF[SI+2]

                CMP AL,13

                JE AGAIN

                MOV NAME_GRADE_SAVE[DI][BX],AL

                INC SI

                INC BX

                LOOP LOOP_INPUT_GRADE

             最后输出一个值进行判断,若值为”y”,则循环到输入名字之前再次输入名字,若值为”n”,则退出该输入子程序。

         OUTPUT_AH_9 TIP_5

                  MOV AH,1

                  INT 21H

                  CMP AL,"y"

                  JE INPUT

                  CMP AL,"n"

                  JE INPUT_OUT

                  OUTPUT_AH_9 TIP_2

            JMP AGAIN

 

(3)输出功能:

主要代码:

    用2号功能依次循环输出名字,当判断下一个地址的值为’$’时停止输出;并在循环的同时使变量NAME _LONG的值自加1,以便之后输出空格。

      LOOP_OUTPUT_NAME:

               MOV AL,NAME_GRADE_SAVE[DI][BX]

               CMP AL,'$'

               JE LOOP_OUTPUT_NAME_END

               MOV DL,AL

               MOV AH,2

               INT 21H

               INC BX

               INC NAME_LONG

               JMP LOOP_OUTPUT_NAME

 

          根据名字的长度确定应该输出多少个空格,并循环输出空格。

         MOV AL,14

               SUB AL,NAME_LONG

               PUSH CX

               MOV CX,0

               MOV CL,AL

            LOOP_KONGGE_1:

               KONGGE

               LOOP LOOP_KONGGE_1

 

          用2号功能依次循环输出成绩的值,当判断下一个地址的值为’$’时停止输出;并在循环的同时使变量GRADE_LONG的值自加1,以便之后输出空格。

          LOOP_OUTPUT_GRADE:

               MOV AL,NAME_GRADE_SAVE[DI][BX]

               INC GRADE_LONG

               CMP AL,'$'

               JE LOOP_OUTPUT_GRADE_END

               MOV DL,AL

               MOV AH,2

               INT 21H

               INC BX

               JMP LOOP_OUTPUT_GRADE

 

根据成绩的长度确定应该输出多少个空格,并循环输出空格。

MOV AL,14

               SUB AL,GRADE_LONG

               PUSH CX

               MOV CX,0

               MOV CL,AL

            LOOP_KONGGE_2:

               KONGGE

               LOOP LOOP_KONGGE_2

 

          将变量MINGCI每次循环时自加1,并在输出完名字和成绩之后输出该变量作为名次。

         MOV DL, MINGCI

               MOV AH,2

               INT 21H

               INC MINGCI

(4)排序功能:

主要代码:

用循环求出每个成绩的长度,当执行到’$’时,停止循环。

         LOOP_SIZE:

                 INC GRADE_LONG

                 INC SI

                 CMP NAME_GRADE_SAVE[BX][SI],'$'

                  JNE LOOP_SIZE

 

    比较前一个成绩和后一个成绩,若前一个大于后一个,则跳转到交换结束(即不交换),若前一个小于后一个,则跳转到交换的程序。

         MOV AL,GRADE_LONG

                  CMP GRADE_MAX_LONG,AL

                  JA COMPARE_END

JB SORT_SHORT_CHANGE

若输入的两个数相等,则依次从高位到低位一个一个进行比较,若前者比后者小,则交换,若后者比前者小,则不交换,若相等,则继续循环。

LOOP_COMPARE:

MOV AL,NAME_GRADE_SAVE[BX][SI]

CMP NAME_GRADE_SAVE[BX][DI],AL

JA COMPARE_END

JB SORT_CHANGE   ;前者比后者小,交换

INC SI

INC DI

CMP NAME_GRADE_SAVE[BX][DI],'$'

JNE LOOP_COMPARE

JMP COMPARE_END

    将SI和DI各减小10,指向名字的第一个位置,循环20次,将整个存储学生名字和成绩的单位全部依次交换。

         SUB SI,10

                SUB DI,10

                MOV CX,20

LOOP_SORT_CHANGE:

                MOV AL,NAME_GRADE_SAVE[BX][SI]

                XCHG AL,NAME_GRADE_SAVE[BX][DI]

                XCHG AL,NAME_GRADE_SAVE[BX][SI]

                INC SI

                INC DI

                LOOP LOOP_SORT_CHANGE

 

 2、运行结果

图1:(菜单和输入效果)

 

图2:(直接输出效果)

 

图:3:(排序程序运行后结果)

 

图4:(排序后输出结果)

 

图5:(求最大值输出结果)

 

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值