|
|
1.1 ! root 1: ////////// ! 2: / libc/string/i386/strcspn.s ! 3: / i386 C string library. ! 4: / ANSI 4.11.5.3. ! 5: ////////// ! 6: ! 7: ////////// ! 8: / size_t ! 9: / strcspn(char *String1, char *String2) ! 10: / ! 11: / Return the length of the initial segment of String1 ! 12: / which consists of characters ->not<- in String2. ! 13: ////////// ! 14: ! 15: String1 .equ 12 ! 16: String2 .equ String1+4 ! 17: ! 18: .globl strcspn ! 19: ! 20: strcspn: ! 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: incl %edi ! 31: orb %ah, %ah ! 32: jz ?done / End of String1, done ! 33: movl %esi, String2(%esp) / String2 address to ESI ! 34: ! 35: ?fetch2: ! 36: lodsb / String2 character to AL ! 37: orb %al, %al ! 38: jz ?fetch1 / Done with String2, fetch next from String1 ! 39: cmpb %ah, %al ! 40: jne ?fetch2 / Mismatched, try next in String2 ! 41: ! 42: ?done: ! 43: decl %edi / Back up to last String1 char ! 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/strcspn.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.