add termios.h
[neatlibc.git] / string.s
blobcc9be13d82b05ed16bcdf581f12b1a1c4e32404d
1 format ELF
3 public memcpy
4 public memmove
5 memcpy:
6 memmove:
7 push esi
8 push edi
9 mov edi, [esp+12]
10 mov esi, [esp+16]
11 mov ecx, [esp+20]
12 mov eax, edi
13 cld
14 rep movsb
15 pop edi
16 pop esi
17 ret
19 public memset
20 memset:
21 push edi
22 mov edi, [esp+8]
23 mov eax, [esp+12]
24 mov ecx, [esp+16]
25 mov edx, edi
26 cld
27 rep stosb
28 pop edi
29 mov eax, edx
30 ret
32 public memchr
33 memchr:
34 mov eax, [esp+8]
35 mov ecx, [esp+12]
36 push edi
37 mov edi, [esp+8]
38 cld
39 repnz scasb
40 jne .failed
41 mov eax, edi
42 dec eax
43 jmp .ret
44 .failed:
45 xor eax, eax
46 .ret:
47 pop edi
48 ret
50 public strlen
51 strlen:
52 push edi
53 mov edi, [esp+8]
54 xor eax, eax
55 mov ecx, -1
56 cld
57 repnz scasb
58 mov eax, ecx
59 not eax
60 dec eax
61 pop edi
62 ret
64 public strchr
65 strchr:
66 mov ecx, [esp+4]
67 mov edx, [esp+8]
68 .loop:
69 mov al, [ecx]
70 cmp al, dl
71 jz .done
72 inc ecx
73 test al, al
74 jnz .loop
75 xor ecx, ecx
76 .done:
77 mov eax, ecx
78 ret
80 public strcmp
81 strcmp:
82 mov ecx, [esp+4]
83 mov edx, [esp+8]
84 xor eax, eax
85 .loop:
86 mov al, [ecx]
87 cmp al, [edx]
88 jnz .ret
89 inc edx
90 inc ecx
91 test al, al
92 jnz .loop
93 ret
94 .ret:
95 movzx ecx, byte [edx]
96 sub eax, ecx
97 ret
99 public strcpy
100 strcpy:
101 push edi
102 push esi
103 mov edx, [esp+12]
104 mov esi, [esp+16]
105 mov edi, edx
107 .loop:
108 lodsb
109 stosb
110 or al, al
111 jnz .loop
112 pop edi
113 pop esi
114 mov eax, edx