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

📄 ll.asm

📁 统计30个学生成绩中得分在100~90、89~80、79~70、69~60区间
💻 ASM
字号:
data segment   
credit dw 86h,98h,72h,82h,76h,79h,65h,55h,72h,82h

      warning db '---------The end!!----Press SPACE Key To Exit The Program-------$'
      notice0 db '------------- The beginging!! -----------------$'
      notice1 db '------v1 --------90--100=$'
      notice2 db '----- v2 ---------80--89=$'
      notice3 db '------v3 -------- 70--79=$'
      notice4 db '------v4 -------- 60--69=$'
      notice5 db '------v5 ----------- <60=$'
      notice6 db '------v6 -------sheng xu=$'
      notice7 db '----- v7 -----------MAX =$'
      notice8 db '------v8 -----------PJF =$'
 
      v1 db ? ;90-100段人数计数器
      v2 db ? ;80-89段人数计数器
      v3 db ? ;70-79段人数计数器
            v4 db ? ;60-69段人数计数器 
      v5 db ? ;<60段人数计数器
      v8 db ? ;平均值
data ends 

code segment 
     assume cs:code,ds:data 

main proc far        ;主函数部分
   start: 
       mov ax,data 
       mov ds,ax
       call count     ;统计各分段人数的子程序
       call sort      ;排序求最大分数值子程序
       call pingjun   ;求平均数子程序
       repeat:  mov    dx,offset warning 
                mov    ah,9
                int    21h
                call   crlf
                mov    ah,1
                int    21h
                cmp    al,20h ;"space ASCII 码 32"
                jz     done
                jmp    repeat
        done:   mov    ah,4ch
                int    21h
                mov ah,4ch 
                int 21h 
                ret 
main endp 

count proc near                  ;统计程序
       lea si,credit 
       mov cx,0ah 
       m1: mov bx,[si] 
           add si,2 
           cmp bx,60h 
           jl m5
           inc v5 
           cmp bx,69h 
           jg m2 
           inc v4 
           jmp m5       ;60-69 
       m2: cmp bx,79h 
           jg m3        ;70-79 
           inc v3 
           jmp m5 
       m3: cmp bx,89h 
           jg m4        ;80-89 
           inc v2 
           jmp m5
       m4: cmp bx,100h  ;90-100
           inc v1 
           jmp m5
       m5: loop m1

           mov dx,offset notice0      ;分段结果屏幕输出部分
           mov ah,09h 
           int 21h
           call crlf
           call crlf
      
           mov dx,offset notice1 
           mov ah,09h 
           int 21h 

           mov dl,v1
           add dl,30h 
           mov ah,02h 
           int 21h 
           call crlf 

           mov dx,offset notice2 
           mov ah,09h 
           int 21h 

           mov dl,v2
           add dl,30h 
           mov ah,02h 
           int 21h 
           call crlf 

           mov dx,offset notice3
           mov ah,09h 
           int 21h 

           mov dl,v3 
           add dl,30h 
           mov ah,02h 
           int 21h 
           call crlf 

           mov dx,offset notice4
           mov ah,09h 
           int 21h 

           mov dl,v4 
           add dl,30h 
           mov ah,02h 
           int 21h 
           call crlf 

           mov dx,offset notice5
           mov ah,09h 
           int 21h 

           mov al,10    
           sub al,v5
           mov dl,al
           add dl,30h 
           mov ah,02h 
           int 21h
           count endp 
crlf proc near              ;回车换行子程序 
           mov dl,0ah 
           mov ah,02h 
           int 21h 
           mov dl,0dh 
           mov ah,02h 
           int 21h 
           ret 
crlf endp

sort proc near                       ;排序程序 
           mov dx,offset notice6 
           mov ah,09h
           int 21h

           mov cx,0ah                 ;排序算法
       n1: mov DX,CX
           mov si,0
       n2: mov ax,[si]
           cmp ax,[si+2]
           jc n3
           xchg ax,[si+2]
           mov [si],ax
       n3: add si,2
           loop n2
           mov cx,dx
           loop n1      

           mov cx,0a04h              ;依次输出成绩算法
           mov si,0
        p: mov dl,[si]
           and dl,0f0h
           shr dl,cl
           add dl,30h
           mov ah,2
           int 21h
           mov dl,[si]
           and dl,0fh
           add dl,30h
           mov ah,2
           int 21h
           mov dl,'~'                ;输出~符号,两个成绩之间的间隔
           mov ah,2
           int 21h
           add si,2    
           dec ch
           jnz p
           call crlf

           mov dx,offset notice7     ;输出成绩的最高分 MAX 
           mov ah,09h 
           int 21h
           mov si,18
           mov dl,[si]
           and dl,0f0h
           shr dl,cl
           add dl,30h
           mov ah,2
           int 21h
           mov dl,[si]
           and dl,0fh
           add dl,30h
           mov ah,2
           int 21h
           call crlf
           ret
           sort  endp

pingjun  proc           ;求平均成绩

           mov dx,offset notice8     
           mov ah,09h 
           int 21h
           mov cx,10
           mov dx,0
    q: mov ax, [si]     
           add si,2 
           add dx,ax
           loop q
           mov ax,dx
           mov dx,0
           mov cx,10
           div cx
           mov v8,al
     
           mov bl,v8
           mov dl,bl
           and dl,0f0h
           mov cl,4
           shr dl,cl
           add dl,30h
           mov ah,2
           int 21h

           mov dl,bl
           and dl,0fh
           add dl,30h
           mov al,2
           int 21h
           call crlf
           call crlf
           ret
pingjun endp

    code ends 
end start

⌨️ 快捷键说明

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