汇编语言:两个字符串是否相等的比较。由用户输入两个字符串并判断他们是否相等,两个相等则输出Y,否则输N

DATASSEGMENTBUFDB10H,?,10DUP(?)BUF1DB10H,?,10DUP(?)DATASENDSCODESSEGMENTASSUMEES:DATA... DATAS SEGMENT
BUF DB 10H,?,10 DUP(?)
BUF1 DB 10H,?,10 DUP(?)
DATAS ENDS
CODES SEGMENT
ASSUME ES:DATAS,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF1
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV ES,AX
LEA SI,BUF
LEA DI,BUF1
;比较字符串长度是否相等
MOV AL,ES:[SI+1]
MOV BL,DS:[DI+1]
CMP AL,BL
JNZ NO
;比较字符串的内容是否相等
CM:
INC SI
INC DI
MOV AL,ES:[SI]
MOV BL,DS:[DI]
CMP AL,BL
JNZ NO
LOOP CM
NO:
MOV DL,'N'
MOV AH,02H
INT 21H
MOV SI,AX
MOV AH,4CH
INT 21H
CODES ENDS
END START
为什么无论输入的字符串是否相同,输出的结果都是N?求解释,并帮忙改正一下上面的代码。
展开
 我来答
百度网友dd2a4ae
推荐于2017-11-25 · TA获得超过1.6万个赞
知道大有可为答主
回答量:2628
采纳率:11%
帮助的人:1640万
展开全部
你的程序中有几处错误:
1. ASSUME伪操作中,漏掉了CS,导致汇编时对转移指令报错。
2. 没有显示Y的指令,所以只显示N。
3. 比较字串内容时没有对计数器进行设置。
4. 比较字串时,起点向前错位了一个字节。
5. 一些其它小的缺陷,比如对段寄存器的赋值应当放在代码前面部分,有一些重复代码和无用代码等。这些不影响本程序的运行结果,所以我未作处理。

修改后的代码如下(修改过的或增加的指令,我在行末加 ;************ 注明):

DATAS SEGMENT
BUF DB 10H,?,10 DUP(?)
BUF1 DB 10H,?,10 DUP(?)
DATAS ENDS
CODES SEGMENT
ASSUME cs:codes, ES:DATAS,DS:DATAS ;************原程序漏掉了CS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF1
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV ES,AX
LEA SI,BUF
LEA DI,BUF1
;比较字符串长度是否相等
MOV AL,ES:[SI+1]
MOV BL,DS:[DI+1]
CMP AL,BL
JNZ NO
;比较字符串的内容是否相等
mov cl, [si+1] ;************设置CX计数
mov ch,0 ;************
inc si ;************调指针指向后面实际输入的字符
inc di ;************

CM:
INC SI
INC DI
MOV AL,ES:[SI]
MOV BL,DS:[DI]
CMP AL,BL
JNZ NO
LOOP CM

mov dl, 'Y' ;************显示‘Y’
mov ah, 2 ;************
int 21h ;************
jmp exit ;************跳过显示‘N’的代码

NO:
MOV DL,'N'
MOV AH,02H
INT 21H

MOV SI,AX ;************这一条指令多余,可删除
exit: ;************
MOV AH,4CH
INT 21H
CODES ENDS
END START
做而论道
高能答主

2012-11-30 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
;MIMA
;==================================
DATA SEGMENT
BUF1 DB 'HAPPY!'
BUF3 DB 10, 13, 'PLEASE INPUT PASSWORD : $'
BUF4 DB 10, 13, 'ERROR ! $'
BUF5 DB 6 DUP(?)
BUF6 DB 10, 13, 'WELLCOM ! $'
COUNT DB 3
DATA ENDS
;----------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
BEG:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
IIII:
MOV AH, 09H
MOV DX, OFFSET BUF3
INT 21H
MOV BX, OFFSET BUF5
MOV CX, 06H
LAST:
MOV AH, 07H
INT 21H
MOV [BX], AL
MOV AH, 02H
MOV DL, '*'
INT 21H
INC BX
LOOP LAST
;--------------------------
MOV DI, OFFSET BUF5
MOV SI, OFFSET BUF1
CLD
MOV CX, 6
REPE CMPSB
JZ GOOD
MOV AH, 09H
MOV DX, OFFSET BUF4
INT 21H
DEC COUNT
JZ EXIT
JMP IIII
GOOD:
MOV AH, 09H
MOV DX, OFFSET BUF6
INT 21H
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
END BEG
;==================================

参考一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式