Systemnahe Programmierung in C: register-Allokationsklasse |
1#include <stddef.h>
2
3size_t
4strlen1 (char *s)
5{
6 char *s1 = s;
7
8 while (*s1++);
9
10 return s1 - s - 1;
11}
12
13size_t
14strlen2 (char *s)
15{
16 register char *s1 = s;
17
18 while (*s1++);
19
20 return s1 - s - 1;
21}
22
|
1 strlen1:
2 pushq %rbp
3 movq %rsp, %rbp
4 movq %rdi, -24(%rbp)
5 movq -24(%rbp), %rax
6 movq %rax, -8(%rbp)
7 nop
8 .L2:
9 movq -8(%rbp), %rax
10 movzbl (%rax), %eax
11 testb %al, %al
12 setne %al
13 addq $1, -8(%rbp)
14 testb %al, %al
15 jne .L2
16 movq -8(%rbp), %rdx
17 movq -24(%rbp), %rax
18 movq %rdx, %rcx
19 subq %rax, %rcx
20 movq %rcx, %rax
21 subq $1, %rax
22 popq %rbp
23 ret
24 strlen2:
25 pushq %rbp
26 movq %rsp, %rbp
27 pushq %rbx
28 movq %rdi, -16(%rbp)
29 movq -16(%rbp), %rbx
30 nop
31 .L4:
32 movzbl (%rbx), %eax
33 testb %al, %al
34 setne %al
35 addq $1, %rbx
36 testb %al, %al
37 jne .L4
38 movq %rbx, %rdx
39 movq -16(%rbp), %rax
40 movq %rdx, %rcx
41 subq %rax, %rcx
42 movq %rcx, %rax
43 subq $1, %rax
44 popq %rbx
45 popq %rbp
46 ret
|
1 strlen1:
2 movq %rdi, %rax
3 .L2:
4 movzbl (%rax), %edx
5 addq $1, %rax
6 testb %dl, %dl
7 jne .L2
8 subq %rdi, %rax
9 subq $1, %rax
10 ret
11 strlen2:
12 movq %rdi, %rax
13 .L5:
14 movzbl (%rax), %edx
15 addq $1, %rax
16 testb %dl, %dl
17 jne .L5
18 subq %rdi, %rax
19 subq $1, %rax
20 ret
|
Letzte Änderung: 11.01.2007 | © Prof. Dr. Uwe Schmidt |