📄 dos.txt
字号:
DATA SEGMENT
ERROR DB 'please input again','$'
BUFFER DB 100
DB 0
DB 100 DUP(0)
OTHER_ARRAY DB 100 DUP(0)
FINAL_ARRAY DB 100 DUP(0)
RESULT DB 100 DUP(0)
TEMP DW 0H
DATA ENDS
STA SEGMENT STACK'stack'
DB 100H DUP(0)
STA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STA
MAIN PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
RETREY: LEA AX,BUFFER
PUSH AX
LEA AX,ERROR
PUSH AX
CALL KEYIN
LEA DI,OTHER_ARRAY
MOV DX,0
LEA SI,BUFFER
MOV CL,BYTE PTR[SI+1]
MOV CH,0
PUSH CX
LOOP1: MOV AL,BYTE PTR[SI+2]
SUB AL,20H
JNZ LOAD
INC SI
LOOP LOOP1
JMP SHIFT
LOAD: MOV AL,BYTE PTR[SI+2]
SUB AL,'0'
MOV BYTE PTR[DI],AL
INC SI
INC DI
INC DX
LOOP LOOP1
SHIFT: SHR DX,1
MOV TEMP ,DX
MOV CX,DX
LEA DI,OTHER_ARRAY
MOV SI,0H
PUSH CX
SHL CX,1
MOV DH,0H
ORIGINAL: MOV DL,[OTHER_ARRAY+SI]
TEST SI,0001H
JZ ZERO
JMP ZI
ZERO: PUSH DX
MOV AH,02H
MOV DL,20H
INT 21H
POP DX
ZI: ADD DL,30H
MOV AH,02H
INT 21H
INC SI
LOOP ORIGINAL
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
POP CX
LOOP2: MOV AH,[DI]
MOV AL,[DI+1]
MOV [DI],AL
MOV [DI+1],AH
INC DI
INC DI
LOOP LOOP2
MOV SI,0H
POP CX
SHL CX,1
WRONG: MOV AL,BYTE PTR[OTHER_ARRAY+SI]
ADD AL,'0'
CMP AL,40H
INC SI
JA GET_BACK
LOOP WRONG
JMP FUC
GET_BACK: LEA DX,ERROR
MOV AH,09H
INT 21H
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
JMP RETREY
FUC: LEA AX,FINAL_ARRAY
PUSH AX
LEA AX,OTHER_ARRAY
PUSH AX
PUSH DX
CALL FUNCTION1
LEA AX,FINAL_ARRAY
PUSH AX
LEA AX,OTHER_ARRAY
PUSH AX
PUSH DX
CALL SORT
LEA AX,FINAL_ARRAY
PUSH AX
LEA AX,OTHER_ARRAY
PUSH AX
CALL LOOK
MOV AX, 4C00H
INT 21H
MAIN ENDP
FUNCTION1 PROC NEAR
PUSH BP
MOV BP,SP
MOV SI,[BP+6]
MOV DI,[BP+8]
MOV CX,[BP+4]
MOV BL,1
LOOPA: MOV AX,WORD PTR[SI]
MOV WORD PTR[DI],AX
MOV BYTE PTR[DI+2],BL
INC BL
INC SI
INC SI
INC DI
INC DI
INC DI
LOOP LOOPA
POP BP
RET 6
FUNCTION1 ENDP
KEYIN PROC NEAR
PUSH BP
MOV BP,SP
AGAIN: MOV AX ,[BP+6]
MOV DX,AX
MOV AH,0AH
INT 21H
POP BP
RET 4
KEYIN ENDP
SORT PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,[BP+6]
MOV SI,AX
MOV CX,WORD PTR[BP+4]
PUSH CX
COTI: MOV BL,0
MOV CX,WORD PTR[BP+4]
MOV DI,CX
SHL DI,1
DEC DI
DEC DI
DEC CX
AGAN: MOV AX,WORD PTR[OTHER_ARRAY+DI]
CMP AX,WORD PTR[OTHER_ARRAY+DI-2]
JGE NEXT
XCHG AX,WORD PTR[OTHER_ARRAY+DI-2]
MOV WORD PTR[OTHER_ARRAY+DI],AX
MOV BL,-1
NEXT: DEC DI
DEC DI
LOOP AGAN
CMP BL,0
JNE COTI
POP CX
POP BP
RET 6
SORT ENDP
LOOK PROC NEAR
PUSH BP
MOV BP,SP
PUSH CX
MOV BX,CX
SHL BX ,1
DEC BX
DEC BX
MOV SI ,0
LOOPB: MOV DI,0H
MOV AX, WORD PTR[OTHER_ARRAY+BX]
LOOPC: CMP AX,WORD PTR[FINAL_ARRAY+DI]
JNZ RETURN
MOV AL,BYTE PTR[FINAL_ARRAY+DI+2]
MOV [RESULT+SI],AL
DEC BX
DEC BX
INC SI
LOOP LOOPB
JMP F2
RETURN: INC DI
INC DI
INC DI
JMP LOOPC
F2: MOV CX,TEMP
MOV SI,0H
LOE: MOV AH,02H
MOV DL,[RESULT+SI]
ADD DL,'0'
INT 21H
INC SI
MOV DL,20H
MOV AH,02H
INT 21H
LOOP LOE
POP BP
RET 6
LOOK ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -