📄 studentmange.asm
字号:
;******************************************************************
DATA SEGMENT
HBCZ DW 76H,88H,66H,99H,88H,66H,65H,55H,62H,82H,76H,79H,53H,95H,68H,78H,66H,55H,55H,62H,82H,43H,95H,98H,78H,66H,65H,55H,72H,82H
WARNING DB ' ************ Press SPACE Key To Exit The Program ************ $'
GUANYU DB '^_^_^_^_^_^ CLASS: 1052; NO:10210405216; NAME:NINGFEI ^_^_^_^_^_^$'
NOTICE DB '@@@@@@@@@@@@@@@@@@@@ THE RESULT IS FOLLOWING @@@@@@@@@@@@@@@@@@@@$'
BOOK0 DB ' * ----------- 90--100 : $'
BOOK1 DB ' * ------------ 80--89 : $'
BOOK2 DB ' * ------------ 70--79 : $'
BOOK3 DB ' * ------------ 60--69 : $'
BOOK4 DB ' * --------------- <60 : $'
BOOK5 DB ' * --------------- MAX : $'
BOOK6 DB ' * --------------- PJF : $'
S1 DB ? ;90-100段人数计数器
S2 DB ? ;80-89段人数计数器
S3 DB ? ;70-79段人数计数器
S4 DB ? ;60-69段人数计数器
S5 DB ? ;<60段人数计数器
PJF DB ? ;平均值
MAX DB ? ;最高成绩
DATA ENDS
;***************************************
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;----------主程序-------------
MAIN PROC FAR
START:
MOV AX,DATA
MOV DS,AX
call ST1 ;统计各分段人数的子程序
call ST2 ;排序求最大成绩子程序
call ST3 ;求平均数子程序
DONE: MOV DX,OFFSET WARNING
MOV AH,09H
INT 21H
CALL CRLF
MOV AH,01H
INT 21H
CMP AL,20H ;"space ASCII 码 32"
JZ EXIT
JMP DONE
EXIT: MOV AH,4CH
INT 21H
RET
MAIN ENDP
;--------成绩分段统计 子程序-----------
ST1 PROC NEAR
LEA SI,HBCZ
MOV CX,1EH
T1: MOV BX,[SI]
CMP BX,60H
JB FAIL
CMP BX,70H
JB CHA
CMP BX,80H
JB ZHONG
CMP BX,90H
JB LIANG
YOU: INC S1 ;(90-100)
JMP DO
LIANG:INC S2 ;(80-89 )
JMP DO
ZHONG:INC S3 ;(70-79 )
JMP DO
CHA: INC S4 ;(60-69 )
JMP DO
FAIL: INC S5 ;(59-0 )
JMP DO
DO: ADD SI,2
LOOP T1
CALL CRLF
MOV DX,OFFSET GUANYU ;分段结果屏幕输出部分
MOV AH,09H
INT 21H
CALL CRLF
CALL CRLF
MOV DX,OFFSET NOTICE
MOV AH,09H
INT 21H
CALL CRLF
CALL CRLF
MOV DX,OFFSET BOOK0 ;输出100分到90分的人数
MOV AH,09H
INT 21H
MOV DL,S1
ADD DL,30H
MOV AH,02H
INT 21H
CALL CRLF
MOV DX,OFFSET BOOK1 ;输出89分到80分的人数
MOV AH,09H
INT 21H
MOV DL,S2
ADD DL,30H
MOV AH,02H
INT 21H
CALL CRLF
MOV DX,OFFSET BOOK2 ;输出79分到70分的人数
MOV AH,09H
INT 21H
MOV DL,S3
ADD DL,30H
MOV AH,02H
INT 21H
CALL CRLF
MOV DX,OFFSET BOOK3 ;输出69分到60分的人数
MOV AH,09H
INT 21H
MOV DL,S4
ADD DL,30H
MOV AH,02H
INT 21H
CALL CRLF
MOV DX,OFFSET BOOK4 ;输出60分以下的人数
MOV AH,09H
INT 21H
MOV DL,S5
ADD DL,30H
MOV AH,02H
INT 21H
CALL CRLF
ST1 ENDP
;-----------回车换行 子程序-----------------
CRLF PROC NEAR
MOV DL,0AH
MOV AH,02H
INT 21H
mov DL,0DH
mov AH,02H
INT 21H
RET
CRLF ENDP
;-----------求最高分 子程序-----------------
ST2 PROC NEAR
MOV DX,OFFSET BOOK5
MOV AH,09H
INT 21H
LEA SI,HBCZ ;排序算法开始
MOV CX,1EH ; |
N1: MOV DX,CX ; |
MOV SI,0 ; |
N2: MOV AX,[SI] ; |
CMP AX,[SI+2] ; |
JNB N3 ; |
XCHG AX,[SI+2] ; |
MOV [SI],AX ; |
N3: ADD SI,2 ; |
LOOP N2 ; |
MOV CX,DX ; |
LOOP N1 ;排序算法结束
MOV CX,1EH
LEA DI,HBCZ ;将成绩存入从HBPX开始的存储区域
E1: MOV AX,[SI]
MOV [DI],AX
ADD DI,2
ADD SI,2
LOOP E1
MOV CX,1E04H
MOV DI,0
F1: MOV DL,[DI]
AND DL,0F0H
SHR DL,CL
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,[DI]
AND DL,0FH
ADD DL,30H
MOV AH,2
INT 21H
CALL CRLF
RET
ST2 ENDP
;-------------求平均值 子程序----------------
ST3 PROC NEAR
MOV DX,OFFSET BOOK6
MOV AH,09H
INT 21H
LEA SI,HBCZ
MOV CX,1EH
MOV DX,0
M: MOV AX,[SI]
ADD DX,AX
ADD SI,2
loop M
MOV AX,DX
MOV DX,0
MOV CX,1EH
DIV CX
MOV PJF,AL
MOV BL,PJF
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 AH,2
INT 21H
CALL CRLF
CALL CRLF
RET
ST3 ENDP
CODE ENDS
;***************************************
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -