home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / compiler / ubasic / ubas830 / ecm1.asm < prev    next >
Assembly Source File  |  1988-09-26  |  3KB  |  246 lines

  1. ;ECM1
  2. ;Sep 1988 by Yuji KIDA
  3. ;
  4.  
  5.     INCLUDE    UB.MAC
  6.  
  7. ;   10 *ECM_SUB
  8. ;   20 v6=v4:v7=v5:v8=v4:v9=v5
  9.  
  10.     @LET    v6,v4
  11.     @LET    v7,v5
  12.     @LET    v8,v4
  13.     @LET    v9,v5
  14.  
  15. ;   30 v12=v6+v7:v13=v6-v7
  16.  
  17.     @PUSH    v6
  18.     @PUSH    v7
  19.     @ADD
  20.     @POP    v12
  21.  
  22.     @PUSH    v6
  23.     @PUSH    v7
  24.     @SUB
  25.     @POP    v13
  26.  
  27.     JMP    SHORT L40
  28.  
  29. ;   40 for I%=1 to len(v3)-1
  30.  
  31. V3COUNT    DB    ?
  32.     EVEN
  33. V3ADR    DW    ?
  34. V3SEG    DW    ?
  35. V3WORD    DW    ?    
  36.  
  37. L40:
  38.     MOV    BX,v3
  39.     LDS    SI,CS:[BX]    ;adr of counter
  40.     MOV    AX,[SI]
  41.     AND    AX,3FFFH
  42.     MOV    BX,AX        ;counter word length 
  43.     MOV    CL,4
  44.     SHL    AX,CL        ;16 ö{
  45.     MOV    CX,AX        ;counter bit length
  46.     SHL    BX,1
  47.     MOV    AX,[BX+SI]    ;HIGHEST WORD(must be <>0)
  48.     INC    CX
  49. L40A:
  50.     DEC    CX
  51.     SHL    AX,1
  52.     JNC    L40A
  53.     DEC    CX        ;LEN-1
  54.  
  55.     ADD    SI,2
  56.     MOV    AX,[SI]
  57.     SHR    AX,1        ;BIT0 is not needed
  58.     MOV    CS:[V3WORD],AX
  59.     MOV    CS:[V3COUNT],15
  60.     MOV    CS:[V3ADR],SI
  61.     MOV    CS:[V3SEG],DS
  62.  
  63. L40LP:
  64.     PUSH    CX
  65.  
  66. ;   50    v10=v12^2@v1:v11=v13^2@v1
  67.  
  68.     @PUSH    v12
  69.     @P2
  70.     @PUSH    v1
  71.     @MOD
  72.     @POP    v10
  73.  
  74.     @PUSH    v13
  75.     @P2
  76.     @PUSH    v1
  77.     @MOD
  78.     @POP    v11
  79.  
  80. ;   60    v6=v10*v11@v1
  81.  
  82.     @PUSH    v10
  83.     @PUSH    v11
  84.     @MUL
  85.     @PUSH    v1
  86.     @MOD
  87.     @POP    v6
  88.  
  89. ;         v7=(v10-v11)*(v11+v2*(v10-v11)@v1)@v1
  90.  
  91.     @PUSH    v10
  92.     @PUSH    v11
  93.     @SUB
  94.     @PUSH    v11
  95.     @PUSH    v2
  96.     @PUSH    v10
  97.     @PUSH    v11
  98.     @SUB
  99.     @MUL
  100.     @PUSH    v1
  101.     @MOD
  102.     @ADD
  103.     @MUL
  104.     @PUSH    v1
  105.     @MOD
  106.     @POP    v7
  107.  
  108. ;   70    v12=v6+v7:v13=v6-v7
  109.  
  110.     @PUSH    v6
  111.     @PUSH    v7
  112.     @ADD
  113.     @POP    v12
  114.  
  115.     @PUSH    v6
  116.     @PUSH    v7
  117.     @SUB
  118.     @POP    v13
  119.  
  120. ;   80    if bit(I%,v3)
  121.  
  122.     SHR    CS:[V3WORD],1
  123.     PUSHF
  124.     DEC    CS:[V3COUNT]
  125.     JNZ    L80A
  126.     MOV    CS:[V3COUNT],16
  127.     LDS    SI,CS:DWORD PTR [V3ADR]
  128.     ADD    SI,2
  129.     MOV    CS:[V3ADR],SI
  130.     MOV    AX,[SI]
  131.     MOV    CS:[V3WORD],AX    
  132. L80A:
  133.     POPF
  134.     JC    L90
  135.     JMP    L110
  136.  
  137. ;  90       :then v10=v13*(v4+v5)@v1:v11=v12*(v4-v5)@v1
  138.  
  139. L90:
  140.     @PUSH    v13
  141.     @PUSH    v4
  142.     @PUSH    v5
  143.     @ADD
  144.     @MUL
  145.     @PUSH    v1
  146.     @MOD
  147.     @POP    v10
  148.  
  149.     @PUSH    v12
  150.     @PUSH    v4
  151.     @PUSH    v5
  152.     @SUB
  153.     @MUL
  154.     @PUSH    v1
  155.     @MOD
  156.     @POP    v11
  157.  
  158. ; 100          :v4=(v10+v11)^2@v1*v9@v1:v5=(v10-v11)^2@v1*v8@v1
  159.  
  160.     @PUSH    v10
  161.     @PUSH    v11
  162.     @ADD
  163.     @P2
  164.     @PUSH    v1
  165.     @MOD
  166.     @PUSH    v9
  167.     @MUL
  168.     @PUSH    v1
  169.     @MOD
  170.     @POP    v4
  171.  
  172.     @PUSH    v10
  173.     @PUSH    v11
  174.     @SUB
  175.     @P2
  176.     @PUSH    v1
  177.     @MOD
  178.     @PUSH    v8
  179.     @MUL
  180.     @PUSH    v1
  181.     @MOD
  182.     @POP    v5
  183.  
  184.     JMP    L130
  185.  
  186. ;  110       :else v10=v13*(v8+v9)@v1:v11=v12*(v8-v9)@v1
  187.  
  188. L110:
  189.     @PUSH    v13
  190.     @PUSH    v8
  191.     @PUSH    v9
  192.     @ADD
  193.     @MUL
  194.     @PUSH    v1
  195.     @MOD
  196.     @POP    v10
  197.  
  198.     @PUSH    v12
  199.     @PUSH    v8
  200.     @PUSH    v9
  201.     @SUB
  202.     @MUL
  203.     @PUSH    v1
  204.     @MOD
  205.     @POP    v11
  206.  
  207. ;  120          :v8=(v10+v11)^2@v1*v5@v1:v9=(v10-v11)^2@v1*v4@v1
  208.  
  209.     @PUSH    v10
  210.     @PUSH    v11
  211.     @ADD
  212.     @P2
  213.     @PUSH    v1
  214.     @MOD
  215.     @PUSH    v5
  216.     @MUL
  217.     @PUSH    v1
  218.     @MOD
  219.     @POP    v8
  220.  
  221.     @PUSH    v10
  222.     @PUSH    v11
  223.     @SUB
  224.     @P2
  225.     @PUSH    v1
  226.     @MOD
  227.     @PUSH    v4
  228.     @MUL
  229.     @PUSH    v1
  230.     @MOD
  231.     @POP    v9
  232.  
  233. ; 130 next
  234.  
  235. L130:
  236.     POP    CX
  237.     DEC    CX
  238.     JZ    L140
  239.     JMP    L40LP
  240.  
  241. ;  140 return
  242.  
  243. L140:
  244.     RETURN
  245.  
  246.