stdlib segment para public 'slcode' assume cs:stdlib ; ; ; strstr- Returns the position of a substring in another string. ; ; inputs: ; ; es:di- address of string to search through. ; dx:si- address of substring to search for. ; ; ; returns: ; ; cx- position of character in string (if present). ; carry=0 if character found. ; carry=1 if character is not present in string. ; public sl_strstr ; sl_strstr proc far push ds push es pushf push si push di push ax push bx push dx cld mov ax, es mov es, dx mov ds, ax xchg si, di ; mov bx, di ;Save ptr to substring. ; ; Compute the length of the substring: ; mov cx, 0ffffh mov al, 0 repne scasb neg cx dec cx dec cx mov dx, cx ;Save length of smaller string. ; mov ax, si ;Save ptr to string. StrLp: mov cx, dx repe cmpsb ;Compare the strings jz StrsAreEql ;Jump if substring exists. inc ax ;Bump pointer into string. mov si, ax ;Restore pointers. mov di, bx cmp byte ptr [si], 0 ;Done yet? jne StrLp ; ; Bad news down here, the substring isn't present in the source string. ; xor cx, cx pop dx pop bx pop ax pop di pop si popf pop es pop ds stc ret ; StrsAreEql: mov cx, ax ;Save ptr to string pop dx pop bx pop ax pop di sub cx, di ;Compute index to substring. pop si popf clc pop es pop ds ret sl_strstr endp ; ; stdlib ends end