-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode_final.s
More file actions
148 lines (140 loc) · 2.73 KB
/
code_final.s
File metadata and controls
148 lines (140 loc) · 2.73 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
.main:
mov r0, 1000 @base addr
mov r2, 5 @#integers to be added
st r2, [r0] @ arr[0] = 5 (number of elements to sum)
.print r2
mov r2, 10
st r2, 4[r0] @ arr[1] = 10
mov r2, 8
st r2, 8[r0] @ arr[2] = 8
mov r2, 7
st r2, 12[r0] @ arr[3] = 7
mov r2, 6
st r2, 16[r0]
mov r2, 5
st r2, 20[r0]
mov r2, 5
st r2, 24[r0]
mov r2, 4
st r2, 28[r0]
mov r2, 3
st r2, 32[r0]
mov r2, 2
st r2, 36[r0]
mov r2, 1
st r2, 40[r0]
mov r2, 2
st r2, 44[r0]
mov r2, 3
st r2, 48[r0]
mov r2, 4
st r2, 52[r0]
mov r2, 5
st r2, 56[r0]
mov r2, 6
st r2, 60[r0]
mov r2, 7
st r2, 64[r0]
mov r2, 8
st r2, 68[r0]
mov r2, 9
st r2, 72[r0]
mov r2, 10
st r2, 76[r0]
mov r2, 11
st r2, 80[r0]
mov r2, 12
st r2, 84[r0]
mov r2, 13
st r2, 88[r0]
mov r2, 14
st r2, 92[r0]
mov r2, 15
st r2, 96[r0]
mov r2, 16
st r2, 100[r0]
mov r2, 17
st r2, 104[r0]
mov r2, 18
st r2, 108[r0]
mov r2, 19
st r2, 112[r0]
mov r2, 20
st r2, 116[r0]
mov r2, 21
st r2, 120[r0]
mov r2, 22
st r2, 124[r0]
mov r2, 23
st r2, 128[r0]
mov r2, 24
st r2, 132[r0]
mov r2, 25
st r2, 136[r0]
mov r2, 26
st r2, 140[r0]
mov r2, 27
st r2, 144[r0]
mov r2, 28
st r2, 148[r0]
mov r2, 29
st r2, 152[r0]
mov r2, 30
st r2, 156[r0]
mov r2, 31
st r2, 160[r0]
mov r2, 32
st r2, 164[r0]
mov r2, 33
st r2, 168[r0]
mov r2, 34
st r2, 172[r0]
mov r2, 35
st r2, 176[r0]
mov r2, 36
st r2, 180[r0]
mov r2, 37
st r2, 184[r0]
mov r2, 38
st r2, 188[r0]
mov r2, 39
st r2, 192[r0]
mov r2, 40
st r2, 196[r0]
mov r2, 41
st r2, 200[r0]
@Code starts here
ld r1, [r0] @ load count = arr[0]
add r0, r0, 4 @ move base to arr[1]
call .sumArray
.print r7 @ prints final sum
.print r0 @points to arr[1], (base add +4)
.print r1 @inital number of elements to be added
.print r2 @last value stored into array
.print r4 @current element loaded int the final recursion (arr[1]=10)
b .end
.sumArray:
cmp r1, 0
beq .base_case
bgt .recurse
b .base_case
.base_case:
mov r7, 0 @ sum = 0
ret
.recurse:
sub sp, sp, 12
st r0, [sp] @ push base address
st r1, 4[sp] @ push element count
st ra, 8[sp] @ push return address
add r0, r0, 4 @ move base to next element
sub r1, r1, 1 @ r1 = r1 - 1
call .sumArray @ recursive call
ld r0, [sp] @ restore r0
ld r1, 4[sp] @ restore r1
ld ra, 8[sp] @ restore ra
ld r4, [r0] @ load current element
add r7, r7, r4 @ r7 = arr[i] + recursive sum
add sp, sp, 12 @ pop stack frame
ret
.end:
nop