?? wordsort.asm
字號:
STACK SEGMENT PARA STACK
S_AREA DW 100H DUP(?)
S_TOP EQU $-S_AREA
STACK ENDS
DATA SEGMENT PARA
WORD_LIST DB 'Bojan Messi ThierryHenry Eto'o Gudjohnsen Deco YayaToure Ronaldinho Iniesta Xavi Milito',00H
WORD_LIST2 DB 256 DUP(?)
TEMP DB 20 DUP(?)
BOY DB 'Puyol',00H
VALUE DB 16
LENTH DW 11
NEW_LINE DB 0DH,0AH,'$'
DATA ENDS
CODE SEGMENT PARA
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,S_TOP
MOV SI,OFFSET WORD_LIST
MOV DI,OFFSET WORD_LIST2
CALL DISP1
CALL STRCPY
MOV DI,OFFSET WORD_LIST2
MOV CX,256
XOR DX,DX
LP1: MOV DL,[DI]
MOV AH,02H
INT 21H
INC DI
LOOP LP1
MOV DX,OFFSET NEW_LINE
MOV AH,9
INT 21H
PUSH CX
MOV CX,11
CALL DISP2
CALL SORT
MOV CX,11
CALL DISP2
POP CX
CALL INSERT
MOV CX,12
CALL DISP2
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
DISP1 PROC
PUSH SI
PUSH DX
MOV SI,OFFSET WORD_LIST
XOR DX,DX
DP1: MOV DL,[SI]
CMP DL,0
JE DP2
MOV AH,02H
INT 21H
INC SI
LOOP DP1
DP2: MOV DX,OFFSET NEW_LINE
MOV AH,9
INT 21H
POP DX
POP SI
RET
DISP1 ENDP
DISP2 PROC
PUSH DI
PUSH DX
PUSH BX
MOV DI,OFFSET WORD_LIST2
DP5: PUSH DI
PUSH CX
MOV CX,16
XOR DX,DX
DP3: MOV DL,[DI]
MOV AH,02H
INT 21H
CMP DL,0
JE DP4
INC DI
DEC BX
LOOP DP3
DP4: POP CX
POP DI
ADD DI,16
LOOP DP5
MOV DX,OFFSET NEW_LINE
MOV AH,9
INT 21H
POP BX
POP DX
POP DI
RET
DISP2 ENDP
STRCPY PROC
PUSH SI
PUSH DI
PUSH CX
MOV SI,OFFSET WORD_LIST
MOV DI,OFFSET WORD_LIST2
MOV CX,11
SLP3: PUSH CX
PUSH DI
MOV CX,16
SLP2: MOV DL,[SI]
CMP DL,20H
JE SLP1
MOV [DI],DL
INC SI
INC DI
LOOP SLP2
SLP1: MOV DL,0
MOV [DI],DL
INC SI
POP DI
ADD DI,16
POP CX
LOOP SLP3
POP CX
POP DI
POP SI
RET
STRCPY ENDP
SORT PROC
PUSH AX
PUSH DX
PUSH BX
PUSH DI
PUSH SI
PUSH CX
MOV SI,OFFSET WORD_LIST2
MOV BX,11
SP3: MOV DX,0;標志位0
MOV SI,OFFSET WORD_LIST2
MOV CX,10
SP2: MOV DI,SI
ADD DI,16
CALL STRCMP
CMP AX,1
JBE SP1
MOV DX,1;標志位1
PUSH DI
MOV DI,OFFSET TEMP
CALL STRCPY2;SI->TEMP
POP DI
PUSH SI
PUSH DI
XCHG SI,DI
CALL STRCPY2;DI->SI
MOV SI,OFFSET TEMP
POP DI
CALL STRCPY2;TEMP->DI
POP SI
SP1: ADD SI,16
LOOP SP2
CMP DX,0
JE SP4
DEC BX
CMP BX,0
JA SP3
SP4: POP CX
POP SI
POP DI
POP BX
POP DX
POP AX
RET
SORT ENDP
STRCPY2 PROC;調用已有參數SI DI
PUSH DX
PUSH DI
PUSH SI
SCLP1: MOV DL,[SI]
CMP DL,0
JE SCLP2
MOV [DI],DL
INC SI
INC DI
JMP SCLP1
SCLP2: MOV DL,0
MOV [DI],DL
POP SI
POP DI
POP DX
RET
STRCPY2 ENDP
STRCMP PROC
PUSH DX
PUSH DI
PUSH SI
CP3: MOV DL,[SI]
CMP DL,[DI]
JA CP1
JB CP2
CMP DL,0
JE CP4
INC SI
INC DI
JMP CP3
CP1: MOV AX,2
JMP SHORT RETURN
CP2: MOV AX,0
JMP SHORT RETURN
CP4: MOV AX,1
RETURN: POP SI
POP DI
POP DX
RET
STRCMP ENDP
INSERT PROC
PUSH DX
PUSH SI
PUSH DI
PUSH CX
MOV DI,OFFSET BOY
MOV SI,OFFSET WORD_LIST2
MOV CX,11
ILP2: CALL STRCMP
CMP AL,1
JA ILP1
ADD SI,16
LOOP ILP2
ILP1: PUSH SI
PUSH DI
CMP CX,0
JE ILP3
MOV AX,CX
MUL VALUE
ADD SI,AX
ILP4: MOV DI,SI
SUB SI,16
CALL STRCPY2
LOOP ILP4
ILP3: POP DI
POP SI
MOV DI,SI
MOV SI,OFFSET BOY
CALL STRCPY2
POP CX
POP DI
POP SI
POP DX
RET
INSERT ENDP
CODE ENDS
END MAIN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -