TI2/Rechnerarchitektur-Tutorium, 16./17.06.2015

Hinweise zum 9. Übungszettel

C-Programm für Bubblesort

bubblesort.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

extern void sort(int64_t[], int64_t);

// Achtung: Beim Sortieren beachten, dass manche Zahlen negativ sind.
int64_t values[] = {
     5098148149361743001,
     -302064941609824190,
     2057173079844083545,
    -4073909058042485464,
    -1053290595997966221,
    -1597857718040453924,
    -5212052472836525713,
     5915038731096956041,
    -4176734823308814698,
    -8752477696833005425,
    -7658452261574645192,
    -3274975896372705365,
     -260847759358859557,
    -1072717960239039049,
      127915565786215708,
     8635080326323521487,
     8242936877391977534,
     8244624781039375749,
    -3536281641322063547,
    -7205200076910712834,
     5908375636408117261,
     7256645852164087631,
     4828226875940496903,
    -5328293559000757898,
    -4276277453470290766,
     1897146576206823557,
     4641126210509834304,
    -7438517958898248572,
    -8217551423160633356,
     2709904206282179662
};

int main(int argc, char const *argv[])
{
    sort(values, sizeof(values)/sizeof(int64_t));
    int32_t i;
    for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
    {
        printf("%20"PRId64"\n", values[i]);
    }
    return 0;
}

Wichtige Hinweise zu Registern

  • Es gibt Register die dürfen nicht einfach verändert werden: rbp, rbx, r12-r15
  • Um sie zu benutzen, vorher auf Stack sichern
  • Vor ret wieder zurückholen
func:
    push rbx
    push r12
    ; doin' somethin' with rbx & r12
    pop r12
    pop rbx
    ret