Commit 2ffbaef Lucien Le Roux
committed
1 parent 8547a33 commit 2ffbaef Copy full SHA for 2ffbaef
File tree 9 files changed +46
-40
lines changed
9 files changed +46
-40
lines changed Original file line number Diff line number Diff line change @@ -22,9 +22,9 @@ _forward:
22
22
call memcpy wrt ..plt ; memcpy(rdi, rsi, rdx);
23
23
jmp _return
24
24
_backward:
25
- mov r8, rdi ; r8 = dest
26
- mov r9, rsi ; r9 = src
27
- mov r10, rdx ; r10 = n
25
+ lea r8, [ rdi] ; r8 = dest
26
+ lea r9, [ rsi] ; r9 = src
27
+ lea r10, [ rdx] ; r10 = n
28
28
_while: ; do {
29
29
dec r10 ; r10--
30
30
mov al, BYTE [r9+r10]
Original file line number Diff line number Diff line change @@ -17,7 +17,7 @@ strcasecmp:
17
17
_cwhile: ; do {
18
18
movzx rdi, byte [rsi+rcx]
19
19
call tolower wrt ..plt
20
- mov rbx, rax ; rbx = tolower(*(s2 + rcx))
20
+ lea rdx, [ rax] ; rdx = tolower(*(s2 + rcx))
21
21
22
22
movzx rdi, byte [r8+rcx]
23
23
call tolower wrt ..plt ; rax = tolower(*(s1 + rcx))
@@ -26,12 +26,12 @@ _cwhile: ; do {
26
26
_while: ; } while (
27
27
cmp al, 0x0 ; al != 0
28
28
je _done ; &&
29
- cmp bl , 0x0 ; bl != 0
29
+ cmp dl , 0x0 ; dl != 0
30
30
je _done ; &&
31
- cmp al, bl ; al == bl )
31
+ cmp al, dl ; al == dl )
32
32
je _cwhile
33
33
_done:
34
- sub rax, rbx
34
+ sub rax, rdx
35
35
return:
36
36
leave
37
37
ret ; return rax
Original file line number Diff line number Diff line change @@ -9,17 +9,23 @@ strchr:
9
9
mov rbp, rsp
10
10
11
11
push rdi
12
+ xor rax, rax ; rax = 0
12
13
while: ; while (
13
- cmp byte [rdi], sil ; *rdi != c
14
+ cmp byte [rdi + rax ], sil ; *rdi != c
14
15
je done ; )
15
16
cwhile: ; {
16
- cmp byte [rdi], 0 ; if (*s == 0 )
17
+ cmp byte [rdi + rax ], 0 ; if (*(s + rax) == 0 )
17
18
je done ; return 0
18
- inc rdi ; rax++
19
+ inc rax ; rax++
19
20
jmp while ; }
20
21
done:
22
+ lea rax, [rdi + rax] ; rax = rdi + rax;
21
23
pop rdi
22
24
25
+ cmp byte [rax], 0 ; if (rax == \0 )
26
+ jne return
27
+ xor rax, rax ; rax = NULL
28
+
23
29
return:
24
30
leave
25
31
ret ; return rax
Original file line number Diff line number Diff line change @@ -12,17 +12,17 @@ strcmp:
12
12
mov rcx, 0 ; rcx = 0
13
13
cwhile: ; do {
14
14
movzx rax, byte [rdi+rcx] ; rax = *(s1 + rcx)
15
- movzx rbx , byte [rsi+rcx] ; rbx = *(s2 + rcx)
15
+ movzx rdx , byte [rsi+rcx] ; rdx = *(s2 + rcx)
16
16
inc rcx ; rcx++
17
17
while: ; } while (
18
18
cmp al, 0 ; al != 0
19
19
je done ; &&
20
- cmp bl , 0 ; bl != 0
20
+ cmp dl , 0 ; dl != 0
21
21
je done ; &&
22
- cmp al, bl ; al == bl )
22
+ cmp al, dl ; al == dl )
23
23
je cwhile ; )
24
24
done:
25
- sub rax, rbx ; rax = rbx - rax;
25
+ sub rax, rdx ; rax = rbx - rax;
26
26
return:
27
27
leave
28
28
ret ; return rax
Original file line number Diff line number Diff line change @@ -16,18 +16,18 @@ while: ; while (
16
16
cmp byte [rdi], 0 ; *s != 0
17
17
je done ; )
18
18
cwhile: ; {
19
- mov rbx, rsi ; rbx = reject
19
+ lea rdx, [ rsi] ; rdx = reject
20
20
_while: ; while (
21
- cmp byte [rbx ], 0 ; *rbx
21
+ cmp byte [rdx ], 0 ; *rdx
22
22
je _done ; )
23
23
_cwhile: ; {
24
- mov cl, byte [rbx ]
25
- cmp byte [rdi], cl ; if (*rbx == *s)
24
+ mov cl, byte [rdx ]
25
+ cmp byte [rdi], cl ; if (*rdx == *s)
26
26
je _done ; break ; // character found
27
- inc rbx ; rbx ++
27
+ inc rdx ; rdx ++
28
28
jmp _while ; }
29
29
_done:
30
- cmp byte [rbx ], 0 ; if (*rbx != 0 ) // match
30
+ cmp byte [rdx ], 0 ; if (*rdx != 0 ) // match
31
31
jne done ; break ;
32
32
inc rax ; rax++
33
33
inc rdi ; s++
Original file line number Diff line number Diff line change @@ -12,20 +12,20 @@ strncmp:
12
12
mov rcx, 0 ; rcx = 0
13
13
cwhile: ; do {
14
14
movzx rax, byte [rdi+rcx] ; rax = *(s1 + rcx)
15
- movzx rbx , byte [rsi+rcx] ; rbx = *(s2 + rcx)
15
+ movzx r8 , byte [rsi+rcx] ; r8 = *(s2 + rcx)
16
16
dec rdx ; n--
17
17
inc rcx ; rcx++
18
18
while: ; } while (
19
19
cmp al, 0x0 ; al != 0
20
20
je done ; &&
21
- cmp bl , 0x0 ; bl != 0
21
+ cmp r8b , 0x0 ; r8b != 0
22
22
je done ; &&
23
23
cmp dl, 0 ; n > 0
24
24
jle done ; &&
25
- cmp al, bl ; al == bl
25
+ cmp al, r8b ; al == r8b
26
26
je cwhile ; )
27
27
done:
28
- sub rax, rbx ; rax = rax - rbx
28
+ sub rax, r8 ; rax = rax - r8
29
29
return:
30
30
leave
31
31
ret ; return rax
Original file line number Diff line number Diff line change @@ -17,15 +17,15 @@ while: ; while (
17
17
cmp byte [rdi], 0 ; *s != 0
18
18
je done ; )
19
19
cwhile: ; {
20
- mov rbx , rsi ; rbx = accept
20
+ mov rdx , rsi ; rdx = accept
21
21
_while: ; while (
22
- cmp byte [rbx ], 0 ; *rbx
22
+ cmp byte [rdx ], 0 ; *rdx
23
23
je _done ; )
24
24
_cwhile: ; {
25
- mov cl, byte [rbx ]
26
- cmp byte [rdi], cl ; if (*rbx == *s)
25
+ mov cl, byte [rdx ]
26
+ cmp byte [rdi], cl ; if (*rdx == *s)
27
27
je done ; return rax ;
28
- inc rbx ; rbx ++
28
+ inc rdx ; rdx ++
29
29
jmp _while ; }
30
30
_done:
31
31
inc rdi ; haystack++
Original file line number Diff line number Diff line change @@ -16,18 +16,18 @@ while: ; while (
16
16
cmp byte [rdi], 0 ; *s != 0
17
17
je done ; )
18
18
cwhile: ; {
19
- mov rbx, rsi ; rbx = accept
19
+ lea rdx, [ rsi] ; rdx = accept
20
20
_while: ; while (
21
- cmp byte [rbx ], 0 ; *rbx
21
+ cmp byte [rdx ], 0 ; *rdx
22
22
je _done ; )
23
23
_cwhile: ; {
24
- mov cl, byte [rbx ]
25
- cmp byte [rdi], cl ; if (*rbx == *s)
24
+ mov cl, byte [rdx ]
25
+ cmp byte [rdi], cl ; if (*rdx == *s)
26
26
je _done ; break ; // character found
27
- inc rbx ; rbx ++
27
+ inc rdx ; rdx ++
28
28
jmp _while ; }
29
29
_done:
30
- cmp byte [rbx ], 0 ; if (*rbx == 0 ) // no match
30
+ cmp byte [rdx ], 0 ; if (*rdx == 0 ) // no match
31
31
je done ; break ;
32
32
inc rax ; rax++
33
33
inc rdi ; s++
Original file line number Diff line number Diff line change @@ -17,15 +17,15 @@ while: ; while (
17
17
je done ; )
18
18
cwhile: ; {
19
19
mov rax, rdi ; rax = haystack
20
- mov rbx , rsi ; rbx = needle
20
+ mov rdx , rsi ; rdx = needle
21
21
_while: ; while (1 ) {
22
- mov cl, byte [rbx ]
23
- cmp cl, 0 ; if (*rbx == 0 )
22
+ mov cl, byte [rdx ]
23
+ cmp cl, 0 ; if (*rdx == 0 )
24
24
je done ; return haystack
25
- cmp byte [rax], cl ; if (*rbx != *rax)
25
+ cmp byte [rax], cl ; if (*rdx != *rax)
26
26
jne _done ; break ;
27
27
inc rax ; rax++
28
- inc rbx ; rbx ++
28
+ inc rdx ; rdx ++
29
29
jmp _while ; }
30
30
_done:
31
31
inc rdi ; haystack++
You can’t perform that action at this time.
0 commit comments