首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

汇编 字符串冒泡排序解决方案

2013-01-09 
汇编字符串冒泡排序题目是:输入一个字符串,然后对每个字符进行冒泡排序,最后输出一个按字符从小到大排序的

汇编 字符串冒泡排序
题目是:输入一个字符串,然后对每个字符进行冒泡排序,最后输出一个按字符从小到大排序的字符串!
以下是我写的代码,不知道哪里出问题了,请高手指点一下,万分感激!!
        DATA  SEGMENT
     STRING1  DB        100 DUP(?)  ;输入的字符串
        DATA  ENDS

        CODE  SEGMENT
              ASSUME    CS:CODE, DS:DATA
      START:
              MOV       AX, DATA
              MOV       DS, AX
              LEA       BX, STRING1 ;    把string1的地址赋给BX
              MOV       AH, 1
      SCANF:
              INT       21H         ;获得按键的ASCII代码值,即输入
              CMP       AL, 13      ;如果回车则停止输入
              JZ        END_SCANF   ;输入完毕
              MOV       [BX], AL    ;把每一个字符存入[BX]即string1中
              ADD       BX, 1       ;BX下移,准备存入下个字符
              JMP       SCANF       ;继续输入直到回车
  END_SCANF:  MOV       DI,OFFSET STRING1       ;冒泡的次数
              MOV       SI,OFFSET STRING1       ;一次冒泡的过程
    COMPARE:  MOV       AL,[SI]
              CMP       AL,BYTE PTR[SI+1]
              JGE       EXCHANGE    ;如果大于后一个,则两数交换
              ADD       SI,1
              CMP       SI,BX
              JGE       ADD_DI      ;已比到最后一个数,则进行下一次的冒泡
              JMP       COMPARE     ;否则继续比较下一组数
   EXCHANGE:  MOV       AL ,[SI]


              XCHG      AL,[SI+1]
              MOV       [SI],AL     ;交换两数的值
              ADD       SI,1        ;准备比较下一组数
              CMP       SI,BX
              JGE       ADD_DI
              JMP       COMPARE
     ADD_DI:  ADD       DI,1
              CMP       DI,BX
              JGE       PRINT
              MOV       SI,DI
              JMP       COMPARE
      PRINT:  MOV       BYTE PTR [BX],'$'       ;加入美元结束符号
              MOV       AH,9
              LEA       DX,STRING1
              INT       21H         ;输出排完序后的字符串
              MOV       AX, 4C00H   ;安全退出程序返回dos
              INT       21H
        CODE  ENDS
              END       START

[解决办法]
 无语法错误

热点排行