汇编语言输入字符串比较,显示不对

DATASEGMENTBUF1DB20,?,20DUP(?)BUF2DB20,?,20DUP(?)MESS1DB'MATCH$'MESS2DB'NOMATCH$'DATA... DATA SEGMENT
BUF1 DB 20,?,20 DUP(?)
BUF2 DB 20,?,20 DUP(?)
MESS1 DB 'MATCH $'
MESS2 DB 'NO MATCH $'
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE
AA: MOV AX,DATA
MOV DS,AX

MOV DX,OFFSET BUF1
MOV AH,0AH
INT 21H

MOV DL,0AH
MOV AH,06
INT 21H

MOV DX,OFFSET BUF2
MOV AH,0AH
INT 21H

LEA SI,BUF1

MOV SP,[SI+1]
MOV BP,[SI+23]
CMP SP,BP
JNE CC
MOV CX,BP
BB: MOV BH,[SI+2]
MOV BL,[SI+24]
CMP BH,BL
JNE CC
INC SI
LOOP BB
MOV DX,OFFSET MESS1
MOV AH,9
INT 21H
JMP DD

CC: MOV DX,OFFSET MESS2
MOV AH,9
INT 21H
DD: MOV AH,4CH
INT 21H
CODE ENDS
END AA

这是我的程序,输入进去dds:0里都是对的,但显示都是no match,求大神指教!
展开
 我来答
做而论道
高能答主

2014-12-07 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
SP,可不要轻易动用啊。
更多追问追答
追问
貌似和寄存器没关系,我改了用DX和DI表示,还是不管输入什么,输出都是no match,求大神帮看一下程序,我和同学讨论过,都觉得没问题,功力尚浅,还望大神指教!大概思路是前面是输入,先输入了一个字符串,然后输入的回车,然后输入第二个字符串。然后就找SI的地址,比两个字符串的位数一不一样,不一样直接CC输出,一样就开始循环比较每位是否一样,希望有帮助!
追答
……
MOV DX, OFFSET BUF2
MOV AH, 0AH
INT 21H

LEA SI, BUF1
LEA DI, BUF2
MOV CL, [SI + 1] ;实际输入字符数
CMP CL, [DI + 1] ;比较
JNE CC ;不等长转移
MOV CH, 0

BB:
MOV BH, [SI + 2]
CMP BH, [DI + 2]
JNE CC
INC SI
INC DI
LOOP BB
……

实验过了,好用了。
------------
你的程序:
MOV SP,[SI+1]--实际输入字符数,仅仅是一个字节
MOV BP,[SI+23]--而你这两条,都是取出两个字节
CMP SP,BP
JNE CC
MOV CX,BP----循环次数
BB: MOV BH,[SI+2]
MOV BL,[SI+24]
CMP BH,BL
JNE CC
INC SI
LOOP BB---循环次数,远远超过实际字符数

比较的范围,太大了,超出了输入的字符,所以才...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2014-12-07 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:796万
展开全部
MOV CX,BP这里的问题,把ch清零。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式