高分:提问汇编程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 17:06:05
题目:任意定义丙个字符串进行比较,相同显示“YES”,不同显示“NO”
DATA SEGMENT
BUF DB 'ABCDEF'
CUNT1 EQU $-BUF
STRING DB 'ABCDEF'
CUNT2
EQU $-STRING
DA1 DB 'YES'.'$'
DA2 DB 'NO'.'$'
DATA ENDS

STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA
ASSUME SS:STACK1,ES:DATA
COMPS:MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,OFFSET BUF
MOV DI,OFFSET STRING
MOV CX,CUNT1
MOV BX,CUNT2
CMP CX,BX
JNE END0
CLD
REPE CMPSB
JZ END1
END0:MOV DX,DA2
MOV AH,9
INT 21H
MOV AH,40H
INT 21H
END1:MOV DX,DA1
MOV AH,9
INT 21H
MOV AH,40H
INT 21H
COSEG ENDS
END COMPS
结果在字符串相同时,有时显示NO,在字符串不同时,有时也显示YES,请高手帮忙调试!

DATA SEGMENT
BUF DB 'ABCDEF'
CUNT1 EQU $-BUF
STRING DB 'ABCDEF'
CUNT2
EQU $-STRING ;错误1,CUNT2 EQU应在同一行
DA1 DB 'YES'.'$';错误2,点号应改为逗号
DA2 DB 'NO'.'$';同上
DATA ENDS

STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA
ASSUME SS:STACK1,ES:DATA
COMPS:MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,OFFSET BUF
MOV DI,OFFSET STRING
MOV CX,CUNT1
MOV BX,CUNT2
CMP CX,BX
JNE END0
CLD
REPE CMPSB
JZ END1
END0:MOV DX,DA2;错误3,把DA2偏移地址给DX应为MOV DX,OFFSET DA2
MOV AH,9
INT 21H
MOV AH,40H ;错误4,返回DOS应用MOV AH,4CH
INT 21H
END1:MOV DX,DA1;同错误3
MOV AH,9
INT 21H
MOV AH,40H ;同错误4
INT 21H
COSEG ENDS
END COMPS
---------------------------------
下面是可以通过编译的,而且正确显示结果

DATA SEGMENT
BUF DB 'ABCDEF'
CUNT1 E