STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
BUFF DB 100
DB ?
DB 100 DUP(?)
BUFF1 DW 100
DW ?
DW 100 DUP(?)
STRING1 DB 0AH,0DH,'PLEASE INPUT DECIMAL DATA:$'
STRING2 DB 0AH,0DH,'PRESS ANY BUTTON TO CONTINUE;PRESS ESC TO SORT','$'
STRING3 DB 0AH,0DH,'THE ORIGNIAL DATAS IS:$'
STRING4 DB 0AH,0DH,'THE SORTED DATAS IS:$'
DATA 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
LEA SP,TOP
LEA DI,BUFF1
ADD DI,4
MOV CX,0
L1: INC CX
LEA DX,STRING1
MOV AH,09H
INT 21H
MOV AH,0AH
LEA DX,BUFF
INT 21H
LEA SI,[BUFF+1]
CALL TRANS10TO16
CALL DISPCR
CALL DISPAX
CALL DISPCR
INC DI
INC DI
MOV [DI],AX
LEA DX,STRING2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,27
JZ SORT
JMP L1
MOV AH,4CH
MOV AL,0
INT 21H
DISPAX PROC NEAR
XCHG AL,AH
CALL DISPAL
XCHG AH,AL
CALL DISPAL
RET
DISPAX ENDP
DISPAL PROC NEAR
PUSH AX
PUSH CX
PUSH DX
PUSH AX
MOV CL,4
SHR AL,CL
CALL CHANG
MOV AH,02H
MOV DL,AL
INT 21H
POP AX
AND AL,0FH
CALL CHANG
MOV AH,02H
MOV DL,AL
INT 21H
POP DX
POP CX
POP AX
RET
DISPAL ENDP
CHANG PROC NEAR
CMP AL,10
JNGE CHANG1
ADD AL,7
CHANG1:
ADD AL,30H
RET
CHANG ENDP
DISPCR PROC NEAR
PUSH AX
PUSH DX
MOV AH,02H
MOV DL,0AH
INT 21H
MOV AH,02H
MOV DL,0DH
INT 21H
POP DX
POP AX
DISPCR ENDP
TRANS10TO16 PROC NEAR
PUSH CX
PUSH DX
PUSH SI
XOR AX,AX
XOR CX,CX
MOV CL,[SI]
INC SI
MOV AL,[SI]
INC SI
SUB AL,30H
DEC CX
JCXZ TRANSF2
MOV BX,10
TRANSF1:
MUL BX
JC TRANSF_ERR
MOV DL,[SI]
INC SI
SUB DL,30H
ADD AL,DL
ADC AH,0
JC TRANSF_ERR
LOOP TRANSF1
MOV BX,0
TRANSF2:
JMP TRANSF_OK
TRANSF_ERR:
MOV BX,-1
TRANSF_OK:
POP SI
POP DX
POP CX
RET
TRANS10TO16 ENDP
SORT:PUSH CX
CALL DISPCR
LEA SI,BUFF1
ADD SI,6
LEA DX,STRING3
MOV AH,09H
INT 21H
L2:
MOV AH,02H
MOV DL,20H
INT 21H
MOV AX,[SI]
CALL DISPAX
INC SI
INC SI
DEC CX
JA L2
CALL DISPCR
POP CX
MOV BX,CX
DEC CX
XOR SI,SI
LEA SI,BUFF1
ADD SI,6
MOV DX,CX
SHL DX,1
ADD SI,DX