Systemnahe Programmierung in Chome Systemnahe Programmierung in C: register-Allokationsklasse Prof. Dr. Uwe Schmidt FH Wedel

register-Allokationsklasse

weiter

weiter

Register-Variablen
Beispiel: strlen.c

   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
weiter

weiter

Übersetzen

cc -Wall -S strlen.c

weiter

weiter

Der Assembler-Code: strlen.s

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
weiter

weiter

Übersetzen mit Optimierung

cc -Wall -O -o strlen-O.s -S strlen.c

weiter

weiter

Der optimierte Assembler-Code: strlen-O.s

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
weiter

Letzte Änderung: 11.01.2007
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel