框图:
开始 初始化BUF1内存单元 装载ES段,设置DI 循环次数CX设为字符串长度 比较ES:DI中字符和'#'
Y AL=1 ZF=1? N N 不同且CX不为0? Y DI加一,CX减一 AL=0
结束
(5)
DATAS SEGMENT
BUF1 DB '&YYYSS22323&&&&&&&g&&' COUNT EQU $-BUF1 DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS START:
MOV AX,DATAS MOV DS,AX MOV ES,AX MOV BX,0 LEA DI,BUF1 MOV CX,COUNT MOV AL,'&' CLD
L: ;统计‘&’个数 REPNZ SCASB JZ FOUND JMP EXID
FOUND: ;发现一个‘&’ INC CX
INC BX LOOP L EXID: MOV AH,4CH INT 21H CODES ENDS END START
程序分析:本程序的目的是统计字符串中'&'的个数。使用的串操作指令为SCASB,其功能是把AL中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI。本程序要实现的功能是查找字符'&',所以可将AL中的数据设置为'&'。在循环中,若ZF=1,计数器BX便自增一,这样便实现了统计'&'个数的目的。
初始化BUF1内存单元 开始
装载ES段,设置DI,BX清0 ZF=1? N N 不同且CX不为0? Y DI加一,CX减一 比较ES:DI中字符和'&' 循环次数CX设为字符串长度
相关推荐: