⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wordsort.asm

📁 该程序是一个调用子程序实现字符串排序并在其中插入一个字符串。待字符串保存在WORD_LIST中
💻 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 + -