📄 testdd.asm
字号:
DATA SEGMENT
BUFFER DB 6
DB ?
DB 6 DUP(?)
BUF DB 60 DUP(?)
NUM DB 10 DUP(31H)
COUNT DB 0
STR1 DB 'please input the number and score.',0DH,0AH,'input @ to quit.',0DH,0AH,'$'
STR2 DB 'the result is:',0DH,0AH,'$'
STR3 DB 'error! the number and score must between 00 and 99' ,0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK
STA PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,STR1
MOV AH,9
INT 21H
NEXT:LEA DX,BUFFER ;输入
MOV AH,10
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
PUSH SI
PUSH CX
MOV CX,2
LEA SI,BUFFER+2
MOV AL,[SI]
CMP AL,40H
JNZ PP
POP CX
POP SI
JMP PAIXU ;结束
PP: CMP AL,30H
JB WARN
CMP AL,39H
JA WARN
INC SI
MOV AL,[SI]
CMP AL,39H
JA WARN
CMP AL,30H ;60
JB WARN
INC SI
INC SI
MOV AL,[SI]
LOOP PP
POP CX
POP SI ;输入正确
JMP STOREIN
WARN: ;输入出错
POP CX
POP SI
LEA DX,STR3 ;报错
MOV AH,9
INT 21H
JMP NEXT
STOREIN :INC COUNT
CMP COUNT,10
JA PAIXU
LEA SI,BUFFER+2
PUSH CX
PUSH AX
MOV CX,6
MOV AH,COUNT
LEA DI,BUF
QQ: DEC AH ;90
JZ NET
INC DI
INC DI
INC DI
INC DI
INC DI
INC DI
JMP QQ
NET:MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP NET
POP AX
POP CX
JMP NEXT
PAIXU:PUSH SI
PUSH DI
PUSH DX
PUSH AX;110
PUSH BX
PUSH CX
CMP COUNT,0
JNZ TT
RET
;比较次数
TT:MOV BL,0
LEA DI,NUM
MOV BH,COUNT
L1:
LEA SI,BUF+3
MOV CL,BL
SHL CL,1
MOV CH,CL
SHL CL,1
ADD CL,CH
XOR CH,CH
ADD CX,SI
PUSH SI
MOV SI,CX
MOV AH,[SI+1]
MOV AL,[SI]
POP SI ;学生个数
LL: MOV DH,[SI+1]
MOV DL,[SI]
;比较次数
CMP AX,DX
JB DOWN
UP:INC SI
INC SI
INC SI
INC SI
INC SI
INC SI
DEC BH ;130
JNZ LL
MOV BH,COUNT
INC BL
CMP BL,COUNT
JNZ L1
POP CX
POP BX
POP AX
POP DX
POP DI
POP SI
JMP DISPLAY
DOWN:PUSH AX
PUSH BX
PUSH DI
XOR BH,BH
ADD DI,BX
MOV AX,[DI]
INC AX
MOV [DI],AX
POP DI
POP BX
POP AX
JMP UP
DISPLAY:PUSH SI
PUSH DI
PUSH BX
MOV BL,COUNT
LEA DI,NUM
LEA SI,BUF
LEA DX,STR2
MOV AH,9
INT 21H
DEC SI
KKK: MOV BH,05H
AGAIN:INC SI
MOV DL,[SI]
MOV AH,2
INT 21H
DEC BH
JNZ AGAIN
MOV DL,20H
MOV AH,2
INT 21H
MOV DL,[DI]
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
INC SI
INC DI
DEC BL
JNZ KKK
POP BX
POP DI
POP SI
RET
STA ENDP
CODE ENDS
END STA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -