home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / basic / b-compil.lbr / SIEVE.AQM / SIEVE.ASM
Encoding:
Assembly Source File  |  1986-07-20  |  2.8 KB  |  152 lines

  1.     ORG 0100H ;STANDARD CP/M ORIGIN
  2.     LXI SP,STACK
  3. I10:
  4.     LHLD ZA$
  5.     MVI A,32!MOV M,A
  6.     LXI H, 1 !SHLD ZA$+2
  7.     LXI H,ZA$!SHLD ZB
  8.     LHLD ZB!MOV E,M!INX H!MOV D,M!XCHG!SHLD ZC
  9.     JMP I10B
  10. I10A: DB 53,48,32,73,84,69,82,65,84,73,79,78,83
  11. I10B:LXI H,I10A
  12.     LXI D,13
  13.     LXI B,2
  14.     CALL PSTR
  15.     CALL PLNE
  16.     LXI H,1
  17.     SHLD ZM
  18. FOR1: LXI D, 50 
  19.     CALL NC2!ORA A!JNZ NXT1
  20.     LXI H,0
  21.     SHLD ZCOUNT
  22.     LXI D,8191!LXI H,8191!SHLD ZA$+2
  23.     LHLD ZA$!dad d!xchg!ora a
  24.     MVI A, 1 !lxi b,-1
  25.     stax d!DCX D!dad b!JC $-3
  26. I20:
  27.     LHLD ZC
  28.     XCHG
  29.     LXI H, 1 
  30.     CALL ARITH2
  31.     SHLD ZD
  32. I80:
  33.     LXI H,0
  34.     SHLD ZI
  35. FOR2: LXI D, 8190 
  36.     CALL NC2!ORA A!JNZ NXT2
  37. I90:
  38.     LHLD ZD!INX H!SHLD ZD
  39.     LHLD ZD!MOV A,M!LXI H,0!MOV L,A!SHLD ZB
  40.     LHLD ZB!XCHG
  41.     LXI H,0
  42.     CALL NC
  43.     ORA A!JZ I100
  44.     JMP I170
  45. I100:
  46.     LHLD ZI
  47.     XCHG
  48.     LHLD ZI
  49.     DAD D
  50.     XCHG
  51.     LXI H, 3 
  52.     DAD D
  53.     SHLD ZPRIME
  54.     LHLD ZPRIME
  55.     XCHG
  56.     LHLD ZI
  57.     DAD D
  58.     SHLD ZK
  59. I120:
  60.     LHLD ZK!XCHG
  61.     LXI H,8190
  62.     CALL NC4
  63.     ORA A!JZ I130
  64.     JMP I160
  65. I130:
  66.     LHLD ZC
  67.     XCHG
  68.     LHLD ZK
  69.     DAD D
  70.     SHLD ZE
  71.     LHLD ZE!XCHG
  72.     LXI H,0
  73.     MOV A,L!STAX D
  74.     LHLD ZK
  75.     XCHG
  76.     LHLD ZPRIME
  77.     DAD D
  78.     SHLD ZK
  79.     JMP I120
  80. I160:
  81.     LHLD ZCOUNT!INX H!SHLD ZCOUNT
  82. I170:
  83.     LHLD ZI!INX H!SHLD ZI!JMP FOR2
  84. NXT2:
  85. I180:
  86.     LHLD ZM!INX H!SHLD ZM!JMP FOR1
  87. NXT1:
  88. I190:
  89.     LHLD ZCOUNT
  90.     LXI B,2
  91.     CALL PNUM
  92.     JMP I190B
  93. I190A: DB 32,80,82,73,77,69,83,46
  94. I190B:LXI H,I190A
  95.     LXI D,8
  96.     LXI B,2
  97.     CALL PSTR
  98.     CALL PLNE
  99. I200:
  100.     JMP 000H
  101.     CALL 0000H
  102. PSTR:    MOV    A,D! ORA A! JNZ PLOOP! MOV A,E! ORA A! RZ
  103. PLOOP:    PUSH    D! PUSH B! MOV E,M! PUSH H! PUSH PSW
  104.     CALL    0005H
  105.     POP    PSW! POP H! POP B! POP D! INX H! DCX D! MOV A,E! ORA A
  106.     JNZ    PLOOP
  107.     MOV    A,D! ORA A! JNZ PLOOP
  108.     RET
  109. PLNE:    PUSH    B! MVI E,13
  110.     CALL    0005! POP B! PUSH B! MVI E,10
  111.     CALL    0005! POP B! RET
  112. PNUM:    LXI    D,SAREA! PUSH B! MOV A,H! ANI 080H! JZ PNUM2
  113.     MOV    A,H! CMA! MOV H,A! MOV A,L! CMA! MOV L,A! INX H
  114.     MVI    A,'-'! STAX D! JMP PNUM3
  115. PNUM2:    MVI    A,'+'! STAX D
  116. PNUM3:    INX    D
  117.     LXI    B,-10000! CALL DECDIG
  118.     LXI    B,-1000! CALL DECDIG
  119.     LXI    B,-100! CALL DECDIG
  120.     LXI    B,-10! CALL DECDIG
  121.     MOV    A,L! ORI '0'! STAX D
  122.     LXI    D,0006H! LXI H,SAREA
  123.     POP    B! JMP PSTR
  124. DECDIG:    MVI    A,'0'-1
  125. DECLP:    INR    A! DAD B! JC DECLP
  126.     STAX    D! INX D! MOV A,B! CMA
  127.     MOV    B,A! MOV A,C! CMA
  128.     MOV    C,A! INX B! DAD B! RET
  129. ARITH2:    MOV    A,H! CMA! MOV H,A
  130.     MOV    A,L! CMA! MOV L,A! INX H! DAD D! RET
  131. NC:    MOV    A,H! CMP D! JNZ NNE! MOV A,L! CMP E! JNZ NNE
  132. NEQ:    MVI    A,0FFH! RET
  133. NNE:    MVI    A,00H! RET
  134. NC2:    mov a,h! adi 128! mov h,a! mov a,d! adi 128
  135.     cmp h! jc NEQ! jnz NNE
  136.     mov a,e! cmp l! jc NEQ! jmp NNE
  137. NC4:    XCHG! JMP NC2
  138. ZA$: DW STACK+257,0
  139. ZB: DW 0
  140. ZC: DW 0
  141. ZM: DW 0
  142. ZCOUNT: DW 0
  143. ZD: DW 0
  144. ZI: DW 0
  145. ZPRIME: DW 0
  146. ZK: DW 0
  147. ZE: DW 0
  148.     DS 64
  149. STACK:
  150. SAREA: DW 0
  151.     END
  152.