主题:字符串的排序
DATA SEGMENT
NAMEPAR LABEL BYTE
MAXNLEN DB 7
NAMELEN DB ?
NAMEFLD DB 7 DUP (?)
CRLF DB 0DH,0AH,'$'
ENDADDR DW ?
MSG1 DB 'NAME?','$'
MSG2 DB 'SORTED NAME:',0DH,0AH,'$'
NAMECTR DB 0
NAMETAB DB 10 DUP(6 DUP(' '))
NAMESAV DB 6 DUP(?),0DH,0AH,'$'
SWAPPED DB 0
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DW 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
MAIN PROC FAR
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV SP,200
CLD
LEA DI,NAMETAB
A20LOOP:
CALL B10READ
CMP NAMELEN,0
JZ A30
CMP NAMECTR,10
JE A30
CALL D10STOR
JMP A20LOOP
A30:
CMP NAMECTR,1
JBE A40
CALL G10SORT
CALL K10DISP
A40:
RET
MAIN ENDP
B10READ PROC NEAR
MOV AH,9
LEA DX,MSG1
INT 21H
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
MOV AH,9
LEA DX,CRLF
INT 21H
MOV BH,0
MOV BL,NAMELEN
MOV CX,7
SUB CX,BX
B20:
MOV NAMEFLD[BX],20H
INC BX
LOOP B20
RET
B10READ ENDP
D10STOR PROC NEAR
INC NAMECTR
CLD
LEA SI,NAMEFLD
MOV CX,6
REP MOVSB
RET
D10STOR ENDP
G10SORT PROC NEAR
SUB DI,12
MOV ENDADDR,DI
G20:
MOV SWAPPED,0
LEA SI,NAMETAB
G30:
MOV CX,6
MOV DI,SI
ADD DI,6
MOV AX,DI
MOV BX,SI
REPE CMPSB
JBE G40
CALL H10XCHG
G40:
MOV SI,AX
CMP SI,ENDADDR
JBE G30
CMP SWAPPED,0
JNZ G20
RET
G10SORT ENDP
H10XCHG PROC NEAR
MOV CX,6
LEA DI,NAMESAV
MOV SI,BX
REP MOVSB
MOV CX,6
MOV DI,BX
MOV SI,AX
REP MOVSB
MOV CX,6
LEA SI,NAMESAV
MOV DI,AX
REP MOVSB
MOV SWAPPED,1
RET
H10XCHG ENDP
K10DISP PROC NEAR
MOV AH,9
LEA DX,MSG2
INT 21H
LEA SI,NAMETAB
k20: LEA DI,NAMESAV
MOV CX,6
REP MOVSB
MOV AH,9
LEA DX,NAMESAV
INT 21H
DEC NAMECTR
JNZ K20
RET
K10DISP ENDP
CODE ENDS
END START
以上是我的程序,我不知道怎么回事,结果总是不对,那位帮我看看呀
NAMEPAR LABEL BYTE
MAXNLEN DB 7
NAMELEN DB ?
NAMEFLD DB 7 DUP (?)
CRLF DB 0DH,0AH,'$'
ENDADDR DW ?
MSG1 DB 'NAME?','$'
MSG2 DB 'SORTED NAME:',0DH,0AH,'$'
NAMECTR DB 0
NAMETAB DB 10 DUP(6 DUP(' '))
NAMESAV DB 6 DUP(?),0DH,0AH,'$'
SWAPPED DB 0
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DW 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
MAIN PROC FAR
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV SP,200
CLD
LEA DI,NAMETAB
A20LOOP:
CALL B10READ
CMP NAMELEN,0
JZ A30
CMP NAMECTR,10
JE A30
CALL D10STOR
JMP A20LOOP
A30:
CMP NAMECTR,1
JBE A40
CALL G10SORT
CALL K10DISP
A40:
RET
MAIN ENDP
B10READ PROC NEAR
MOV AH,9
LEA DX,MSG1
INT 21H
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
MOV AH,9
LEA DX,CRLF
INT 21H
MOV BH,0
MOV BL,NAMELEN
MOV CX,7
SUB CX,BX
B20:
MOV NAMEFLD[BX],20H
INC BX
LOOP B20
RET
B10READ ENDP
D10STOR PROC NEAR
INC NAMECTR
CLD
LEA SI,NAMEFLD
MOV CX,6
REP MOVSB
RET
D10STOR ENDP
G10SORT PROC NEAR
SUB DI,12
MOV ENDADDR,DI
G20:
MOV SWAPPED,0
LEA SI,NAMETAB
G30:
MOV CX,6
MOV DI,SI
ADD DI,6
MOV AX,DI
MOV BX,SI
REPE CMPSB
JBE G40
CALL H10XCHG
G40:
MOV SI,AX
CMP SI,ENDADDR
JBE G30
CMP SWAPPED,0
JNZ G20
RET
G10SORT ENDP
H10XCHG PROC NEAR
MOV CX,6
LEA DI,NAMESAV
MOV SI,BX
REP MOVSB
MOV CX,6
MOV DI,BX
MOV SI,AX
REP MOVSB
MOV CX,6
LEA SI,NAMESAV
MOV DI,AX
REP MOVSB
MOV SWAPPED,1
RET
H10XCHG ENDP
K10DISP PROC NEAR
MOV AH,9
LEA DX,MSG2
INT 21H
LEA SI,NAMETAB
k20: LEA DI,NAMESAV
MOV CX,6
REP MOVSB
MOV AH,9
LEA DX,NAMESAV
INT 21H
DEC NAMECTR
JNZ K20
RET
K10DISP ENDP
CODE ENDS
END START
以上是我的程序,我不知道怎么回事,结果总是不对,那位帮我看看呀