?? sort.asm
字號:
;數(shù)組排序排序, 可以任意限制范圍內(nèi)的任意個(gè)數(shù)的數(shù)字
;COUNT 來記錄輸入的數(shù)字的個(gè)數(shù)
;TO_BIN CONVERT NUMBER TO ARRAY
;SORT, PRINT_ARRAY
DATA SEGMENT
MSG_INPUT DB 0AH,0DH,'INTPUT A NUMBER,IF YOU WANT TO END YOUR PROCESS,PLEASE ENTER "Y".ATTENTION THE MAXSIZE IS 20','$'
MSG_GO DB 0AH,0DH,'YOUR INPUT: ',0AH,0DH,'$'
MSG_CHANGE DB 0AH,0DH,'$'
ARRAY DW 20 DUP(?)
COUNT DB 0
NUMBER DB 6,0,6 DUP(?)
TABLE DW MSG_INPUT,MSG_GO,MSG_CHANGE
DATA ENDS
;----------------------------------------------------------
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
BEGIN: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
;-----------------------------------------------------------
LEA DI,TABLE
MOV DX,[DI]
MOV AH,09H
INT 21H
MOV DX,[DI+2]
MOV AH,09H
INT 21H
XOR AL,AL
LEA DI,ARRAY
INPUT:LEA SI,NUMBER
MOV DX,SI
MOV AH,0AH
INT 21H
CALL CLR
MOV BL,[SI+2]
CMP BL,59H
JZ MMMM
CALL TO_BIN
MOV AL,COUNT
INC AL
MOV COUNT,AL
INC DI
INC DI
JMP INPUT
MMMM: CALL CLR
CALL SORT
CALL PRINT_ARRAY
RET
MAIN ENDP
;----------------------------------------------
TO_BIN PROC NEAR
XOR CX,CX
XOR DX,DX
XOR BX,BX
LEA SI,NUMBER
MOV CL,[SI+1]
INC SI
INC SI
M:PUSH CX
DEC CX
XOR AX,AX
MOV AL,[SI]
AND AL,0FH
CMP CX,0
JZ NN
AAAA: PUSH AX
SHL AX,1
SHL AX,1
SHL AX,1
MOV BX,AX
POP AX
SHL AX,1
ADD AX,BX
LOOP AAAA
NN: ADD DX,AX
POP CX
INC SI
LOOP M
MOV [DI],DX
RET
TO_BIN ENDP
;----------------------------------------------
SORT PROC NEAR
XOR CX,CX
MOV CL,COUNT
PPP:LEA SI,ARRAY
PUSH CX
DEC CX
CMP CX,0
JZ XXX
T:MOV BX,[SI]
CMP BX,[SI+2]
JBE RETURN
PUSH BX
MOV BX,[SI+2]
MOV [SI],BX
POP BX
MOV [SI+2],BX
RETURN:INC SI
INC SI
LOOP T
XXX: POP CX
LOOP PPP
RET
SORT ENDP
;----------------------------------------
PRINT_ARRAY PROC NEAR
XOR CX,CX
XOR AX,AX
LEA SI,ARRAY
MOV CL,COUNT
III:MOV AX,[SI]
MOV BX,10000D
CALL DIV_DEC
MOV BX,1000D
CALL DIV_DEC
MOV BX,100D
CALL DIV_DEC
MOV BX,10D
CALL DIV_DEC
MOV BX,1D
CALL DIV_DEC
INC SI
INC SI
MOV DL,2CH
MOV AH,02H
INT 21H
LOOP III
RET
PRINT_ARRAY ENDP
;-------------------------------------------
DIV_DEC PROC NEAR
XOR DX,DX
DIV BX
ADD AL,30H
PUSH DX
MOV DX,AX
MOV AH,02H
INT 21H
POP DX
MOV AX,DX
RET
DIV_DEC ENDP
;--------------------------------------------
CLR PROC NEAR
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
RET
CLR ENDP
;------------------------------------------
CODE ENDS
END BEGIN
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -