Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1408 | serge | 1 | # strncmp() Author: Kees J. Bot 1 Jan 1994 |
2 | |||
3 | # int strncmp(const char *s1, const char *s2, size_t ecx) |
||
4 | # Compare two strings. |
||
5 | # |
||
6 | |||
7 | .intel_syntax |
||
8 | |||
9 | .globl __strncmp |
||
10 | |||
11 | .text |
||
12 | .align 16 |
||
13 | __strncmp: |
||
14 | push ebp |
||
15 | mov ebp, esp |
||
16 | |||
17 | push esi |
||
18 | push edi |
||
19 | |||
20 | test ecx, ecx # Max length is zero? |
||
21 | je done |
||
22 | |||
23 | mov esi, [ebp+8] # esi = string s1 |
||
24 | mov edi, [ebp+12] # edi = string s2 |
||
25 | cld |
||
26 | compare: |
||
27 | cmpsb # Compare two bytes |
||
28 | jne done |
||
29 | |||
30 | cmpb [esi-1], 0 # End of string? |
||
31 | je done |
||
32 | |||
33 | dec ecx # Length limit reached? |
||
34 | jne compare |
||
35 | done: |
||
36 | seta al # al = (s1 > s2) |
||
37 | setb ah # ah = (s1 < s2) |
||
38 | subb al, ah |
||
39 | movsx eax, al # eax = (s1 > s2) - (s1 < s2), i.e. -1, 0, 1 |
||
40 | |||
41 | pop edi |
||
42 | pop esi |
||
43 | pop ebp |
||
44 | ret>> |