2017-04-16 12:21

# 汇编语言冒泡法排序两位数 输出不了结果 求大神指教

`````` DATA SEGMENT
NUMBER DB 100,?,100 DUP(?)               ;开辟空白空间
TAB DB 0DH,0AH,'\$'                     ;空格回车
LIST1 DB 'INPUT NUMBERS\$'               ;输入数字
LIST2 DB 'INPUT NUMBERS\$'
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA , CS:CODE
START:
MOV AX,DATA
MOV DS,AX
LEA DX,LIST1                         ;将文字显示到屏幕上
MOV AH,09H                         ;09H功能 显示字符
INT 21H                             ;DOS调用
LEA DX,TAB                            ;空格回车
MOV AH,09H                          ;显示回车空格在屏幕上
INT 21H

INPUT:
LEA BP,NUMBER
XOR BX,BX
MOV AH,01H
INT 21H
SUB AL,30H
MOV AH,00H
MOV BL,10H
MUL BL                      ;BL和AL相乘放在AX里
MOV CL,AL
MOV AH,01H
INT 21H
SUB AL,30H
MOV AH,00H
MOV DS:[BP],AL;存入NUMBER中
CMP AL,24H;判断是否与￥一样
JZ LP0
INC BP
INC BL
JMP INPUT

LP0:
LEA SI,NUMBER
INC SI                                 ;SI-1
MOV CL,[SI]                            ;输入个数->CL
DEC CL
INC SI
MOV BX,SI                              ;外循环初始化SI=BX,CH=CL
MOV CH,CL
MOV AL,[BX]

LP1:
INC BX
CMP [BX],AL                             ; [BX]-AL是否有近位 即CF=1
JNC LP2
XCHG AL,[BX]

LP2:
DEC CH
JNZ LP1                                  ;不为零跳转
CMP CH,'0'
JE LP3

LP3:
MOV [SI],AL
INC SI
DEC CL
JNZ LP0
CMP CL,'0'
JE LP4

LP4:
MOV AL,'\$'                                  ;代表‘ONPUT NUMBER’字符串
MOV [SI+1],AL
LEA DX,TAB
MOV AH,09H
INT 21H

LEA DX,LIST2
MOV AH,09H
INT 21H
LEA DX,TAB
MOV AH,09H
INT 21H

MOV DX,OFFSET NUMBER                          ;将NUMBER的偏移地址给DX
INC DX
INC DX
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H

CODE ENDS
END START

``````
• 点赞
• 写回答
• 关注问题
• 收藏
• 复制链接分享
• 邀请回答