AH=’\’
AH=AL
AH+20H=A
L
AH-
20H=AL
SIDX ;恢复主串下标
INC SI ① 查找③替换(相同长度)
[MOVSB] ② 删除③替换(不同长度)
AH[BX]
INC BX
INC COUNT
AH=1A
H
AL=1A
H
AH=’?’
AH=’*’
结束 /④ 插入 [STOSB]
② 删除③替换 ( 不同长
度 )
DSDATA
[ESDATA]
CLD
LEA SI,TEXT
[DISI ②③]
DXSI
LEA BX,STR
LODSB
AH[BX]
INC BX
PUSH SI
LEA SI,PEPL
MOVSB
YES 部分通配符
YES 直接匹配
YES 大写匹配
YES 全通配符 匹配成功
NO 匹配失败
功能说明:
①:查找 ②:删除
③:替换 ④:插入
寄存器说明:
SI:①:主串下标
②:替换串下标
DX:保存主串下标 SI
AL:保存主串字符
BX:子串下标
AH:保存子串字符
DI:存储下标
标记说明:
TEXT:主串
STR:子串
PEPL:替换串
COUNT:计数单元
BUFFER:缓冲区
1AH:结束标记
[…]:表示可选项
初始化数据段 ,
扩展段 , 置递增
标志
初始化主串下标
,存储下标
保 存 主 串 下 标
SIDX
初初初初初初初
读取主串字符 AL
初初初初初初 AH
计数
功能祥解:
①:查找
通配符:‘?’ 通配一个字符
‘* ’ 通配所有字符
忽略大小写:
精确匹配:通过转义字符‘\ ’,如查找“a?c*”,可写为“a\b\?c\*”
注:如只要查找功能,则无须初始化存储下标 DI。
②:删除
采用双下标:SI—扫描下标 DI—存储下标
如匹配成功则不拷贝串,否则只拷贝当前字符。
注:退出循环后应执行“STOSB”,以将 AL 中的结束标记拷贝至新位置。
③:替换
相同长度:
如匹配成功则继续匹配下一字符,否则进行替换。
注:无须初始化存储下标 DI。
不同长度:
先将主串传送至 BUFFER 区,SIBUFFER,DITEXT,
如匹配成功则拷贝当前字符,否则进行替换或进行插入(今年考研最后一题就属此类)。
注:退出循环后应执行“STOSB”,以将 AL 中的结束标记拷贝至新位置。
④:插入
③ 替 换
( 相 同 长
度 )
要 加 入
DISI
字符串处理通用程序 王俊川
主程序流程图: 制于 4.14
评论1