Algorithmen und Datenstrukturen in Chome Algorithmen und Datenstrukturen in C: strcpy Prof. Dr. Uwe Schmidt FH Wedel

strcpy

weiter

weiter

Implementierung der strcpy-Funktion

strcpy
zum Kopieren von Zeichenreihe kann auf verschiedene Arten formuliert werden.
 
Die 1. Version ist in einem "Pascal-ähnlichen" Stil mit indizierten Zugriffen geschrieben.
 
Die 2. Version arbeitet mit Zeigerarithmetik und Dereferenzieren.
weiter

weiter

Die 1. Version: strcpy1.c

   1#include <stdlib.h>
   2
   3char *
   4strcpy1 (char *dchar *s)
   5{
   6  size_t i;
   7
   8  for (i = 0; s[i] != 0; ++i)
   9    {
  10      d[i] = s[i];
  11    }
  12  d[i] = 0;
  13
  14  return d;
  15}
weiter

weiter

Der Assembler-Code: gcc -O -o strcpy-O.s -S strcpy1.c

1 strcpy1:
2 pushl %ebp
3 movl %esp, %ebp
4 pushl %ebx
5 movl 8(%ebp), %ebx
6 movl 12(%ebp), %ecx
7 movl $0, %edx
8 cmpb $0, (%ecx)
9 je .L8
10 .L6:
11 movb (%edx,%ecx), %al
12 movb %al, (%edx,%ebx)
13 incl %edx
14 cmpb $0, (%edx,%ecx)
15 jne .L6
16 .L8:
17 movb $0, (%edx,%ebx)
18 movl %ebx, %eax
19 popl %ebx
20 popl %ebp
21 ret
weiter

weiter

Die 2. Version: strcpy2.c

   1#include <stdlib.h>
   2
   3char *
   4strcpy2 (char *dchar *s)
   5{
   6  char *d1 = d;
   7
   8  while ((*d1++ = *s++));
   9
  10  return d;
  11}
weiter

weiter

Der Assembler-Code: gcc -O -o strcpy2-O.s -S strcpy2.c

1 strcpy2:
2 movl $0, %edx
3 .L2:
4 movzbl (%rsi,%rdx), %eax
5 movb %al, (%rdi,%rdx)
6 addq $1, %rdx
7 testb %al, %al
8 jne .L2
9 movq %rdi, %rax
10 ret
weiter

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