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

📄 source.asm

📁 输入50个成绩
💻 ASM
字号:
data          SEGMENT
              a DW        50 DUP(?)
              b DW        50 DUP(?)
              grade DB        'please input the grade:$'
              wrong1 DB        'wrong,input again:$'
              CHuan DB        'xuehaoshi:$chengjishi:$mingcishi:$'
              count1 DW        ?
              count2 DW        ?
              memory1 DW        ?
              memory2 DW        ?
              memory3 DW        ?
              data ENDS
              code SEGMENT
              main PROC      FAR
              ASSUME    CS:code,DS:data
              MOV       AX,data
              MOV       DS,AX
              LEA       DX,grade
              MOV       AH,9
              INT       21h
              CALL      DECibin
              CALL      compare
              MOV       AH,1
              INT       21h
              MOV       AX,4c00h
              INT       21h
              main ENDP
              
         crlf PROC      NEAR ;回车换行
              MOV       AH,02
              MOV       DL,0dh
              INT       21h
              MOV       DL,0ah
              INT       21h
              RET
              crlf ENDP
              
       wrong2 PROC      NEAR ;输入错误时提示
              LEA       DX,wrong1
              MOV       AH,09
              INT       21h
              RET
              wrong2 ENDP
              
       xuehao PROC      NEAR
              LEA       DX,CHuan
              MOV       AH,09
              INT       21h
              RET
              xuehao ENDP              
              
      CHengji PROC      NEAR
              LEA       DX,CHuan+11
              MOV       AH,09
              INT       21h
              RET
              CHengji ENDP
              
       mingci PROC      NEAR
              LEA       DX,CHuan+23
              MOV       AH,09
              INT       21h
              RET
              mingci ENDP

          SPp PROC      NEAR ;输出空格
              MOV       AH,02
              MOV       DL,20h
              INT       21h
              RET
              SPp ENDP
              
      binidec PROC      NEAR ;将bx中的十进制数转化并且输出到显示器
              MOV       CX,100d
              CALL      DEC_div
              MOV       CX,10d
              CALL      DEC_div
              MOV       CX,1
              CALL      DEC_div
              RET
              binidec ENDP
              
      DEC_div PROC      NEAR ;将bx中的十进制数转化并且输出到显示器
              MOV       AX,BX
              MOV       DX,0
              DIV       CX
              MOV       BX,DX
              MOV       DL,AL
              ADD       DL,30h
              MOV       AH,02
              INT       21h
              RET
              DEC_div ENDP
              
      DECibin PROC      NEAR ;输入学生成绩到缓冲区a和b中并且得到实际输入的成绩个数在cx中
              MOV       CX,50d
              MOV       BX,0
              LEA       SI,a
              LEA       DI,b
      NEwchar:
              MOV       AH,1
              INT       21h
              CMP       AL,0dh
              JZ        exit
              CMP       AL,2ch
              JZ        another
              SUB       AL,30h
              JL        wrong
              CMP       AL,09
              JG        wrong
              CBW
              PUSH      CX
              XCHG      AX,BX
              MOV       CX,10d
              MUL       CX
              ADD       BX,AX
              POP       CX
              JMP       NEwchar
        wrong:
              CALL      wrong2
              XOR       BX,BX
              JMP       NEwchar
      another:CMP       BX,100d
              JA        wrong
              MOV       [SI],BX
              MOV       [DI],BX
              MOV       DX,BX
              ADD       SI,2
              ADD       DI,2
              MOV       BX,0
              LOOP      NEwchar
         exit:
              MOV       [SI],BX
              MOV       [DI],BX
              CALL      crlf
              MOV       BX,51d
              NEG       CX
              ADD       CX,BX ;得到实际输入的成绩个数在cx中
              RET
              DECibin ENDP
              
      compare PROC      NEAR ;比较排名并且输出
              LEA       SI,a
              MOV       count1,CX ;保存内循环次数
              MOV       BX,1
        LOOP1:MOV       AX,[SI]
              MOV       count2,CX ;保存外循环次数
              PUSH      BX ;保存学号
              MOV       BX,1 ;尚未比较时将此学生排名置1
              MOV       CX,count1
              LEA       DI,b
        LOOP2:
              CMP       AX,[DI]
              JL        calculate
              ADD       DI,2
              LOOP      LOOP2
              JMP       shuchu
    calculate:INC       BX ;得到某学生排名在bx中
              ADD       DI,2
              LOOP      LOOP2
              
       shuchu:MOV       memory1,AX ;保存成绩
              MOV       memory2,BX ;保存名次
              POP       BX
              MOV       memory3,BX ;学号
              CALL      xuehao
              CALL      binidec ;输出学号
              CALL      SPp
              CALL      CHengji
              MOV       BX,memory1 ;输出成绩
              CALL      binidec
              CALL      SPp
              CALL      mingci
              MOV       BX,memory2 ;输出名次
              CALL      binidec
              CALL      crlf
              ADD       SI,2
              MOV       BX,memory3
              ADD       BX,1
              MOV       CX,count2
              LOOP      LOOP1
              RET
              compare ENDP
              code ENDS
              END       main

⌨️ 快捷键说明

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