⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 students.asm

📁 学生成绩排序的汇编程序
💻 ASM
字号:


data  SEGMENT
      student STRUC;学生信息定义结构 
              stunames DB        '0'  ; 存放姓名
              jiange DB        ' '  ;空格分开
              number DB '0' ;存放学号 
              blank DB ' '  ;空格分开 
              score  DW '00';存放成绩
              over DB ' ';空格分开 
      student ENDS
      stud  student 9 DUP(<>) ;分配空间 
              
       ;其他信息数据定义       
      msg1 DB 'input 9 pairs of numble and score: ','$'
      msg2 DB 'jie guo is:',0dh,0ah,'$'           
      msg3 DB 'names num scores',0dh,0ah,'$'
      quit DB 'press any key to exit......$'
      crlf DB 0dh,0ah,'$' ;回车
data  ENDS
             
  
       ; 输出宏定义
       show MACRO     ADDrs
       LEA       DX,ADDrs
       MOV       AH,09h
       INT       21h
       ENDM
              
code  SEGMENT
      ASSUME CS:code,DS:data
 
 main  PROC FAR
start:MOV AX,data;初始化 
      MOV DS,AX
      show      msg1  ;显示提示信息
      CALL      INsert ;插入子程序
      show       crlf  ;回车换行
      show msg2  ;显示结果信息
      show msg3  ;显示结果信息

     CALL      paixu ; 排序
      CALL      OUTput  ;输出
      show quit  ;结束语句
      MOV AH,01h;屏幕停留
      INT 21h
      MOV AH,4ch;返回DOS
      INT 21h
main  ENDP
              
  ;********************程序数据的键盘输入部分************************ 
      INsert PROC      NEAR
      MOV CX,0009h;循环从键盘输入数据 
      MOV AH,01h;输入并回显 
      LEA BX,stud;首地址 
input:
      INT       21h
      MOV       [BX],AL ;转存姓名
      INC       BX
      INT       21h
      MOV [BX],AL;转存空格 
      INC BX
      INT 21h
              
      MOV [BX],AL;转存学号 
      INC BX
      INT 21h
      MOV [BX],AL;转存空格 
      INC BX
      INC BX
              
      INT 21h
      MOV [BX],AL;转存成绩的'十位'数字
      DEC BX
      INT 21h
      MOV [BX],AL;转存成绩的'个位'数字
      INC BX
      INC BX
      INT 21h
      MOV [BX],AL;转存空格 
      INC BX
      LOOP input
      RET
      INsert ENDP
              
      ;*********************选择排序算法实现部分************************** 
      paixu PROC      NEAR
      MOV DX,0008h;外层循环,共8次 
      XOR SI,SI;清零,用作起始下标 相当于i
sort1:MOV CX,DX;内层循环,共cx次。 也为三次
      MOV BX,SI;bx用作内层循环下标 相当于j
      MOV AX,stud.score[BX];起始的元素赋给ax
      MOV DI,SI;开始时,始末下标一样 
      ADD BX,0007h;下标后移一个单元 
sort2:CMP stud.score[BX],AX;进行比较 
      JBE sort3;不大于ax则不变 
      MOV AX,stud.score[BX];大于则赋给ax 
      MOV DI,BX;记录下标 
sort3:ADD BX,0007h;下标后移一个单元
      LOOP sort2;循环 
      CMP DI,SI;比较起始下标 
      JE sort4;相等则不进行交换 
      XCHG stud.score[SI],AX;交换成绩 
      XCHG stud.score[DI],AX;交换成绩
      MOV AL,stud.number[DI];最大学号放al中 
      XCHG stud.number[SI],AL;交换学号 
      XCHG stud.number[DI],AL;交换学号
      MOV AL,stud.stunames[DI];最大人的姓名放al中 
      XCHG stud.stunames[SI],AL;交换姓名
      XCHG stud.stunames[DI],AL;交换姓名
sort4:ADD SI,0007h;起始下标后移一个单元 
      DEC DX;外层循环减一 
      JNZ sort1;不为零则继续
      RET
      paixu ENDP
              
              
                ;*************************程序数据的屏幕输出部分********************** 
      OUTput PROC      NEAR
              
      MOV CX,0009h
      MOV AH,02h
      LEA BX,stud
outp: 
      MOV DL,[BX];输出 姓名
      INT 21h 
      INC BX
      MOV DL,[BX];输出空格 
      INT 21h
      INC BX
      
  
              MOV DL,[BX];输出学号
      INT 21h 
      INC BX
      MOV DL,[BX];输出空格 
      INT 21h
      INC BX
      INC BX
      MOV DL,[BX];输出成绩的'十位'数字 
      INT 21h
      DEC BX
      MOV DL,[BX];输出成绩的'个位'数字 
      INT 21h
      INC BX
      INC BX
      INC BX
      MOV AH,09h
      LEA DX,crlf;回车换行 
      INT 21h
      MOV AH,02h
      LOOP outp
      RET
      OUTput ENDP
              
              
      code  ENDS
END   start 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -