题目是这样
题目九 字符排序及显示
设计内容要求:
1、菜单
内容包括:①输入字符串;②排序字符串;③显示字符串;④显示排序后字符串; ⑤退出。
2、输入字符串
选择该项后,可以输入一个字符串。该字符串作为原始数据保存在一个存储区。
3、排序字符串
对输入字符串进行排序,存入另外一个存储区。并显示排序花费时间。
4、可以显示源字符串及排序后的字符串,按照列显示,从上到下显示。
5、在主菜单中选择退出项,则结束程序返回DOS。
我的程序
DATA SEGMENT
DATA1 DB 127
DB ?
DB 121 DUP(?)
DATA2 DB 127 DUP(?)
DATA3 DB 127 DUP(?)
DIZHI DB 127 DUP(?)
TIME DB 10 DUP(?)
UTIME DB 'SORTING FEE TIME:$'
MENU DB 'MENR$'
MENU1 DB '1.INPUT STRING$'
MENU2 DB '2.SORT STRING$'
MENU3 DB '3.DISPLAYS A STRING$'
MENU4 DB '4.AFTER SORTING THE STRING TO DISPLAY$'
MENU5 DB '5.EXIT$'
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
STT DB 255 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,SIZE STT
MMENU: MOV DX,OFFSET MENU
MOV AH,9
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET MENU1
MOV AH,9
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET MENU2
MOV AH,9
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET MENU3
MOV AH,9
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET MENU4
MOV AH,9
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DX,OFFSET MENU5
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,31H
JE MM1
CMP AL,32H
JE MM2
CMP AL,33H
JE MM3
CMP AL,34H
JE MM4
CMP AL,35H
JE STOP
MM1: MOV DL,0AH
MOV AH,02H
INT 21H
CALL M1
JMP MMENU
MM2: MOV DL,0AH
MOV AH,02H
INT 21H
CALL M2
JMP MMENU
MM3: MOV DL,0AH
MOV AH,02H
INT 21H
CALL M3
JMP MMENU
MM4: MOV DL,0AH
MOV AH,02H
INT 21H
CALL M4
JMP MMENU
STOP: MOV AH,4CH
INT 21H
M1 PROC
MOV DX,OFFSET DATA1
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV BX,DX
MOV SI,BX
MOV DI,OFFSET DATA3
MOV CX,[BX+1]
CLD
REP MOVSB
RET
M1 ENDP
M2 PROC
MOV AH,2CH
INT 21H
MOV BX,OFFSET TIME
MOV [BX],DH
MOV [BX+1],DL
MOV BX,OFFSET DATA1
MOV SI,[BX+1]
LP2: MOV BX,OFFSET DATA1
MOV CX,[BX+1]
DEC CX
MOV BX,OFFSET DATA3
MOV AX,[BX]
DEC BX
PUSH BX
INC BX
LP1: MOV DX,[BX+1]
CMP AX,DX
JBE AA1
MOV AX,DX
AA1: PUSH BX
INC BX
LOOP LP1
MOV BX,OFFSET DATA2
MOV [BX],AX
POP BX
MOV AX,00H
MOV [BX+1],AX
DEC SI
JNZ LP2
MOV BX,OFFSET TIME
MOV AH,2CH
INT 21H
MOV AH,[BX]
MOV AL,[BX+1]
SUB DL,AL
SBB DH,AH
XOR AL,AL
XOR CX,CX
MOV CL,DH
TJ: ADD AL,1
DAA
LOOP TJ
MOV AH,AL
OR AL,0FH
AND AL,30H
OR AH,0F0H
MOV CL,4
SHR AH,CL
AND AH,30H
MOV [BX],AH
MOV [BX+1],AL
MOV AX,2EH
MOV [BX+2],AX
XOR AL,AL
XOR CX,CX
MOV CL,DL
TJ2: ADD AL,1
DAA
LOOP TJ2
MOV AH,AL
OR AL,0FH
AND AL,30H
OR AH,0F0H
MOV CL,4
SHR AH,CL
AND AH,30H
MOV [BX+3],AH
MOV [BX+4],AL
MOV AX,73H
MOV [BX+5],AX
MOV AX,24H
MOV [BX+6],AX
MOV DX,OFFSET UTIME
MOV AH,9
INT 21H
MOV DX,BX
MOV AH,9
INT 21H
RET
M2 ENDP
M3 PROC
MOV BX,OFFSET DATA1
MOV CX,[BX+1]
LPP: MOV DL,[BX+3]
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
INC BX
LOOP LPP
RET
M3 ENDP
M4 PROC
MOV BX,OFFSET DATA1
MOV CX,[BX+1]
MOV BX,OFFSET DATA2
LPP1: MOV DL,[BX]
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
INC BX
LOOP LPP1
RET
M4 ENDP
CODE ENDS
END START
输入还好选2 排序时就不动了 选三显示时显示了许多空格
------解决思路----------------------
那个3的显示问题,你那个循环里的
MOV DL,0AH
MOV AH,02H
INT 21H
这几句是换行,一直换行当然什么都没有了
恩,你本来是想把换行写到循环外面吧,输出完了换一行。