
一个查找匹配字符串的汇编程序,总是有错误,求高手指点
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 展开
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 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询