大虾帮帮忙 一个排序问题
请问怎么更改下面代码,能在屏幕上得到一个正确由小到大排序的答案。
程序代码:
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
SORTNUM EQU 9
MESS1 DB 'INPUT SEGMENT VALUE:$'
MESS2 DB 'INPUT SEGMENT VALUE:$'
MESS3 DB 'SORT OK!',0DH,0AH,'$'
ERROR DB 'INPUT ERROR!',0DH,0AH,'$'
DATA ENDS
STACK SEGMENT
STA DW 32 DUP (?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
mov ES,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H
CALL GETNUM
MOV ES,DX
CRLF
MOV AH,09H
MOV DX,OFFSET MESS2
INT 21H
CALL GETNUM
MOV SI,DX
PUSH ES
POP DS
MOV CX,SORTNUM
DEC CX
XOR BX,BX
III: MOV AL,[SI+BX]
MOV AH,BL
PUSH CX
MOV CX,SORTNUM
SUB CX,BX
DEC CX
MOV DX,BX
JJJ: INC DX
MOV BX,DX
CMP AL,[SI+BX]
JBE UUU
MOV AL,[SI+BX]
MOV AH,DL
UUU: POP BX
LOOP JJJ
MOV CL,[SI+BX]
MOV [SI+BX],AL
MOV DL,AH
PUSH BX
MOV BX,DX
MOV [SI+BX],CL
POP BX
INC BX
POP CX
LOOP III
PUSH DS
MOV AX,DATA
MOV DS,AX
MOV AH,09H
MOV DX,OFFSET MESS3
INT 21H
POP DS
MOV CX,SORTNUM
VVV: MOV AL,[SI]
CALL DISPL
CRLF
INC SI
LOOP VVV
MOV AX,4C00H
INT 21H
DISP1 PROC NEAR
PUSH CX
MOV BL,AL
MOV DL,BL
MOV CL,04
ROL DL,CL
AND DL,0FH
CALL DISP1
MOV DL,BL
AND DL,0FH
CALL DISPL
POP CX
RET
DISP1 ENDP
DISPL PROC NEAR
ADD DL,30H
CMP DL,3AH
JB DDD
ADD DL,27H
DDD: MOV AH,02H
INT 21H
RET
DISPL ENDP
GETNUM PROC NEAR
PUSH CX
XOR DX,DX
GGG: MOV AH,01H
INT 21H
CMP AL,0DH
JZ PPP
CMP AL,20H
JZ PPP
SUB AL,30H
JB KKK
CMP AL,0AH
JB GETS
CMP AL,11H
JB KKK
SUB AL,07H
CMP AL,0FH
JBE GETS
CMP AL,2AH
JB KKK
CMP AL,2FH
JA KKK
SUB AL,20H
GETS: MOV CL,04
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP GGG
KKK: MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
PPP: PUSH DX
CRLF
POP DX
POP CX
RET
GETNUM ENDP
CODE ENDS
END START