当前位置:文档之家› 例 10-6 CMPS应用实例

例 10-6 CMPS应用实例

例10-6 CMPS应用实例
源程序EX10-6.asm如下:
DATA SEGMENT
SOURCE DB 'I REALLY LOVE NANKAI!' ;源串
COUNT_SOURCE EQU $-SOURCE
KEY DB 'LOVE NANKAI' ;要找的短语
COUNT_KEY EQU $-KEY
STR_FOUND DB 'FOUND',13,10,'$' ;找到提示信息
STR_NOTFOUND DB 'NOT FOUND',13,10,'$' ;未找到提示信息
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,SOURCE ;DS:SI指向源串
PUSH SI ;保护SI指向源串头
NEXT:
LEA DI,KEY ;ES:DI指向要找的目标
MOV CX,COUNT_KEY ;目标短语长度
CLD ;置DF=0,正向比较
REPE CMPSB ;目标串与源串逐个比较搜索
JZ FOUND ;发现含目标串转移到FOUND
MOV BL,'!' ;没发现,查看是否到末尾
CMP BL,[SI]
JZ NO ;已经到尾标志‘!’转未发现处理
POP SI ;当前位置未发现但没有到尾,将源串指针弹出INC SI ;修改指针,指向源串下一字符位置
PUSH SI ;保护当前位置
JMP NEXT ;转NEXT继续从当前位置搜索
NO: LEA DX,STR_NOTFOUND
MOV AH,9
INT 21H
JMP EXIT
FOUND: LEA DX,STR_FOUND
MOV AH,9
INT 21H ;输出发现提示
POP SI
MOV DX,SI ;以下以十六进制输出搜索串在源串的起始位置 MOV BL,DL
SHR DL,1
SHR DL,1
SHR DL,1
SHR DL,1
CMP DL,0AH
JB SMALL1
ADD DL,7
SMALL1:
ADD DL,30H
MOV AH,02H
INT 21H ;显示高4位 MOV DL,BL
AND DL,0FH
CMP DL,0AH
JB SMALL2
ADD DL,7
SMALL2:
ADD DL,30H
MOV AH,02H
INT 21H ;显示低4位
MOV DL,'H'
INT 21H
MOV DL,0DH
INT 21H ;“回车”
MOV DL,0AH
INT 21H ;“换行”
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START。

相关主题