📄 ll.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 + -