哪位同学帮帮忙,我要输入两个字符串1和2,判断2是否为1的字串,是则输出YES,否则输出NO,以下是代码,但是不知道为什么总是NO,算法应该对吧,就是最简单的挨个字符匹配,不是KMP算法,哪里有错,请高人指点
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;声明:字符串匹配算法为脑残算法,不是KMP算法
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定义数据段
DSEG SEGMENT
LIST1 DB 50
DB ?
DB 50 DUP (?)
LIST2 DB 50
DB ?
DB 50 DUP (?)
MSG1 DB 'input list1:$'
MSG2 DB 'input list2:$'
NEW_LINE DB 0DH,0AH,'$'
RESULT1 DB 'YES$'
RESULT2 DB 'NO$'
DSEG ENDS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定义代码段
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;输出MSG1,并输入字符串1
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
MOV DX,OFFSET LIST1
MOV AH,0AH
INT 21H
CALL NEWLINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;输出MSG2,并输入字符串2
MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
MOV DX,OFFSET LIST2
MOV AH,0AH
INT 21H
CALL NEWLINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;获得字符串1的长度, MOV AL,LIST1+1
MOV AH,0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;否则进入循环比较区
MOV SI,OFFSET LIST1+1
NEXT1:
INC SI
MOV CL,LIST2+1
MOV CH,0
;;获得字符串1的长度,若串1的长度小于串2的长度,就直接跳到最后
CMP AL,CL
JL HAHA
DEC AL
MOV BX,SI
MOV DI,OFFSET LIST2+2
NEXT2:
MOV DX,DS:[BX]
CMP DX,DS:[DI]
JNE NEXT1
INC DI
INC BX
LOOP NEXT2
MOV DX,1
JMP LAST1
HAHA: MOV DX,0
LAST1:
CMP DX,1
JNE JIEGUO1
MOV DX,OFFSET RESULT1
MOV AH,9
INT 21H
JMP JIEGUO2
JIEGUO1:
MOV DX,OFFSET RESULT2
MOV AH,9
INT 21H
JIEGUO2:
MOV AH,4CH
INT 21H
NEWLINE PROC
LEA DX,NEW_LINE
MOV AH,9
INT 21H
RET
NEWLINE ENDP
CSEG ENDS
END START
------解决方案--------------------------------------------------------
NEXT2:
MOV DX,DS:[BX]
CMP DX,DS:[DI]
把上面的dx改成dl就好了,如下:
NEXT2:
MOV Dl,DS:[BX]
CMP Dl,DS:[DI]
因为你cl和al中保存的是字符的个数,是以BYTE为单位的,所以只有能以byte为单位做比较
上面我说错了,在int21 0ah,它返回的输入的字符个数中,是不包括回车,所以不需要减了