Answer: Provided in the explanation section 
Explanation:
Str_find PROTO, pTarget:PTR BYTE, pSource:PTR BYTE
.data
target BYTE "01ABAAAAAABABCC45ABC9012",0
source BYTE "AAABA",0
str1 BYTE "Source string found at position ",0
str2 BYTE " in Target string (counting from zero).",0Ah,0Ah,0Dh,0
str3 BYTE "Unable to find Source string in Target string.",0Ah,0Ah,0Dh,0
stop DWORD ?
lenTarget DWORD ?
lenSource DWORD ?
position DWORD ?
.code
main PROC
   INVOKE Str_find,ADDR target, ADDR source
   mov position,eax
   jz wasfound           ; ZF=1 indicates string found
   mov edx,OFFSET str3   ; string not found
   call WriteString
   jmp   quit
wasfound:                   ; display message
   mov edx,OFFSET str1
   call WriteString
   mov eax,position       ; write position value
   call WriteDec
   mov edx,OFFSET str2
   call WriteString
quit:
   exit
main ENDP
;--------------------------------------------------------
Str_find PROC, pTarget:PTR BYTE, ;PTR to Target string
pSource:PTR BYTE ;PTR to Source string
;
; Searches for the first matching occurrence of a source
; string inside a target string.
; Receives: pointer to the source string and a pointer
;    to the target string.
; Returns: If a match is found, ZF=1 and EAX points to
; the offset of the match in the target string.
; IF ZF=0, no match was found.
;--------------------------------------------------------
   INVOKE Str_length,pTarget   ; get length of target
   mov lenTarget,eax
   INVOKE Str_length,pSource   ; get length of source
   mov lenSource,eax
   mov edi,OFFSET target       ; point to target
   mov esi,OFFSET source       ; point to source
; Compute place in target to stop search
   mov eax,edi    ; stop = (offset target)
   add eax,lenTarget    ; + (length of target)
   sub eax,lenSource    ; - (length of source)
   inc eax    ; + 1
   mov stop,eax           ; save the stopping position
; Compare source string to current target
   cld
   mov ecx,lenSource    ; length of source string
L1:
   pushad
   repe cmpsb           ; compare all bytes
   popad
   je found           ; if found, exit now
   inc edi               ; move to next target position
   cmp edi,stop           ; has EDI reached stop position?
   jae notfound           ; yes: exit
   jmp L1               ; not: continue loop
notfound:                   ; string not found
   or eax,1           ; ZF=0 indicates failure
   jmp done
found:                   ; string found
   mov eax,edi           ; compute position in target of find
   sub eax,pTarget
   cmp eax,eax    ; ZF=1 indicates success
done:
   ret
Str_find ENDP
END main
cheers i hoped this helped !!