home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 04 / review / sievetay.dec < prev    next >
Text File  |  1990-11-14  |  5KB  |  245 lines

  1. TITLE C:\TM2\TEST\SIEVETAY.DEC - MODULE SieveTaylor
  2.  
  3. ;  Module created 11-15-1990/05:08 by TOBJ2ASM
  4.  
  5. EXTRN         InOut_Read:FAR
  6. EXTRN         InOut_Write:FAR
  7. EXTRN         InOut_WriteCard:FAR
  8. EXTRN         InOut_WriteLn:FAR
  9. EXTRN         InOut_WriteString:FAR
  10.  
  11. EXTRN         RTInit_S:BYTE
  12.  
  13. DGROUP        GROUP   DATA, CONST, BSS, HEAP, STACK
  14.  
  15. TGROUP        GROUP   TYPES
  16.  
  17.               .286    
  18.               .287    
  19.  
  20. SieveTaylor_TEXT SEGMENT PARA 'CODE'
  21.  
  22.               ASSUME  CS:SieveTaylor_TEXT
  23.  
  24. SieveTest     PROC    NEAR
  25.  
  26. ;  (* $LineNumbers+ $Optimize:Speed $LoadTimeInit- $Large- *)
  27. ;  MODULE SieveTaylor;
  28. ;  
  29. ;  FROM InOut  IMPORT  Read, Write, WriteString, WriteCard, WriteLn;
  30. ;  
  31. ;  CONST
  32. ;      Size = 8190;
  33. ;      ITER = 2000;
  34. ;  
  35. ;  VAR
  36. ;      flag                    :ARRAY [0..Size] OF BOOLEAN;
  37. ;      ch                      :CHAR;
  38. ;      count                   :CARDINAL;
  39. ;  
  40. ;  PROCEDURE SieveTest;
  41. ;  VAR  i, j, k, prime   :CARDINAL;
  42. ;  BEGIN
  43.  
  44.               PUSH    AX
  45.               PUSH    CX
  46.               PUSH    DX
  47.               PUSH    BX
  48.               PUSH    SI
  49.               PUSH    DI
  50.               PUSH    ES
  51.  
  52. ;    FOR i := 1 TO ITER DO
  53.  
  54.               MOV     SI,1
  55.  
  56. ;        count := 0;
  57.  
  58.  
  59.               ASSUME  DS:DGROUP
  60.  
  61. lbl1:         MOV     WORD PTR @Bss+8192,0
  62.  
  63. ;        FOR j := 0 TO Size DO
  64.  
  65.               MOV     AX,257
  66.               MOV     DI,OFFSET DGROUP:@Bss
  67.               PUSH    DS
  68.               POP     ES
  69.               MOV     CX,4095
  70.               CLD     
  71.         REPNE STOSW   
  72.               STOSB   
  73.  
  74. ;            flag[j] := TRUE;
  75. ;        END;
  76. ;        FOR j := 0 TO Size DO
  77.  
  78.               MOV     DI,CX
  79.               MOV     AX,3
  80.  
  81. ;            IF flag[j] THEN
  82.  
  83. lbl2:         TEST    BYTE PTR @Bss[DI],1
  84.               JZ      lbl5
  85.  
  86. ;                prime := j+j+3;
  87.  
  88.               MOV     DX,AX
  89.  
  90. ;                k := j+prime;
  91.  
  92.               MOV     BX,DI
  93.               ADD     BX,DX
  94.  
  95. ;                WHILE k <= Size DO
  96.  
  97. lbl3:         CMP     BX,8190
  98.               JA      lbl4
  99.  
  100. ;                    flag[k] := FALSE;
  101.  
  102.               MOV     BYTE PTR @Bss[BX],0
  103.  
  104. ;                    INC(k,prime);
  105.  
  106.               ADD     BX,DX
  107.  
  108. ;                END;
  109.  
  110.               CMP     BX,8190
  111.               JA      lbl4
  112.               MOV     BYTE PTR @Bss[BX],0
  113.               ADD     BX,DX
  114.               CMP     BX,8190
  115.               JA      lbl4
  116.               MOV     BYTE PTR @Bss[BX],0
  117.               ADD     BX,DX
  118.               CMP     BX,8190
  119.               JA      lbl4
  120.               MOV     BYTE PTR @Bss[BX],0
  121.               ADD     BX,DX
  122.               CMP     BX,8190
  123.               JA      lbl4
  124.               MOV     BYTE PTR @Bss[BX],0
  125.               ADD     BX,DX
  126.               CMP     BX,8190
  127.               JA      lbl4
  128.               MOV     BYTE PTR @Bss[BX],0
  129.               ADD     BX,DX
  130.               CMP     BX,8190
  131.               JA      lbl4
  132.               MOV     BYTE PTR @Bss[BX],0
  133.               ADD     BX,DX
  134.               JMP     lbl3
  135.  
  136. ;                INC(count);
  137.  
  138. lbl4:         INC     WORD PTR @Bss+8192
  139.  
  140. ;            END;
  141.  
  142. ;        END;
  143.  
  144. lbl5:         ADD     AX,2
  145.               INC     DI
  146.               CMP     DI,8190
  147.               JBE     lbl2
  148.  
  149. ;    END;
  150.  
  151.               INC     SI
  152.               CMP     SI,2000
  153.               JA      lbl6
  154.               JMP     lbl1
  155.  
  156. ;  END SieveTest;
  157.  
  158. lbl6:         POP     ES
  159.               POP     DI
  160.               POP     SI
  161.               POP     BX
  162.               POP     DX
  163.               POP     CX
  164.               POP     AX
  165.               RET     
  166.  
  167. SieveTest     ENDP                   ; Size: 174 Byte
  168.  
  169. PUBLIC        _main
  170.  
  171. _main         PROC    FAR
  172.  
  173. ;  
  174. ;  BEGIN
  175.  
  176.               PUSH    BP
  177.               MOV     BP,SP
  178.               SUB     SP,2
  179.  
  180. ;      WriteString("Hit a key to start 2000 ITERATIONS");
  181.  
  182.               MOV     AX,33
  183.               PUSH    AX
  184.               PUSH    SS
  185.               MOV     AX,OFFSET DGROUP:Const0
  186.               PUSH    AX
  187.               CALL    InOut_WriteString
  188.  
  189. ;      Read(ch);  WriteLn;
  190.  
  191.               LEA     AX,[BP-1]
  192.               PUSH    AX
  193.               CALL    InOut_Read
  194.               CALL    InOut_WriteLn
  195.  
  196. ;      SieveTest;
  197.  
  198.               CALL    SieveTest
  199.  
  200. ;      Write(7C); WriteCard(count,5);
  201.  
  202.               MOV     AX,7
  203.               PUSH    AX
  204.               CALL    InOut_Write
  205.               PUSH    WORD PTR @Bss+8192
  206.               MOV     AL,5
  207.               PUSH    AX
  208.               CALL    InOut_WriteCard
  209.  
  210. ;  END SieveTaylor.
  211.  
  212.               MOV     SP,BP
  213.               POP     BP
  214.               RET     
  215.  
  216. _main         ENDP                   ; Size: 62 Byte
  217.  
  218. SieveTaylor_TEXT ENDS                ; Size: 236 Byte
  219.  
  220. TYPES         SEGMENT WORD PUBLIC 'TYPES'
  221. TYPES         ENDS    
  222.  
  223. DATA          SEGMENT WORD PUBLIC 'DATA'
  224. DATA          ENDS    
  225.  
  226. CONST         SEGMENT WORD PUBLIC 'CONST'
  227.  
  228. Const0        DB      'Hit a key to start 2000 ITERATIONS'
  229.  
  230. CONST         ENDS                   ; Size: 34 Byte
  231.  
  232. BSS           SEGMENT WORD PUBLIC 'BSS'
  233.  
  234. @Bss          DB      8194 DUP (?)
  235.  
  236. BSS           ENDS                   ; Size: 8194 Byte
  237.  
  238. HEAP          SEGMENT WORD PUBLIC 'HEAP'
  239. HEAP          ENDS    
  240.  
  241. STACK         SEGMENT PARA STACK 'STACK'
  242. STACK         ENDS    
  243.  
  244.               END     
  245.