当前位置: 代码迷 >> 汇编语言 >> 字符串排序遇到一些有关问题
  详细解决方案

字符串排序遇到一些有关问题

热度:140   发布时间:2016-05-02 04:29:22.0
字符串排序遇到一些问题
题目是这样
题目九    字符排序及显示
设计内容要求: 
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
这几句是换行,一直换行当然什么都没有了

恩,你本来是想把换行写到循环外面吧,输出完了换一行。
  相关解决方案