编写查找子字符串程序时出了问题
我的程序如下,麻烦大家帮我看看哪里出错了,如果有更好的方法麻烦给我发一份446794753@程序代码:
TITLE str_find.asm ;程序描述:查找子字符串 ;创建日期:2008\8\25 INCLUDE Irvine32.inc ;这是我看的书的作者的头文件,用到了他的一个函数:writedec,其要显示的数保存在EAX在中 str_find proto, ; source:ptr byte, ;the begining position to remove ; target:ptr byte ;the number to remove .data t byte "123ABC342432",0 s byte "ABC",0 .code main proc invoke str_find,addr s,addr t call writedec ;显示保存在EAX中的位置 call crlf ret main endp str_find proc , source:ptr byte, target:ptr byte ;查找源字符串是否在目标字符串中 ;结果:若存在则设置零标志,eax返回源字符串中第一个字符在目标字符串中的位置 ;否则清除零标志 mov edi,target mov edx,[edi] ;判断target是否为空 cmp edx,0 jz failed ;若为空则跳转 mov eax,0 ;保存位置位eax begin: mov esi,source mov edx,[esi] cmp edx,[edi] ;比较[esi]与[edi] jnz L1 ;不相等,则跳转到L1 L2: ;否则比较它们的下一个字符 inc edi mov edx,[edi] cmp edx,0 ;判断目标字符串是否移到了末尾 jz failed inc eax ;每一次edi递增时,eax也递增 inc esi mov edx,[esi] cmp edx,0 ;若源字符串移到了末尾,标志着已找到了 jz successful;成功退出即可 cmp [edi],edx je L2 L1: inc edi ;转入比较目标字符串的下一个字符 mov edx,[edi] cmp edx,0 jz failed inc eax jmp begin failed: mov dx,1 or dx,1 ;这是为了清楚零标志 successful: ret str_find endp end main