|
|
1.1 ! root 1: ////////// ! 2: / libc/string/i386/strpbrk.s ! 3: / i386 C string library. ! 4: / ANSI 4.11.5.4. ! 5: ////////// ! 6: ! 7: ////////// ! 8: / char * ! 9: / strpbrk(char *String1, char *String2) ! 10: / ! 11: / Return a pointer to the first char in String1 ! 12: / which matches any character in String2. ! 13: ////////// ! 14: ! 15: String1 .equ 12 ! 16: String2 .equ String1+4 ! 17: ! 18: .globl strpbrk ! 19: ! 20: strpbrk: ! 21: push %esi ! 22: push %edi ! 23: ! 24: movl %edi, String1(%esp) / String1 to EDI ! 25: subl %eax, %eax / Clear EAX for NULL return value ! 26: cld ! 27: ! 28: / AL and the high word of EAX are always 0 here. ! 29: ?fetch1: ! 30: movb %ah, (%edi) / Fetch String1 char to AH ! 31: incl %edi / and point to next ! 32: orb %ah, %ah ! 33: jz ?done / No match found, return NULL ! 34: movl %esi, String2(%esp) / String2 to ESI ! 35: ! 36: ?fetch2: ! 37: lodsb / Fetch String2 char to AL ! 38: orb %al, %al ! 39: jz ?fetch1 / No match in String2, try next String1 char ! 40: cmpb %ah, %al ! 41: jnz ?fetch2 / Mismatch, try next String2 char ! 42: decl %edi / Back up to match ! 43: movl %eax, %edi / Return pointer in EAX ! 44: ! 45: ?done: ! 46: pop %edi ! 47: pop %esi ! 48: ret ! 49: ! 50: / end of libc/string/i386/strpbrk.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.