home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
crt
/
src
/
platform
/
strrchr.asm
< prev
next >
Wrap
Assembly Source File
|
1998-06-17
|
3KB
|
93 lines
page ,132
title strrchr - find last occurence of character in string
;***
;strrchr.asm - find last occurrence of character in string
;
; Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
;
;Purpose:
; defines strrchr() - find the last occurrence of a given character
; in a string.
;
;*******************************************************************************
.xlist
include cruntime.inc
.list
page
;***
;char *strrchr(string, ch) - find last occurrence of ch in string
;
;Purpose:
; Finds the last occurrence of ch in string. The terminating
; null character is used as part of the search.
;
; Algorithm:
; char *
; strrchr (string, ch)
; char *string, ch;
; {
; char *start = string;
;
; while (*string++)
; ;
; while (--string != start && *string != ch)
; ;
; if (*string == ch)
; return(string);
; return(NULL);
; }
;
;Entry:
; char *string - string to search in
; char ch - character to search for
;
;Exit:
; returns a pointer to the last occurrence of ch in the given
; string
; returns NULL if ch does not occurr in the string
;
;Uses:
;
;Exceptions:
;
;*******************************************************************************
CODESEG
public strrchr
strrchr proc \
uses edi, \
string:ptr byte, \
chr:byte
mov edi,[string] ; di = string
xor eax,eax ; al=null byte
or ecx,-1 ; cx = -1
repne scasb ; find the null & count bytes
inc ecx ; cx=-byte count (with null)
neg ecx ; cx=+byte count (with null)
dec edi ; di points to terminal null
mov al,chr ; al=search byte
std ; count 'down' on string this time
repne scasb ; find that byte
inc edi ; di points to byte which stopped scan
cmp [edi],al ; see if we have a hit
je short returndi ; yes, point to byte
xor eax,eax ; no, return NULL
jmp short toend ; do return sequence
returndi:
mov eax,edi ; ax=pointer to byte
toend:
cld
ret ; _cdecl return
strrchr endp
end