|
|
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.