📄 查找匹配字符串.asm
字号:
DATAS SEGMENT
;此处输入数据段代码
SHOWKEY DB 'ENTER KEYWORD:','$'
SHOWSENTENCE DB 'ENTER SENTENCE:','$'
;
;
INKEY LABEL BYTE
MAX1 DB 10
ACT1 DB ?
KEYWORD DB 10 DUP(?)
INSENTENCE LABEL BYTE
MAX2 DB 30
ACT2 DB ?
SENTENCE DB 30 DUP(?)
MESS1 DB 'NO MATCH','$'
MESS2 DB 'MATCH','$'
COUNTKEYWORD DB ?
COUNTSENTENCE DB ?
JUDGE DB 0
SHOWLOCATION DB 'LOCATION:','$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
MAIN PROC FAR
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
;此处输入代码段代码
XOR AX,AX
PUSH AX
PUSH DS
LEA DX,SHOWKEY ; PLEASE INPUT THE KEY
MOV AH,09H
INT 21H
LEA DX,INKEY ; INPUT THE KEY
MOV AH,0AH
INT 21H
mov DX,0AH ; ENTER
MOV AH,02H
INT 21H
MOV CH,0
MOV CL,ACT1 ; SET CL KEY COUNT
MOV COUNTKEYWORD,CL
LOOP1:
MOV JUDGE,0;设置标志位用来判断是否已经找到
LEA DX,SHOWSENTENCE;输入句子
MOV AH,09H
INT 21H
LEA DX,INSENTENCE;在句子缓冲区中输入句子
MOV AH,0AH
INT 21H
MOV DL,0AH;回车
MOV AH,02H
INT 21H
CMP ACT2,0;判断输入的句子是否为空,若为则退出
JZ EXIT
MOV CL,ACT2;将句子的字符个数放入countsentence 一个内存单元中
MOV COUNTSENTENCE,CL
MOV CH,0
SUB CL,COUNTKEYWORD;设置比较次数 句子长度-关键子长度+1
ADD CL,1
CMP CX,1
JB UNFIND;若次数小于1则退出
LEA SI,KEYWORD;设置串比较的初始条件
LEA DI,SENTENCE
LOOP2: PUSH CX;先保存总的比较次数
MOV CL,COUNTKEYWORD
MOV CH,0;cx也作为串比较的循环次数
;ADD CL,1; ADD 1
;经过测试不加1也对
MOV BX,DI;
CLD
REPZ CMPSB
CMP Cx,0;因为判断条件设置为CX是否为0?所以串比较次数应该多1,应该判断JZ
JNZ UNSUCCEED;若没查到就转向
JMP SUCCEED;找到转向
UNSUCCEED:
;不管找到找不到都要转向此处继续查找其他的字符
LEA SI,KEYWORD
POP CX ;将外循环比较次数取出
LOOP LOOP2;重复比较
CMP JUDGE,1;若已经找到则还将继续查找其余的匹配串
JZ LOOP1;
UNFIND: LEA DX,MESS1
MOV AH,09H
INT 21H
;;;;
MOV DL,0AH;换行
MOV AH,02H
INT 21H
;;;;;;;;;;;;
JMP LOOP1;没找到则继续要求用户输入查找的句子
SUCCEED:
LEA DX,MESS2
MOV AH,09H
INT 21H
MOV JUDGE,1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 若成功则转向16进制转换程序
MOV DL,0AH
MOV AH,02H
INT 21H
LEA DX,SHOWLOCATION
MOV AH,09H
INT 21H
SUB BX,OFFSET SENTENCE;计算字符的位置
ADD BX,1
MOV DH,BL
MOV CX,2
LOOPP: ;位置转换成16进制
ROL Dh,1
ROL DH,1
ROL DH,1
MOV BH,DH
AND BH,0FH
ADD BH,30H
CMP BH,39H
JBE LOP
ADD BH,07H
LOP:MOV DL,BH
MOV AH,02H
INT 21H
LOOP LOOPP
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JMP UNSUCCEED
EXIT: MAIN ENDP
MOV AH,4CH
INT 21H
CODES ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -