0008d64da5479a394a7c682e49012e2d8ca293e8
[calu.git] / progs / max.s
1 #include "dt_inc.s"
2 .data
3 .org 0x0
4 arr:
5         .fill 2
6         .fill 3
7         .fill 5
8         .fill 7
9         .fill 11
10         .fill 13
11         .fill 17
12         .fill 19
13         .fill 23
14         .fill 29
15         .fill 31
16         .fill 37
17         .fill 41
18         .fill 43
19         .fill 47
20         .fill 53
21
22 str:
23         .ascii "hier das ergebnis: "
24 .text
25 .org 0x0
26 start:
27         br+ main
28         br+ main
29         ret
30 main:
31         call+ u_init
32         call+ u_recv_byte
33         call u_send_newline
34
35         ; benchprolog
36         call t_init
37         call t_stop
38         ldis r1, 0
39         call t_valset
40         call t_start
41         ; /benchprolog
42
43         ; max start
44         ldis r1, 16
45         ldil r2, arr@lo
46         ldih r2, arr@hi
47
48         call+ max
49         ; max end
50
51         ; benchepilog
52         push r0
53         call+ t_init
54         call+ t_stop
55         call+ t_valget
56         subi r0, r0, 0xc ; offset abziehen
57         pop r3
58         push r0
59         push r3
60         ; /benchepilog
61
62         call u_init ; weil r10 ueberschrieben wird
63         ldis r1, str@lo
64         ldih r1, str@hi
65         ldis r2, 19
66         call u_send_string
67
68         pop r1
69         call+ u_send_uint
70         call u_send_newline
71         pop r1
72         call+ u_send_uint
73         call u_send_newline
74
75         br+ main
76
77 max:
78         ; r1 = len
79         ; r2 = arr
80         ; r4 = arr[x]
81         ; r0 = x = arr[0]
82         ldw r0, 0(r2)
83         subi r1, r1, 1
84 maxloop:
85         ldw r4, 4(r2)
86         cmp r0, r4
87         movlt r0, r4
88         subi r1, r1, 1
89         addid r2, r2, 4
90         brnq+ maxloop
91         ret+