你好,你的程序已经能正常执行了,可是排序是按照降序的,请问怎么可以改成升序的。就是按照abcd……排序
整个代码如下
DATASEGMENT
MSG0DB0DH,0AH,\'Pleaseinputastring:$\'
MSG1DB0DH,0AH,\'Beforesort,thestringis:$\'
MSG2DB0DH,0AH,\'Aftersort,thestringreturns:$\'
BSDB0DH,0AH,\'$\'
BUFSIZEDB150;最多可键入150个字符
ACTLENDB?;实际键入的字符数
CHARSDB150DUP(20H),\'$\';实际键入的字符从此开始存放
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
MAINPROCFAR
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMSG0
MOVAH,09H
INT21H
MOVDX,OFFSETBUFSIZE;键入缓冲区起始偏移地址送DX
MOVAH,0AH
INT21H;输入字符串并送入缓冲区
MOVDX,OFFSETBS
MOVAH,09H
INT21H
CALLSORT;子程序作用是排序,具体的就是显示排序前和排序后的字符串
MOVAH,4CH;调用返回DOS功能
INT21H;返回DOS
MAINENDP
SORTPROC
MOVDX,OFFSETMSG1
MOVAH,09H
INT21H
MOVCH,0
MOVCL,ACTLEN
MOVDI,OFFSETCHARS
N1:
MOVDL,[DI]
MOVAH,02H
INT21H
INCDI
LOOPN1
MOVDX,OFFSETMSG2
MOVAH,09H
INT21H
MOVCH,0
MOVCL,ACTLEN
MOVSI,OFFSETCHARS
NEXT1:
MOVDI,SI
MOVBL,CL
NEXT2:
MOVAL,[DI]
INCDI
CMPAL,[DI]
JNCNEXT3
MOVDL,[DI]
MOV[DI-1],DL
MOV[DI],AL
NEXT3:
DECBL
JNZNEXT2
DECCL
JNZNEXT1
MOVCH,0
MOVCL,ACTLEN
MOVDI,OFFSETCHARS
N2:
MOVDL,[DI]
MOVAH,02H
INT21H
INCDI
LOOPN2
RET
SORTENDP
CODEENDS
ENDSTART
|