LEX 'PRIMEASM' TITLE ERATOSTHENES SIEVE ID #5E MSG 0 POLL 0 ARYSIZ EQU #0B61B 26.17 FNRTN4 EQU #0F238 8.3 HDFLT EQU #1B31B 5.3 ENTRY P01 CHAR #F KEY 'PRIME' TOKEN 3 ENDTXT STITLE MAIN CODE *** * Prime number program BYTE Magazine Benchmark By Ronald B. Johnson * Returns number of primes found * Uses each nibble in an array to represent * an odd number, starting with 3 *** NIBHEX A11 Requires one array P01 C=DAT1 1 array type nib P=C 0 Copy to P for start of LCHEX C=0 M LCHEX 58F # of nib/ele -1 for types A,B,C P=C 12 size -1 in nib 12 ?P= 0 GOYES WRGTYP * Get number of nibs and address GOSBVL ARYSIZ * D1 points to array ptr in dv * C base address of array * A(A) # of nibs in array R0=C Store base address D1=D1- 11 restore orig mthstack ptr CD1EX move old D1 to C, array to D1 R3=C Save old D1 in R3 B=A A Save # Nibs B=B-1 A loop limit P= 0 LCHEX 9 Constant to represent Prime * 9 is a legal BCD digit in all fields SETHEX INLOOP DAT1=C P Write a 9 D1=D1+ 1 Incr ptr A=A-1 A Decr nib counter ?A#0 A GOYES INLOOP Loop test GOTO SIEVE WRGTYP C=0 W P= 14 LCHEX 91 Return -1 GOVLNG FNRTN4 STITLE Find Primes *** * R0 base address * R1 loop var * R2 count * R3 old D1 *** SIEVE C=0 A R1=C Loop var = 0 R2=C Count = 0 LOOP C=R1 loop var A=R0 Base addr A=A+C A Base + loop = ptr D1=A A=DAT1 1 read nib ?A=0 P if not prime GOYES NEXT A=C A i A=A+A A i+i A=A+1 A A=A+1 A A=A+1 A p=i+i+3 C=C+A A k=i+p NXTMUL ?C>B A k>s? GOYES INCNT D=C A copy k C=R0 base addr C=C+D A ptr to f(k) D1=C C=0 A DAT1=C 1 write 0 to f(k) C=D A k C=C+A A k=k+p GOTO NXTMUL INCNT C=R2 Count C=C+1 A R2=C NEXT C=R1 Loop var C=C+1 A ?C>B A GOYES DONE R1=C GOTO LOOP DONE A=R2 Count GOSBVL HDFLT C=R3 D1=C Restore mthstack C=A W float count GOVLNG FNRTN4