.data
str1 db 'ABCDEFG',0
str2 db 'EFG',0
info db 'not found!',0
.data?
buffer db 100 dup(?)
.CODE
START:
str_find PROTO,
str1:PTR BYTE,
str2:PTR BYTE
main PROC;;;;;;;;;;;;;;;;;;;;;;
INVOKE str_find,ADDR str1,ADDR str2
call WaitMsg
main ENDP;;;;;;;;;;;;;;;;;;;;;;;;;;;;
str_find PROC,;;;;;;;;;;;;;;;;;;;;
str3:PTR BYTE,
str4:PTR BYTE
mov esi,str3
mov edi,str4
xor edx,edx ;edx为计数器 清零
INVOKE Str_length,str4 ;子串长度
mov ebx,eax
s:
cmp BYTE PTR [esi],0 ;字符为0
jz endstr ;字符串结尾
mov al,[esi]
cmp al,[edi];比较字符
jne nequals ;字符不匹配
inc edx ;找到一个字符 计数器+1
cmp edx,ebx
jz ok ;找到全部的字符
inc esi ;
inc edi ;指向下一字符
jmp t ;下一次循环
nequals:
XOR edx,edx ;字符不匹配,计数器清零
mov edi,str4 ;从头匹配子串
inc esi ;匹配下一个母串字符
t:
jmp s
endstr:
mov edx,offset info ;字符串结尾,没找到子串
call WriteString ;"not found!"
call Crlf
jmp return ;返回
ok:
sub esi,str3 ;esi是最后一个匹配字符的地址 减母串地址 等于在母串的索引
sub esi,ebx ;子串末字符的索引 减子子串长度
inc esi ;因为索引从0开始 所以+1 最后等于子串首字符的索引
mov eax,esi
call WriteDec
call Crlf
return:
ret
str_find ENDP;;;;;;;;;;;;;;;;;;;;;;
;暂停显示,回车键关闭
invoke StdIn,addr buffer,sizeof buffer
invoke ExitProcess,0
end START
程序的结果是 找到子串则打印子串所在的索引,没找到则打印"not found!"
但是 无论是哪个结果 在按任意键退出退出的那一瞬间又打印了一次"not found!" 为什么??
我才学32汇编一个星期 请大神们教我下啊
------解决方案--------------------------------------------------------
对!或者你要执行结束进程动作比如ExitProcess