📄 core2(4).asm
字号:
.MODEL SMALL
.386
.STACK
.DATA
LENTH DW ?
MARK DB 100 DUP(?)
AMOUNT DB ?
EXPECT DB ?
ZONE1 DB ?
ZONE2 DB ?
ZONE3 DB ?
ZONE4 DB ?
ZONE5 DB ?
ZONE6 DB ?
ZO1 DW ?
ZO2 DW ?
ZO3 DW ?
ZO4 DW ?
ZO5 DW ?
ZO6 DW ?
ZO7 DW ?
ZO8 DW ?
ZO9 DW ?
ZO10 DW ?
MAX DB ?
MIN DB ?
LEN DB ?
STRING1 DB 'Student Mark Analyse System',0DH,0AH,'$'
STRING2 DB '1.Input',0DH,0AH,'$'
STRING3 DB '2.Statistic',0DH,0AH,'$'
STRING4 DB '3.Tixis',0DH,0AH,'$'
STRING5 DB '4.Calculate',0DH,0AH,'$'
STRING6 DB '5.Paint',0DH,0AH,'$'
STRING7 DB '6.Exit',0DH,0AH,'$'
STRING8 DB 'Please have a choice(1-6):',0DH,0AH,'$'
BRANCH DB 'Your input as follows:',0DH,0AH,'$'
BRANCHONE1 DB 'Please have your input,make your attention',0DH,0AH,'$'
BRANCHONE2 DB 'NUMBER(from 1 to 99):',0DH,0AH,'$'
BRANCHONE3 DB 'MARKS(each between 0--99):',0DH,0AH,'$'
BRANCHONE4 DB 'EXPECT(from 0 to 99):',0DH,0AH,'$'
BRANCHONE5 DB 'Please enter any key to go back main menu.',0DH,0AH,'$'
BRANCHTHREE DB 'The result of taxis:',0DH,0AH,'$'
BRANCHTHREE1 DB 'Before taxis:',0DH,0AH,'$'
BRANCHTHREE2 DB 'Taxis increased number:',0DH,0AH,'$'
BRANCHTHREE3 DB 'Taxis decreased number:',0DH,0AH,'$'
BRANCHTWO1 DB 'STATISTICS',0DH,0AH,'$'
BRANCHTWO2 DB '[0,30]',0DH,0AH,'$'
BRANCHTWO3 DB '[31,59]',0DH,0AH,'$'
BRANCHTWO4 DB '[60,69]',0DH,0AH,'$'
BRANCHTWO5 DB '[70,79]',0DH,0AH,'$'
BRANCHTWO6 DB '[80,89]',0DH,0AH,'$'
BRANCHTWO7 DB '[90,100]',0DH,0AH,'$'
BRANCHTWO8 DB 'Highest:',0DH,0AH,'$'
BRANCHTWO9 DB 'Lowest:',0DH,0AH,'$'
BRANCHTWO10 DB 'Distance:',0DH,0AH,'$'
BRANCHFOUR DB 'AVERAGE:',0DH,0AH,'$'
PAINTZ DB '0',20H,'10',20H,'20',20H, '30',20H,'40',20H, '50',20H,'60',20H, '70',20H,'80',20H, '90',20H,'100'
LEN_Z EQU $-PAINTZ
PAINTM DB 'MARK'
LEN_M EQU $-PAINTM
PAINTP DB 'PERCENTAGE(%)'
LEN_P EQU $-PAINTP
.CODE
.STARTUP
SETCURSOR MACRO X,Y
PUSH AX
PUSH DX
MOV AH,2
MOV BH,0
MOV DH,X
MOV DL,Y
INT 10H
POP DX
POP AX
ENDM
DISPLAYSTRING MACRO X
PUSH DX
PUSH AX
LEA DX,X
MOV AH,9
INT 21H
POP AX
POP DX
ENDM
INOUTFIG MACRO X
LOCAL OUTPUT,OUTPUT1,LP1,LP2,OVER
PUSH AX
PUSH CX
PUSH BX
PUSH DX
XOR BX,BX
MOV AH,01H
INT 21H
CMP AL,0DH
JZ OUTPUT
INC BL
SUB AL,30H
MOV X,AL
MOV AH,01H
INT 21H
CMP AL,0DH
JZ OUTPUT
INC BL
SUB AL,30H
MOV AH,X
SHL AH,1
MOV X,AH
SHL AH,2
ADD X,AH
ADD X,AL
OUTPUT: CALL NEWLINE
CMP BL,0
JZ OVER
CMP BL,2
JZ OUTPUT1
MOV AX,0
MOV AL,X
MOV BH,10
DIV BH
OR AH,30H
MOV DL,AH
MOV AH,02H
INT 21H
JMP OVER
OUTPUT1:MOV CX,2
MOV AX,0
MOV AL,X
MOV BH,10
LP1:XOR AH,AH
DIV BH
OR AH,30H
MOV DL,AH
MOV DH,0
PUSH DX
LOOP LP1
MOV CX,2
LP2:POP DX
MOV AH,02H
INT 21H
LOOP LP2
OVER:CALL NEWLINE
POP DX
POP BX
POP CX
POP AX
ENDM
OUTFIG MACRO X
LOCAL LP1,LP2
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,2
MOV AX,0
MOV AL,X
MOV BH,10
LP1:XOR AH,AH
DIV BH
OR AH,30H
MOV DL,AH
MOV DH,0
PUSH DX
LOOP LP1
MOV CX,2
LP2:POP DX
MOV AH,02H
INT 21H
LOOP LP2
POP DX
POP CX
POP BX
POP AX
ENDM
PAINTCOLOR MACRO X,Y,Z
LOCAL LINE
MOV BX,Z
MOV CX,Y
MOV DX,300
LINE: MOV AH,0CH
MOV AL,BL
INT 10H
INC CX
CMP CX,Y+25
JNE LINE
MOV CX,Y
DEC DX
MOV AX,X
SHL AX,4
NOT AX
ADD AX,300
CMP DX,AX
JNE LINE
ENDM
PAINTLINE MACRO
LOCAL LINE
MOV BX,14
MOV CX,50 ;起始列坐标
MOV DX,300 ;起始行坐标
LINE: MOV AH,0CH ;写象素
MOV AL,BL ;象素值
INT 10H
INC CX ;列+1
CMP CX,350
JNE LINE
ENDM
PAINTROW MACRO
LOCAL LINE
MOV BX,14 ;点颜色
MOV CX,50 ;起始列坐标
MOV DX,300 ;起始行坐标
LINE: MOV AH,0CH ;写象素
MOV AL,BL ;象素值
INT 10H
DEC DX ;列+1
CMP DX,60
JNE LINE
ENDM
FIND MACRO X,Y
LOCAL LOP2,NEXT
PUSH SI
PUSH AX
PUSH CX
LEA SI,MARK
MOV CL,AMOUNT
DEC CL
MOV AL,BYTE PTR[SI]
LOP2: INC SI
DEC CL
CMP AL,BYTE PTR[SI]
J&X NEXT
MOV AL,BYTE PTR[SI]
NEXT: CMP CL,0
JNZ LOP2
MOV Y,AL
POP CX
POP AX
POP SI
ENDM
; MOV AH,0FH
; INT 10H
; PUSH AX
;
;
MOV AH,0
MOV AL,10H ;显示方式640*350
INT 10H
MOV AX,DS
MOV ES,AX
L: CALL MAIN
MOV AH,01H
INT 21H
CMP AL,36H ;ASCII 6
JZ L6
CMP AL,31H ;ASCII 1
JZ L1
CMP AL,32H ;ASCII 2
JZ L2
CMP AL,33H ;ASCII 3
JZ L3
CMP AL,34H ;ASCII 4
JZ L4
CMP AL,35H ;ASCII 5
JZ L5
JMP L
L6:CALL EXT
L1:CALL BRANCH1
JMP L
L2:CALL BRANCH2
JMP L
L3:CALL BRANCH3
JMP L
L4:CALL BRANCH4
JMP L
L5:CALL BRANCH5
JMP L
; POP AX
; MOV AH,0
; INT 10H
.EXIT
MAIN PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CALL CLR
SETCURSOR 3,25
DISPLAYSTRING STRING1
SETCURSOR 6,30
DISPLAYSTRING STRING2
SETCURSOR 8,30
DISPLAYSTRING STRING3
SETCURSOR 10,30
DISPLAYSTRING STRING4
SETCURSOR 12,30
DISPLAYSTRING STRING5
SETCURSOR 14,30
DISPLAYSTRING STRING6
SETCURSOR 16,30
DISPLAYSTRING STRING7
SETCURSOR 19,25
DISPLAYSTRING STRING8
POP DX
POP CX
POP BX
POP AX
RET
MAIN ENDP
BRANCH1 PROC
CALL CLR
SETCURSOR 4,20
DISPLAYSTRING BRANCHONE1
SETCURSOR 6,30
DISPLAYSTRING BRANCHONE2
INOUTFIG AMOUNT
SETCURSOR 9,30
DISPLAYSTRING BRANCHONE3
CALL INARRAY
SETCURSOR 16,30
DISPLAYSTRING BRANCHONE4
INOUTFIG EXPECT
SETCURSOR 19,20
DISPLAYSTRING BRANCHONE5
MOV AH,01H
INT 21H
RET
BRANCH1 ENDP
BRANCH2 PROC
PUSH AX
CALL CHOICE
CALL CLR
CALL DISPLAYINPUT
SETCURSOR 7,20
DISPLAYSTRING BRANCHTWO1
SETCURSOR 8,30
DISPLAYSTRING BRANCHTWO2
SETCURSOR 8,45
OUTFIG ZONE1
SETCURSOR 9,30
DISPLAYSTRING BRANCHTWO3
SETCURSOR 9,45
OUTFIG ZONE2
SETCURSOR 10,30
DISPLAYSTRING BRANCHTWO4
SETCURSOR 10,45
OUTFIG ZONE3
SETCURSOR 11,30
DISPLAYSTRING BRANCHTWO5
SETCURSOR 11,45
OUTFIG ZONE4
SETCURSOR 12,30
DISPLAYSTRING BRANCHTWO6
SETCURSOR 12,45
OUTFIG ZONE5
SETCURSOR 13,30
DISPLAYSTRING BRANCHTWO7
SETCURSOR 13,45
OUTFIG ZONE6
SETCURSOR 15,30
DISPLAYSTRING BRANCHTWO9
SETCURSOR 15,45
FIND BE,MIN
OUTFIG MIN
SETCURSOR 16,30
DISPLAYSTRING BRANCHTWO8
SETCURSOR 16,45
FIND AE,MAX
OUTFIG MAX
SETCURSOR 17,30
DISPLAYSTRING BRANCHTWO10
SETCURSOR 17,45
MOV AL,MAX
SUB AL,MIN
MOV LEN,AL
OUTFIG LEN
SETCURSOR 19,20
DISPLAYSTRING BRANCHONE5
MOV AH,01H
INT 21H
POP AX
RET
BRANCH2 ENDP
BRANCH3 PROC
CALL CLR
CALL DISPLAYINPUT
SETCURSOR 7,20
DISPLAYSTRING BRANCHTHREE
SETCURSOR 10,15
DISPLAYSTRING BRANCHTHREE2
CALL TIXISINC
CALL TIXISOUT
SETCURSOR 17,15
DISPLAYSTRING BRANCHTHREE3
CALL TIXISDEC
CALL TIXISOUT
SETCURSOR 23,20
DISPLAYSTRING BRANCHONE5
MOV AH,01H
INT 21H
RET
BRANCH3 ENDP
BRANCH4 PROC
PUSH SI
PUSH BX
PUSH AX
PUSH CX
CALL CLR
CALL DISPLAYINPUT
SETCURSOR 7,30
DISPLAYSTRING BRANCHFOUR
CALL NEWLINE
SETCURSOR 7,38
LEA SI,MARK
MOV BL,AMOUNT
MOV AX,0
MOV AL,BYTE PTR [SI]
LA: INC SI
DEC BL
CMP BL,0
JZ OVER
ADD AL,BYTE PTR [SI]
ADC AH,0
JMP LA
OVER:MOV CL,AMOUNT
DIV CL
MOV CX,2
MOV BH,10
LP1:XOR AH,AH
DIV BH
OR AH,30H
MOV DL,AH
MOV DH,0
PUSH DX
LOOP LP1
MOV CX,2
LP2:POP DX
MOV AH,02H
INT 21H
LOOP LP2
SETCURSOR 15,20
DISPLAYSTRING BRANCHONE5
MOV AH,01H
INT 21H
POP CX
POP AX
POP BX
POP SI
RET
BRANCH4 ENDP
BRANCH5 PROC
CALL CLR
CALL DISPLAYINPUT
CALL STAT
CALL PAINT
SETCURSOR 7,20
DISPLAYSTRING BRANCHONE5
MOV AH,01H
INT 21H
ret
BRANCH5 endp
DISPLAYINPUT PROC
SETCURSOR 0,20
DISPLAYSTRING BRANCH
OUTFIG AMOUNT
CALL NEWLINE
CALL TIXISOUT
OUTFIG EXPECT
CALL NEWLINE
ret
DISPLAYINPUT endp
CHOICE PROC
PUSH SI
PUSH CX
LEA SI,MARK
MOV CL,AMOUNT
BEG:CMP BYTE PTR [SI],30
JBE H1
CMP BYTE PTR [SI],59
JBE H2
CMP BYTE PTR [SI],69
JBE H3
CMP BYTE PTR [SI],79
JBE H4
CMP BYTE PTR [SI],89
JBE H5
CMP BYTE PTR [SI],100
JBE H6
H1:INC ZONE1
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H2:INC ZONE2
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H3:INC ZONE3
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H4:INC ZONE4
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H5:INC ZONE5
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H6:INC ZONE6
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
OVER:CALL NEWLINE
POP CX
POP SI
ret
CHOICE endp
STAT PROC
PUSH SI
PUSH CX
LEA SI,MARK
MOV CL,AMOUNT
BEG:CMP BYTE PTR [SI],10
JBE H1
CMP BYTE PTR [SI],20
JBE H2
CMP BYTE PTR [SI],30
JBE H3
CMP BYTE PTR [SI],40
JBE H4
CMP BYTE PTR [SI],50
JBE H5
CMP BYTE PTR [SI],60
JBE H6
CMP BYTE PTR [SI],70
JBE H7
CMP BYTE PTR [SI],80
JBE H8
CMP BYTE PTR [SI],90
JBE H9
CMP BYTE PTR [SI],100
JBE H10
H1:INC ZO1
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H2:INC ZO2
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H3:INC ZO3
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H4:INC ZO4
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H5:INC ZO5
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H6:INC ZO6
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H7:INC ZO7
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H8:INC ZO8
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H9:INC ZO9
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
H10:INC ZO10
INC SI
DEC CL
CMP CL,0
JZ OVER
JMP BEG
OVER:CALL NEWLINE
POP CX
POP SI
ret
STAT endp
INARRAY PROC
PUSH AX
PUSH CX
PUSH BX
PUSH DX
PUSH SI
PUSH DI
LEA SI,MARK
MOV CX,0
LAN1:MOV AH,01H
INT 21H
CMP AL,0DH
JZ COP
SUB AL,30H
MOV BYTE PTR [SI],AL
MOV AH,01H
INT 21H
CMP AL,0DH
JZ COP
CMP AL,32
JZ KONG
SUB AL,30H
MOV AH,BYTE PTR [SI]
SHL AH,1
MOV BYTE PTR [SI],AH
SHL AH,2
ADD BYTE PTR [SI],AH
ADD BYTE PTR [SI],AL
MOV AH,01H
INT 21H
CMP AL,0DH
JZ COP
CMP AL,32
JZ KONG
KONG: INC SI
INC CX
JMP LAN1
COP:MOV LENTH,CX
CALL NEWLINE
LEA DI,MARK
LAN:MOV CX,2
MOV AX,0
MOV AL,BYTE PTR[DI]
MOV BH,10
LP1:XOR AH,AH
DIV BH
OR AH,30H
MOV DL,AH
MOV DH,0
PUSH DX
LOOP LP1
MOV CX,2
LP2:POP DX
MOV AH,02H
INT 21H
LOOP LP2
MOV DL,32
MOV AH,02H
INT 21H
INC DI
DEC LENTH
CMP LENTH,0
JZ COP1
JMP LAN
COP1:CALL NEWLINE
POP DI
POP SI
POP DX
POP BX
POP CX
POP AX
ret
INARRAY endp
TIXISINC PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CL,AMOUNT
DEC CL
OUTLP:MOV DL,CL
LEA BX,MARK
INLP:MOV AL,BYTE PTR[BX]
CMP AL,BYTE PTR[BX+1]
JNA NEXT
XCHG AL,[BX+1]
MOV [BX],AL
NEXT:INC BX
DEC DL
JNZ INLP
DEC CL
JNZ OUTLP
POP DX
POP CX
POP BX
POP AX
ret
TIXISINC endp
TIXISDEC PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CL,AMOUNT
DEC CL
OUTLP:MOV DL,CL
LEA BX,MARK
INLP:MOV AL,BYTE PTR[BX]
CMP AL,BYTE PTR[BX+1]
JNB NEXT
XCHG AL,[BX+1]
MOV [BX],AL
NEXT:INC BX
DEC DL
JNZ INLP
DEC CL
JNZ OUTLP
POP DX
POP CX
POP BX
POP AX
ret
TIXISDEC endp
TIXISOUT PROC
PUSH DI
PUSH CX
PUSH AX
PUSH BX
PUSH DX
MOV BL,AMOUNT
LEA DI,MARK
LAN:MOV CX,2
MOV AX,0
MOV AL,BYTE PTR[DI]
MOV BH,10
LP1:XOR AH,AH
DIV BH
OR AH,30H
MOV DL,AH
MOV DH,0
PUSH DX
LOOP LP1
MOV CX,2
LP2:POP DX
MOV AH,02H
INT 21H
LOOP LP2
MOV DL,32
MOV AH,02H
INT 21H
INC DI
DEC BL
CMP BL,0
JZ COP1
JMP LAN
COP1:CALL NEWLINE
POP DX
POP BX
POP AX
POP CX
POP DI
ret
TIXISOUT endp
CLR PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,06H
MOV AL,0
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV BH,07H
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
CLR ENDP
EXT PROC
PUSH AX
MOV AX,4C00H
INT 21H
POP AX
RET
EXT ENDP
NEWLINE PROC
PUSH AX
PUSH DX
MOV AH,02H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
PAINT PROC
;MOV AH,0FH
;INT 10H
;PUSH AX
;
;
;
; MOV AH,0
; MOV AL,10H ;显示方式640*350
; INT 10H
PAINTCOLOR ZO1,50,1
PAINTCOLOR ZO2,75,2
PAINTCOLOR ZO3,100,3
PAINTCOLOR ZO4,125,4
PAINTCOLOR ZO5,150,5
PAINTCOLOR ZO6,175,6
PAINTCOLOR ZO7,200,7
PAINTCOLOR ZO8,225,8
PAINTCOLOR ZO9,250,9
PAINTCOLOR ZO10,275,10
PAINTLINE
PAINTROW
MOV AH,13H
LEA BP,PAINTZ
MOV CX,LEN_Z
MOV DH,22
MOV DL,7
MOV BH,0
MOV AL,1
INT 10H
MOV AH,13H
LEA BP,PAINTM
MOV CX,LEN_M
MOV DH,21
MOV DL,40
MOV BH,0
MOV AL,1
INT 10H
MOV AH,13H
LEA BP,PAINTP
MOV CX,LEN_P
MOV DH,5
MOV DL,4
MOV BH,0
MOV AL,1
INT 10H
;
; MOV AH,01
; INT 21H
;
;
; POP AX
MOV AH,0
INT 10H
ret
PAINT endp
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -