Gordons Projects

--> Projects Top-Level GIT

Initial commit into GIT
[cesil] / primes.csl
1
2 # primes:
3 #       Calculate prime numbers.
4 #       This program uses the rather long and boring process of simply
5 #       testing a number to see if anything divides into it evenly.
6
7         line
8         print   "How many to find"
9         in
10         store   numPrimes
11
12         print   "Working:"
13         line
14
15 # 2 is the first prime:
16 #       bit of a cheat but we'll calculate the rest
17
18         load    2
19         out
20
21         load    3
22 bigLoop:
23         store   candidate
24         jsr     primeTest
25         jizero  nextCandidate
26
27         load    candidate
28         out
29         wait    1
30
31         load    numPrimes
32         sub     1
33         store   numPrimes
34         jizero  done
35
36 nextCandidate:
37         load    candidate
38         add     2               # All primes after 2 are odd
39         jump    bigLoop
40
41 done:
42         line
43         halt
44
45 # primeTest:
46 #       Entry:  candiate is acc
47 #       Exit:   acc contains 1 if prime
48 #       This is a brute-force way to work out if it has any divisors.
49 #       (Although it's a reasonably clever way to get the remainer)
50
51 primeTest:
52         div     2               # Only check up to half the candidate
53         store   divisor
54
55 nextTest:
56         sub     1               # If divisor got down to 1, then it's prime
57         jizero  gotPrime
58
59         load    candidate
60         div     divisor
61         mul     divisor
62         sub     candidate       # If zero, then it divided evenly = No Prime
63         jizero  notPrime
64
65         load    divisor
66         sub     1
67         store   divisor
68         jump    nextTest
69
70 notPrime:
71         load    0
72         ret
73
74 gotPrime:
75         load    1
76         ret