汇编语言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 展开
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 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询