你好,你的程序已经能正常执行了,可是排序是按照降序的,请问怎么可以改成升序的。就是按照abcd……排序

[复制链接]
查看11 | 回复2 | 2011-4-29 09:08:16 | 显示全部楼层 |阅读模式
你好,你的程序已经能正常执行了,可是排序是按照降序的,请问怎么可以改成升序的。就是按照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
回复

使用道具 举报

千问 | 2011-4-29 09:08:16 | 显示全部楼层
只需要改动一行。
……
NEXT2:
MOVAL,[DI]
INCDI
CMPAL,[DI]
JNCNEXT3;把本行改为:JCNEXT3,即可。
MOVDL,[DI]
MOV[DI-1],DL
MOV[DI],AL
NEXT3:
……









<h4class=\"ask\">追问


虽然回答的不对,但是也只能给你了。
回复

使用道具 举报

千问 | 2011-4-29 09:08:16 | 显示全部楼层
按照你说的改好像不行。
麻烦了,结果不对,不是逻辑上不对,是混合输出的。请执行看一下效果。麻烦了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行