汇编语言8086 排序实验,求大神看看哪里有问题 20

程序可以生成.exe文件,但是排序循环处无法排序。也无法计数,求指点~!DATASEGMENTBUFDB100,102DUP('$')DATA1DB0DH,0AH,'Th... 程序可以生成.exe文件,但是排序循环处无法排序。也无法计数,求指点~!

DATA SEGMENT
BUF DB 100,102 DUP('$')
DATA1 DB 0DH,0AH,'The result is:',0DH,0AH,'$'
COUNT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX;初始化

LEA DX,BUF
MOV AH,0AH
INT 21H;输入数据(0~99),每个数据空格隔开

H1: MOV AL,DI[BUF+2]
CMP AL,' '
JNZ H2
INC [COUNT]
JMP H3
H2: CMP AL,0DH
JZ H4
H3: INC DI
JMP H1
H4: INC [COUNT];判断需要比较的个数

MOV CX,0
MOV CL,BYTE PTR [COUNT];循环次数
L1: PUSH CX
MOV CL,BYTE PTR [COUNT]
MOV DI,0;取首位数据
L4: CALL COUNT1;调用判断数据位数子程序
CMP BL,DL;比较位数的大小
JA L5;前一个数比后一个数大的情况
JNE L6
CMP BL,1
JNZ L7
CALL XCH3;同为一位数的比较
JMP L5
L7: CALL XCH2;同为两位数的比较
JMP L5
L6: CALL XCH1;前一个数比后一个数位数少的情况
L5: LOOP L4
POP CX
LOOP L1

DISPLAY:LEA DX,[DATA1]
MOV AH,09H
INT 21H;显示提示信息
LEA DX,[BUF+2]
MOV AH,09H
INT 21H;显示结果
MOV AH,4CH
INT 21H;返回结束

COUNT1: MOV DX,0
MOV BX,0
J1: MOV AL,DI[BUF+2]
CMP AL,' '
JZ J2
CMP AL,0DH
JZ J3
INC BL
INC DI
JMP J1
J2: MOV AL,DI[BUF+3]
CMP AL,' '
JZ J3
CMP AL,0DH
JZ J3
INC DL
INC DI
JMP J2
J3: SUB DI,DX
INC DI
RET;判断每个数的位数

XCH1: MOV AL,DI[BUF]
MOV BX,WORD PTR DI[BUF+2]
MOV WORD PTR DI[BUF],BX
MOV BL,20H
MOV DI[BUF+2],BL
MOV DI[BUF+3],AL
INC DI
RET

XCH2: MOV BX,WORD PTR DI[BUF-1]
MOV DX,WORD PTR DI[BUF+2]
CMP BX,DX
JAE L9
MOV WORD PTR DI[BUF-1],DX
MOV WORD PTR DI[BUF+2],BX
L9: RET
XCH3: MOV DL,DI[BUF]
MOV DH,DI[BUF+2]
CMP DL,DH
JAE L10
MOV DI[BUF],DH
MOV DI[BUF+2],DL
L10: RET

CODE ENDS
END START
展开
 我来答
做而论道
高能答主

2013-12-01 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
输入的每个数据,是几位数?几进制的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式