1
0
mirror of https://github.com/moshix/mvs.git synced 2026-05-05 07:43:49 +00:00
Files
moshix.mvs/PC370_orig/Diskette/full/DEMO/SIEVE.ALC

161 lines
4.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE 'SIEVE.ALC - FIND PRIME NUMBERS USING SIEVE'
*
* AUTHOR. DON HIGGINS.
* DATE. 12/19/86.
* REMARKS. LIST PRIMES ENDING IN 999 UP TO 100,000 (MAXPRIME VALUE)
* USING 100,000 BYTE TABLE AND SIEVE ROUTINE
*
* 01/16/87 MODIFY TO USE BXLE AND CLCL SCAN FOR NEXT PRIME
* 03/01/87 MODIFY TO USE GMAIN INSTEAD OF DIRECT FQE ACCESS
* 05/20/87 UPDATE TIMINGS FOR PC/370 R2.0
*
SIEVE CSECT
LR BASE,ENTRY
USING SIEVE,BASE
LA R2,=C' $'
SVC WTO
LA R2,=C'SIEVE.ALC PROGRAM TO PRINT PRIMES ENDING$'
SVC WTO
LA R2,=C'IN 999 UP TO 100,000 USING 100,000 BYTE TABLE$'
SVC WTO
LA R2,=C'AND SIEVE ROUTINE. START AND ENDING TIME,$'
SVC WTO
LA R2,=C'AND 370 INSTRUCTION COUNT ARE ALSO PRINTED.$'
SVC WTO
LA R2,=C'TIME = 176 SECONDS ON 4.77 MHZ 8088 PC.$'
SVC WTO
LA R2,=C'TIME = 63 SECONDS ON 6 MHZ 80286 PC/AT.$'
SVC WTO
LA R2,=C'TIME = 37 SECONDS ON 10 MHZ 80286 PS/2-50.$'
SVC WTO
LA R2,=C'TIME = 31 SECONDS ON 12 MHZ 80286 COMPAQ.$'
SVC WTO
LA R2,=C'TIME = 20 SECONDS ON 16 MHZ 80386 COMPAQ.$'
SVC WTO
LA R2,=C' $'
SVC WTO
L ENTRY,=V(PET)
BALR LINK,ENTRY PRINT STARTING TIME
BAL LINK,INIT INIT REGS AND TABLE WITH 2,3 MARKED
LA NUMBER,5
LA NEXT,999 NEXT TARGET NUMBER WITH 999'S
MAINLOOP EQU *
BAL LINK,MARKDUP MARK DUPLICATES OF NUMBER
BAL LINK,FINDNEXT FIND NEXT PRIME
BZ MAINEOJ EXIT IF NONE FOUND
CLR NUMBER,NEXT
BL MAINLOOP LOOP IF NUMBER < NEXT TARGET
LA NEXT,1000(NEXT)
BNE CHKEOJ
BAL LINK,PRTNUM PRINT NUMBER IF EQUAL TO TARGET
CHKEOJ EQU *
CL NUMBER,=A(MAXPRIME)
BL MAINLOOP LOOP IF NUMBER < MAXPRIME
MAINEOJ EQU *
L ENTRY,=V(PET)
BALR LINK,ENTRY PRINT ENDING TIME
SVC EXIT
TITLE 'INIT - INITIALIZE TABLE WITH PRIME INDICATORS'
INIT EQU *
L R1,=A(MAXPRIME)
SVC GMAIN ALLOCATE TABLE FROM FREE MEMORY
LTR R0,R0
BNZ INITERR
LR TABS,R2
LR TABE,R2
A TABE,=A(MAXPRIME)
MVC 0(6,TABS),INITDATA
LRA R3,0(TABS)
L R2,=A(MAXPRIME-6)
MVCP 6(R2,TABS),0,R3 INIT TABLE WITH 2,3 DUP. MARKED
BR LINK
INITERR EQU *
LA R2,=C'INSUFFICIENT MEMORY FOR TABLE$'
SVC WTO
SVC TRACE
DC C'BUG '
SVC EXIT
TITLE 'PRTNUM - PRINT PRIME NUMBER'
PRTNUM EQU *
CVD NUMBER,PWORK
MVC DNUM,DMASK
ED DNUM,PWORK+4
LA R2,DNUM
SVC WTO
BR LINK
TITLE 'MARKDUP - MARK DUPLICATES IN TABLE'
MARKDUP EQU *
LA DUP,0(NUMBER,TABS)
BXH DUP,NUMBER,MARKEXIT EXIT IF DUP > TABE
MARKLOOP EQU *
MVI 0(DUP),NOTPRIME
BXLE DUP,NUMBER,MARKLOOP LOOP IF DUP <= TABE
MARKEXIT EQU *
BR LINK
TITLE 'FINDNEXT - FIND NEXT PRIME IN TABLE'
FINDNEXT EQU *
LA R0,1(NUMBER,TABS)
LR R1,TABE
SR R1,R0
BNH FINDEOF EOF IF SCAN LENGTH NOT > 0
LM R2,R3,=A(0,NOTPRIME*X'1000000')
CLCL R0,R2 SCAN FOR NEXT PRIME
BE FINDEOF EOF IF NO PRIME FOUND
SR R0,TABS
LR NUMBER,R0
BR LINK EXIT WITH NZ FOR PRIME
FINDEOF EQU *
SR R0,R0 FORCE ZERO CC FOR END OF TABLE
BR LINK
TITLE 'COMMON DATA'
LTORG
*
* SVC'S
*
EXIT EQU 0
TRACE EQU 9
GMAIN EQU 10 R1=LENGTH, R2=ADDRESS, R0=RC (0=OK)
WTO EQU 209
*
* REGISTERS
*
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
DUP EQU 4
TABS EQU 5
NUMBER EQU 6 R6/R7 USED IN BXLE/BXH
TABE EQU 7
TWO EQU 9
NEXT EQU 10
BASE EQU 12
LINK EQU 14
ENTRY EQU 15
*
* DATA
*
MAXPRIME EQU 100000 (100,000=200 SEC, 10,000=20 SEC FOR QUICK TEST)
PRIME EQU 0
NOTPRIME EQU 1
PWORK DC D'0'
DMASK DC X'40206B2020206B202020'
DNUM DC CL10' Z,ZZZ,ZZZ',C'$'
*
* INITDATA ELIMINATES 2'S AND 3'S FROM TABLE
*
INITDATA DC AL1(NOTPRIME,PRIME,NOTPRIME,NOTPRIME,NOTPRIME,PRIME)
*
* DSECTS
*
ASCB DSECT
ASCBIDR DS CL4
ASCBNEXT DS A NEXT ASCB OR ZERO
ASCBPREV DS A PREVIOUS ASCB OR ZERO
ASCBASO DS A VIRTUAL ADDRESS SPACE ORIGIN
ASCBASL DS A VIRTUAL ADDRESS SPACE LENGTH
ASCBASF DS A RELATIVE ADDRESS OF FREE SPACE QUEUE OR ZERO
ASCBASE DS A RELATIVE ADDRESS OF ENTRY POINT USED BY ATTACH
ASCBEXIT DS A RELATIVE ADDRESS OF EXIT IN PREV. ADDR. SPACE
END SIEVE