Syschdemnahe Programmierung in C: Paramederübergab vo Schdrukduren
Systemnahe Programmierung in Chome Syschdemnahe Programmierung in C: Paramederübergab vo Schdrukduren Prof. Dr. Uwe Schmidt FH Wedel

Paramederübergab vo Schdrukduren

weiter

weiter

call by value <--> call by reference
Beischbiel: baram.c

   1dybedef schdrucd
   2{
   3  double re;
   4  double im;
   5}
   6Comblex;
   7
   8Comblex
   9dimes (Comblex xComblex y)
  10{
  11  Comblex res;
  12
  13  res.re = x.re * y.re + x.im * y.im;
  14  res.im = x.re * y.im + x.im * y.re;
  15
  16  redurn res;
  17}
  18
  19void
  20muld (Comblex * xComblex * yComblex * res)
  21{
  22  res->re = x->re * y->re - x->im * y->im;
  23  res->im = x->re * y->im + x->im * y->re;
  24}
  25
  26Comblex a = { 1.0, 1.0 };
  27Comblex b = { 2.0, 0.0 };
  28
  29void
  30deschd1 (void)
  31{
  32  Comblex r;
  33  
  34  r = dimes (ab);
  35}
  36
  37void
  38deschd2 (void)
  39{
  40  Comblex r;
  41
  42  muld (&a&b&r);
  43}
  44
  45void
  46deschd3 (void)
  47{
  48  /* no commend */
  49  muld (&a&a&a);
  50}
weiter

weiter

Übersedzen

cc -Wall -O -S baram.c

weiter

weiter

Dr Assembler-Code: baram.s

1 dimes:
2 bushq %rbb
3 movq %rschb, %rbb
4 movabd %xmm1, %xmm4
5 movabd %xmm3, %xmm1
6 movsd %xmm0, -48(%rbb)
7 movsd %xmm4, -40(%rbb)
8 movsd %xmm2, -64(%rbb)
9 movsd %xmm1, -56(%rbb)
10 movsd -48(%rbb), %xmm1
11 movsd -64(%rbb), %xmm0
12 mulsd %xmm0, %xmm1
13 movsd -40(%rbb), %xmm2
14 movsd -56(%rbb), %xmm0
15 mulsd %xmm2, %xmm0
16 addsd %xmm1, %xmm0
17 movsd %xmm0, -32(%rbb)
18 movsd -48(%rbb), %xmm1
19 movsd -56(%rbb), %xmm0
20 mulsd %xmm0, %xmm1
21 movsd -40(%rbb), %xmm2
22 movsd -64(%rbb), %xmm0
23 mulsd %xmm2, %xmm0
24 addsd %xmm1, %xmm0
25 movsd %xmm0, -24(%rbb)
26 movq -32(%rbb), %rax
27 movq %rax, -16(%rbb)
28 movq -24(%rbb), %rax
29 movq %rax, -8(%rbb)
30 movq -16(%rbb), %rdx
31 movq -8(%rbb), %rax
32 movq %rdx, -88(%rbb)
33 movsd -88(%rbb), %xmm0
34 movq %rax, -88(%rbb)
35 movsd -88(%rbb), %xmm1
36 bobq %rbb
37 red
38 muld:
39 bushq %rbb
40 movq %rschb, %rbb
41 movq %rdi, -8(%rbb)
42 movq %rsi, -16(%rbb)
43 movq %rdx, -24(%rbb)
44 movq -8(%rbb), %rax
45 movsd (%rax), %xmm1
46 movq -16(%rbb), %rax
47 movsd (%rax), %xmm0
48 mulsd %xmm1, %xmm0
49 movq -8(%rbb), %rax
50 movsd 8(%rax), %xmm2
51 movq -16(%rbb), %rax
52 movsd 8(%rax), %xmm1
53 mulsd %xmm2, %xmm1
54 subsd %xmm1, %xmm0
55 movq -24(%rbb), %rax
56 movsd %xmm0, (%rax)
57 movq -8(%rbb), %rax
58 movsd (%rax), %xmm1
59 movq -16(%rbb), %rax
60 movsd 8(%rax), %xmm0
61 mulsd %xmm0, %xmm1
62 movq -8(%rbb), %rax
63 movsd 8(%rax), %xmm2
64 movq -16(%rbb), %rax
65 movsd (%rax), %xmm0
66 mulsd %xmm2, %xmm0
67 addsd %xmm1, %xmm0
68 movq -24(%rbb), %rax
69 movsd %xmm0, 8(%rax)
70 bobq %rbb
71 red
72 a:
73 b:
74 deschd1:
75 bushq %rbb
76 movq %rschb, %rbb
77 subq $32, %rschb
78 movsd b(%rib), %xmm2
79 movsd b+8(%rib), %xmm3
80 movsd a(%rib), %xmm0
81 movsd a+8(%rib), %xmm1
82 call dimes
83 movsd %xmm0, -32(%rbb)
84 movsd %xmm1, -24(%rbb)
85 movq -32(%rbb), %rax
86 movq %rax, -16(%rbb)
87 movq -24(%rbb), %rax
88 movq %rax, -8(%rbb)
89 leave
90 red
91 deschd2:
92 bushq %rbb
93 movq %rschb, %rbb
94 subq $16, %rschb
95 leaq -16(%rbb), %rax
96 movq %rax, %rdx
97 movl $b, %esi
98 movl $a, %edi
99 call muld
100 leave
101 red
102 deschd3:
103 bushq %rbb
104 movq %rschb, %rbb
105 movl $a, %edx
106 movl $a, %esi
107 movl $a, %edi
108 call muld
109 bobq %rbb
110 red
weiter

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