⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qucksrch.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 ASM
字号:
;改进的快速模式匹配算法(80C52)。
S	EQU	2000H	;主串首址。
T	EQU	30H	;模式串首址。
N	DATA	38H	;主串长度存放单元。
M	DATA	39H	;模式串长度存放单元。
FIND	BIT	00H	;匹配成功标志。

	ORG	0000H
	LJMP	TEST
	
	ORG	100H
TEST:	MOV	N,#5BH	;主串长度为91个字节。
	MOV	P2,#HIGH(S)
	MOV	R0,#LOW(S)
	MOV	DPTR,#LIST
	MOV	R2,N
LOOP:	CLR	A
	MOVC	A,@A+DPTR
	MOVX	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	R2,LOOP
	MOV	M,#6		;模式串为"80C552"。
	MOV	T,#"8"
	MOV	T+1,#"0"
	MOV	T+2,#"C"
	MOV	T+3,#"5"
	MOV	T+4,#"5"
	MOV	T+5,#"2"
	LCALL	QSRCH		;匹配成功,FIND=1,DPTR=2004H。
	MOV	M,#5		;模式串为"80C51"。
	MOV	T,#"8"
	MOV	T+1,#"0"
	MOV	T+2,#"C"
	MOV	T+3,#"5"
	MOV	T+4,#"1"
	LCALL	QSRCH		;匹配失败,FIND=0。
STOP:	LJMP	STOP		;结束。

LIST:	DB	"The 80C552 has "	;主串。
	DB	"two redeced power "
	DB	"modes of operation: "
	DB	"the idle mode and the "
	DB	"power-down mode."

QSRCH:	MOV	DPTR,#S	;指向主串首址。
	MOV	R7,N	;主串全部元素均未参与比较。
QS0:	MOV	R0,#T	;指向模式串首址。
	MOV	R6,M	;准备将模式串全部元素参与比较。
	MOV	R4,DPH	;保存主串当前的匹配起始位置。
	MOV	R5,DPL
QS1:	MOVX	A,@DPTR	;读取主串的一个元素。
	XRL	A,@R0	;和模式串的一个元素进行比较。
	JNZ	QS2	;不相同,本次匹配失败。
	INC	R0	;相同,指向模式串的下一个元素。
	INC	DPTR	;指向主串的下一个元素。
	DEC	R7	;主串尚未参与比较的元素减少一个。
	DJNZ	R6,QS1	;模式串的全部元素均比较完否?
	SETB	FIND	;全部比较完毕,匹配成功。
	MOV	DPH,R4	;取本次匹配操作的主串起始位置。
	MOV	DPL,R5
	RET		;由DPTR返回匹配起始位置。
QS2:	CJNE	R0,#T,QS3;如果不是模式串的第一个元素,主串指针不变。
	INC	DPTR	;如果是模式串的第一个元素,主串指针后移。
	DEC	R7	;主串尚未参与比较的元素减少一个。
QS3:	MOV	A,R7	;取主串尚未参与比较的元素个数。
	CLR	C
	SUBB	A,M	;和模式串的长度比较。
	JNC	QS0	;不短于模式串,可以进行下一轮匹配操作。
	CLR	FIND	;比模式串还短,匹配失败。
	RET

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -