-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmultiples-3or5.mx
More file actions
71 lines (61 loc) · 1.2 KB
/
multiples-3or5.mx
File metadata and controls
71 lines (61 loc) · 1.2 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
; Multiples of 3 or 5
; Problem 1
; If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
; Find the sum of all the multiples of 3 or 5 below 1000.
%include "memory"
%include "control"
%include "procedures"
%include "math"
%include "io"
%include "debug"
; local names
%define idx 0
%define sum 1
%define counter5 2
%func {main, 1, 3,
%seg:local(%sum, str 0) ; sum = 0
%seg:local(%counter5, str 0) ; counter = 0
%seg:arg(0, ldm)
%for {
%stack:top() ; local[0] = idx
%seg:local(%idx, strr)
; %print_endl(outur)
%if_else { ; idx % 3 == 0
%seg:local(%idx,
%stack:pushm()
)
%stack:push(3)
%call(divide)
%stack:pop()
%ld_remainder()
leq 0
,
jmp add
,
%seg:move(%local, %counter5) ; add if counter == 0
bmne update_counter
}
:add
%seg:local(%idx, ldm)
%seg:local(%sum, strar)
:update_counter
%if {
%seg:local(%counter5,
stra 1
lmge 5
)
,
str 0
}
}
; %dumpStackOverrun(8)
%seg:local(%sum, ldm) ; return sum
}
; TODO result has to fit in 16 bits
; so only 500 are computed, but result is correct
%stack:push(500)
%call(main)
%print_endl(
%stack:pop()
outum
)