|   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  |