|
|
1.1 root 1: //////////
2: / libc/string/i386/memcmp.s
3: / i386 C string library.
4: / ANSI 4.11.4.1.
5: //////////
6:
7: //////////
8: / int
9: / memcmp(void *String1, void *String2, size_t Count)
10: /
11: / Compare Count bytes of String2 and String1.
12: / Return -1 for <, 0 for ==, 1 for >.
13: //////////
14:
15: String1 .equ 12
16: String2 .equ String1+4
17: Count .equ String2+4
18:
19: .globl memcmp
20:
21: memcmp:
22: push %esi
23: push %edi
24:
25: subl %eax, %eax / Result 0 to EAX, set ZF in case ECX==0
26: movl %ecx, Count(%esp) / Count to ECX
27: movl %esi, String2(%esp) / String2 address to ESI
28: movl %edi, String1(%esp) / String1 address to EDI
29: cld
30: repe
31: cmpsb
32: jz ?done / String1 == String2, return 0
33: ja ?less
34: incl %eax / String1 > String2, return 1
35: jmp ?done
36:
37: ?less:
38: decl %eax / String1 < String2, return -1
39:
40: ?done:
41: pop %edi
42: pop %esi
43: ret
44:
45: / end of libc/string/i386/memcmp.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.