Respuesta :
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 !!