汇编实验二查找匹配字符串
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三查找匹配字符串
1.实验目的:
查找匹配字符串SEARCH。
2. 实验要求:
程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示“No match!”;如果句子中包含关键字则显示“Match!”,且把该句子中的位置用十六进制数显示出来。
实验结果:
要求程序的执行过程如下:
Enter keyword:abc
Enter Sentence: We are studying abc.
Match at location:11H of the sentence.
Enter Sentence: xyz, Ok?
No match.
Enter Sentence: ^C
3. 实验报告要求:
(1)分析要点及调试后的正确程序。
(2) 实验体会。
源代码:
DATAREA SEGMENT
STRING1 DB "Enter keyword:$"
STRING2 DB "Enter sentence:$"
STRING3 DB "Match at location:$"
STRING4 DB "No match!",13,10,"$"
STRING5 DB "H of the sentence.$"
keyword DB 50D,?,51D DUP(?)
sentence DB 50D,?,51D DUP(?)
DATAREA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATAREA,ES:DATAREA START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAREA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1
MOV AH,09H
INT 21H
LEA DX,keyword
MOV AH,0AH
INT 21H
MOV AH ,02H
MOV DL,0AH
INT 21H
LEA DX,STRING2
MOV AH,09H
INT 21H
LEA DX,sentence
MOV AH,0AH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
LEA SI,keyword+2 ;关键词
LEA DI,sentence+2
MOV AX,0
MOV AL,[sentence+1] ;句子字符个数MOV AH,[keyword+1] ;关键词字符个数CMP AL,AH
JL NO
SUB AL,AH
MOV AH,0
MOV CX,AX
INC CX
COMPARE:
PUSH CX
MOV CX,3 ;建议采用mov ax,字符个数,使字符的个数不固定CLD
REPZ CMPSB
JZ MATCH
MOV AX,3 ;建议采用mov ax,字符个数
SUB AX,CX
SUB SI,AX ;关键词回到词首
MOV AX,2 ;建议采用mov ax,字符个数-1
SUB AX,CX
SUB DI,AX
POP CX
LOOP COMPARE
NO: LEA DX,STRING4
MOV AH,09H
INT 21H
JMP EXIT
MATCH: POP CX
MOV BX,DI
LEA DX,STRING3
MOV AH,09H
INT 21H
SUB BX,OFFSET sentence+2
SUB BX,2 ;首地址所在字符串中的地址
CALL CHANGE
LEA DX,STRING5
MOV AH,09H
INT 21H
EXIT:
RET
MAIN ENDP
CHANGE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CH,4
MOV CL,4
ROTATE: ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H CMP AL,3AH JL PRINTIT ADD AL,7H PRINTIT: MOV DL,AL MOV AH,2 INT 21H DEC CH
JNZ ROTATE POP DX
POP CX
POP BX
POP AX
RET CHANGE ENDP CODE ENDS END START