汇编语言输入字符串比较,显示不对
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,求大神指教! 展开
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,求大神指教! 展开
2个回答
展开全部
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---循环次数,远远超过实际字符数
比较的范围,太大了,超出了输入的字符,所以才...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询