|
|
1.1 ! root 1: ////////// ! 2: / libc/string/i386/strspn.s ! 3: / i386 C string library. ! 4: / ANSI 4.11.5.6. ! 5: ////////// ! 6: ! 7: ////////// ! 8: / size_t ! 9: / strspn(char *String1, char *String2) ! 10: / ! 11: / Return the length of the initial segment of String1 ! 12: / which consists of characters in String2. ! 13: ////////// ! 14: ! 15: String1 .equ 12 ! 16: String2 .equ String1+4 ! 17: ! 18: .globl strspn ! 19: ! 20: strspn: ! 21: push %esi ! 22: push %edi ! 23: ! 24: movl %edi, String1(%esp) / String1 address to EDI ! 25: movl %edx, %edi / and save for length calculation ! 26: cld ! 27: ! 28: ?fetch1: ! 29: movb %ah, (%edi) / String1 character to AH ! 30: orb %ah, %ah ! 31: jz ?done / End of String1, done ! 32: movl %esi, String2(%esp) / String2 address to ESI ! 33: ! 34: ?fetch2: ! 35: lodsb / String2 character to AL ! 36: orb %al, %al / If at end of String2, then ! 37: jz ?done / String1 char is not in String2, done ! 38: cmpb %ah, %al ! 39: jnz ?fetch2 / No match, try next char in String2 ! 40: incl %edi / Match, try next char in String1 ! 41: jmp ?fetch1 ! 42: ! 43: ?done: ! 44: movl %eax, %edi ! 45: subl %eax, %edx / Return &last - &String1 ! 46: ! 47: pop %edi ! 48: pop %esi ! 49: ret ! 50: ! 51: / end of libc/string/i386/strspn.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.