一个查找匹配字符串的汇编程序,总是有错误,求高手指点

DATASEGMENTSTR1DB0DH,0AH,'**Thisisfind-keywordfromasentenceprogram.**',0DH,0AH,'$'STR... DATA SEGMENT
STR1 DB 0DH,0AH,'**This is find-keyword from a sentence program.**',0DH,0AH,'$'
STR2 DB 'Enter keyword:','$'
STR3 DB 0DH,0AH,'Enter sentence:','$'
INF1 DB 0DH,0AH,'Match!',0DH,0AH,'Match at location $'
INF2 DB ' of the sentence.',0DH,0AH,'$'
ERR DB 0DH,0AH,'No match!',0DH,0AH,'$'
DAT1 DB 20H,?,20H DUP(?)
DAT2 DB 80H,?,80H DUP(?)
COUNT DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:DATA,CS:CODE
DISP MACRO DAT
LEA DX,DAT
MOV AH,9
INT 21H
ENDM
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
DISP STR1
AGAIN: DISP STR2
LEA DX,DAT1
MOV AH,0AH
INT 21H
LEA SI,DAT1
INC SI
MOV AL,0
CMP AL,[SI]
JZ DONE
MOV AL,[SI]
MOV COUNT,AL
INC SI
SENT: LEA SI,DAT1
INC SI
INC SI
DISP STR3
LEA DX,DAT2
MOV AH,0AH
INT 21H
LEA DI,DAT2
INC DI
MOV AL,0
CMP AL,[DI]
JZ DONE
MOV AL,[DI]
CMP AL,[SI-1]
JB ERRO
INC DI
MOV BX,DI
CLD
COMP: MOV CL,COUNT
COMP1: CMPSB
JNZ COMP2
DEC CL
JNZ COMP1
JMP FIND1
COMP2: INC BX
MOV DI,BX
LEA SI,DAT1
INC SI
INC SI
DEC AL
JNZ COMP
ERRO: LEA DX,ERR
MOV AH,9
INT 21H
JMP AGAIN
FIND1: CALL FIND
JMP SENT
DONE: MOV AH,4CH
INT 21H
FIND PROC
DISP INF1
MOV DX,0
LEA DX,DAT2
INC DX
INC DX
SUB BX,DX
MOV DX,BX
INC DX
PUSH DX
MOV CL,4
SHR DL,CL
CMP DL,9
JBE NEXT1
ADD DL,7
NEXT1: ADD DL,30H
MOV AH,2
INT 21H
POP DX
AND DL,0FH
CMP DL,9
JBE NEXT2
ADD DL,7
NEXT2: ADD DL,30H
MOV AH,2
INT 21H
DISP INF2
RET
CODE ENDS
END START
展开
 我来答
flycat0511
2011-06-28 · TA获得超过1402个赞
知道小有建树答主
回答量:363
采纳率:100%
帮助的人:411万
展开全部

我用Emu8086调试了一下,没有错误,可以出结果的,只不过Emu8086不认识DUP,我只好把DUP ?用相应个数的0来代替,对程序本身是没有影响的,结果见图。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式