xref: /reactos/sdk/lib/ucrt/string/i386/strset.s (revision 94eb4751)
1*94eb4751STimo Kreuzer#include <asm.inc>
2*94eb4751STimo Kreuzer#if 0
34fec953eSTimo Kreuzer        page    ,132
44fec953eSTimo Kreuzer        title   strset - set all characters of string to character
54fec953eSTimo Kreuzer;***
64fec953eSTimo Kreuzer;strset.asm - sets all charcaters of string to given character
74fec953eSTimo Kreuzer;
84fec953eSTimo Kreuzer;       Copyright (c) Microsoft Corporation. All rights reserved.
94fec953eSTimo Kreuzer;
104fec953eSTimo Kreuzer;Purpose:
114fec953eSTimo Kreuzer;       defines _strset() - sets all of the characters in a string (except
124fec953eSTimo Kreuzer;       the '\0') equal to a given character.
134fec953eSTimo Kreuzer;
144fec953eSTimo Kreuzer;*******************************************************************************
154fec953eSTimo Kreuzer
164fec953eSTimo Kreuzer        .xlist
174fec953eSTimo Kreuzer        include cruntime.inc
184fec953eSTimo Kreuzer        .list
194fec953eSTimo Kreuzer
204fec953eSTimo Kreuzerpage
214fec953eSTimo Kreuzer;***
224fec953eSTimo Kreuzer;char *_strset(string, val) - sets all of string to val
234fec953eSTimo Kreuzer;
244fec953eSTimo Kreuzer;Purpose:
254fec953eSTimo Kreuzer;       Sets all of characters in string (except the terminating '/0'
264fec953eSTimo Kreuzer;       character) equal to val.
274fec953eSTimo Kreuzer;
284fec953eSTimo Kreuzer;       Algorithm:
294fec953eSTimo Kreuzer;       char *
304fec953eSTimo Kreuzer;       _strset (string, val)
314fec953eSTimo Kreuzer;             char *string;
324fec953eSTimo Kreuzer;             char val;
334fec953eSTimo Kreuzer;             {
344fec953eSTimo Kreuzer;             char *start = string;
354fec953eSTimo Kreuzer;
364fec953eSTimo Kreuzer;             while (*string)
374fec953eSTimo Kreuzer;                     *string++ = val;
384fec953eSTimo Kreuzer;             return(start);
394fec953eSTimo Kreuzer;             }
404fec953eSTimo Kreuzer;
414fec953eSTimo Kreuzer;Entry:
424fec953eSTimo Kreuzer;       char *string - string to modify
434fec953eSTimo Kreuzer;       char val - value to fill string with
444fec953eSTimo Kreuzer;
454fec953eSTimo Kreuzer;Exit:
464fec953eSTimo Kreuzer;       returns string -- now filled with val's
474fec953eSTimo Kreuzer;
484fec953eSTimo Kreuzer;Uses:
494fec953eSTimo Kreuzer;
504fec953eSTimo Kreuzer;Exceptions:
514fec953eSTimo Kreuzer;
524fec953eSTimo Kreuzer;*******************************************************************************
53*94eb4751STimo Kreuzer#endif
544fec953eSTimo Kreuzer
55*94eb4751STimo Kreuzer        .code
564fec953eSTimo Kreuzer
57*94eb4751STimo Kreuzer        public  __strset
58*94eb4751STimo Kreuzer.PROC __strset
59*94eb4751STimo Kreuzer// Prolog. Original sources used ML's extended PROC feature to autogenerate this.
60*94eb4751STimo Kreuzer        push ebp
61*94eb4751STimo Kreuzer        mov ebp, esp
62*94eb4751STimo Kreuzer        push edi // uses edi
63*94eb4751STimo Kreuzer#define string ebp + 8 // string:ptr byte
64*94eb4751STimo Kreuzer#define val ebp + 12 // val:byte
654fec953eSTimo Kreuzer
664fec953eSTimo Kreuzer
67*94eb4751STimo Kreuzer        mov     edi,[string]    // di = string
68*94eb4751STimo Kreuzer        mov     edx,edi         // dx=string addr; save return value
694fec953eSTimo Kreuzer
70*94eb4751STimo Kreuzer        xor     eax,eax         // ax = 0
71*94eb4751STimo Kreuzer        or      ecx,-1          // cx = -1
72*94eb4751STimo Kreuzerrepne   scasb                   // scan string & count bytes
73*94eb4751STimo Kreuzer        add     ecx,2           // cx=-strlen
74*94eb4751STimo Kreuzer        neg     ecx             // cx=strlen
75*94eb4751STimo Kreuzer        mov     al,[val]        // al = byte value to store
76*94eb4751STimo Kreuzer        mov     edi,edx         // di=string addr
774fec953eSTimo Kreuzerrep     stosb
784fec953eSTimo Kreuzer
79*94eb4751STimo Kreuzer        mov     eax,edx         // return value: string addr
804fec953eSTimo Kreuzer
81*94eb4751STimo Kreuzer// Epilog. Original sources used ML's extended PROC feature to autogenerate this.
82*94eb4751STimo Kreuzer        pop     edi
83*94eb4751STimo Kreuzer        pop     ebp
844fec953eSTimo Kreuzer
85*94eb4751STimo Kreuzer        ret                     // _cdecl return
86*94eb4751STimo Kreuzer
87*94eb4751STimo Kreuzer.ENDP // __strset
884fec953eSTimo Kreuzer        end
89