home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol064 / power.src < prev    next >
Encoding:
Text File  |  1984-04-29  |  3.4 KB  |  347 lines

  1. ;TYPE
  2. ;BYTE = 0..255;
  3. ;VAR
  4. ;RAISE:BYTE;
  5. ;NUMBER:REAL;
  6. ;
  7. ;{function to raise a number "x" to a power "y"...x must be real and y must be
  8. ;an integer...greater than zero.  This corresponds to the BASIC arithematic
  9. ;command ** as in A = x**2 .}
  10. ;
  11. ;
  12. ;FUNCTION POWER (X:REAL; Y:BYTE):REAL;
  13. ;LABEL 1;
  14. ;VAR
  15. ;I:INTEGER;
  16. ;CALC:REAL;
  17. ;
  18. ;BEGIN
  19. L150
  20.     NAME POWER
  21.     ENTRY POWER
  22. POWER:
  23.     ENTR    D,2,6
  24. ;    CALC:=1.0;
  25.     STMT    D,1
  26.     LXI    H,320
  27.     MOV    D,A
  28.     MOV    E,A
  29.     PUSH    H
  30.     PUSH    D
  31.     LXI    H,3
  32.     DADD    S
  33.     XCHG
  34.     PUSH    IX
  35.     POP    H
  36.     DCX    H
  37.     DCX    H
  38.     XCHG
  39.     LXI    B,4
  40.     LDDR
  41.     POP    H
  42.     POP    H
  43. ;
  44. ;    IF Y < 0 THEN GOTO 1;
  45.     STMT    D,2
  46.     MOV    H,A
  47.     MOV    L,8(IX)
  48.     MOV    A,L
  49.     CMPI    D,0
  50.     MOV    A,H
  51.     JNC    L159
  52.     STMT    D,3
  53.     CTRL    M,3
  54.     JMP    L151
  55. L159
  56. ;    
  57. ;    CASE Y OF
  58.     STMT    D,4
  59. ;    1: BEGIN
  60.     MOV    H,A
  61.     MOV    L,8(IX)
  62.     MOV    A,L
  63.     CMPI    D,1
  64.     JNZ    L176
  65. L178
  66.     XRA    A
  67.     STMT    D,5
  68. ;        CALC:=X;
  69.     STMT    D,6
  70.     LXI    H,-4
  71.     DADD    S
  72.     SPHL
  73.     XCHG
  74.     PUSH    IX
  75.     POP    H
  76.     LXI    B,9
  77.     DADD    B
  78.     LXI    B,4
  79.     LDIR
  80.     LXI    H,3
  81.     DADD    S
  82.     XCHG
  83.     PUSH    IX
  84.     POP    H
  85.     DCX    H
  86.     DCX    H
  87.     XCHG
  88.     LXI    B,4
  89.     LDDR
  90.     POP    H
  91.     POP    H
  92. ;        GOTO 1;
  93.     STMT    D,7
  94.     CTRL    M,7
  95.     JMP    L151
  96. ;       END;
  97.     STMT    D,8
  98. ;    
  99. ;    0: GOTO 1;
  100.     JMP    L177
  101. L176
  102.     CMPI    D,0
  103.     JNZ    L197
  104. L198
  105.     XRA    A
  106.     STMT    D,9
  107.     CTRL    M,9
  108.     JMP    L151
  109. ;        end; {of case}
  110. L197
  111.     XRA    A
  112. L177
  113. ;
  114. ;IF X = 1.0 THEN
  115.     STMT    D,10
  116.     LXI    H,-4
  117.     DADD    S
  118.     SPHL
  119.     XCHG
  120.     PUSH    IX
  121.     POP    H
  122.     LXI    B,9
  123.     DADD    B
  124.     LXI    B,4
  125.     LDIR
  126.     LXI    H,320
  127.     MOV    D,A
  128.     MOV    E,A
  129.     PUSH    H
  130.     PUSH    D
  131.     EQUL    D,-4
  132. ;        BEGIN
  133.     JNC    L209
  134.     STMT    D,11
  135. ;        CALC:=X*Y;
  136.     STMT    D,12
  137.     LXI    H,-4
  138.     DADD    S
  139.     SPHL
  140.     XCHG
  141.     PUSH    IX
  142.     POP    H
  143.     LXI    B,9
  144.     DADD    B
  145.     LXI    B,4
  146.     LDIR
  147.     MOV    H,A
  148.     MOV    L,8(IX)
  149.     PUSH    H
  150.     CVTF    B
  151.     MULT    D,-4
  152.     LXI    H,3
  153.     DADD    S
  154.     XCHG
  155.     PUSH    IX
  156.     POP    H
  157.     DCX    H
  158.     DCX    H
  159.     XCHG
  160.     LXI    B,4
  161.     LDDR
  162.     POP    H
  163.     POP    H
  164. ;        GOTO 1;
  165.     STMT    D,13
  166.     CTRL    M,13
  167.     JMP    L151
  168. ;        END;
  169.     STMT    D,14
  170. L209
  171. ;
  172. ;IF X = 0.0 THEN
  173.     STMT    D,15
  174.     LXI    H,-4
  175.     DADD    S
  176.     SPHL
  177.     XCHG
  178.     PUSH    IX
  179.     POP    H
  180.     LXI    B,9
  181.     DADD    B
  182.     LXI    B,4
  183.     LDIR
  184.     MOV    H,A
  185.     MOV    L,A
  186.     MOV    D,A
  187.     MOV    E,A
  188.     PUSH    H
  189.     PUSH    D
  190.     EQUL    D,-4
  191. ;        BEGIN
  192.     JNC    L229
  193.     STMT    D,16
  194. ;        CALC:=0.0;
  195.     STMT    D,17
  196.     MOV    H,A
  197.     MOV    L,A
  198.     MOV    D,A
  199.     MOV    E,A
  200.     PUSH    H
  201.     PUSH    D
  202.     LXI    H,3
  203.     DADD    S
  204.     XCHG
  205.     PUSH    IX
  206.     POP    H
  207.     DCX    H
  208.     DCX    H
  209.     XCHG
  210.     LXI    B,4
  211.     LDDR
  212.     POP    H
  213.     POP    H
  214. ;        GOTO 1;
  215.     STMT    D,18
  216.     CTRL    M,18
  217.     JMP    L151
  218. ;        END;
  219.     STMT    D,19
  220. L229
  221. ;
  222. ;
  223. ;
  224. ;IF (Y > 1) AND ( X <> 1.0) THEN 
  225.     STMT    D,20
  226.     MOV    H,A
  227.     MOV    L,8(IX)
  228.     MVI    A,1
  229.     CMP    L
  230.     MOV    A,H
  231.     JNC    L252
  232.     LXI    H,-4
  233.     DADD    S
  234.     SPHL
  235.     XCHG
  236.     PUSH    IX
  237.     POP    H
  238.     LXI    B,9
  239.     DADD    B
  240.     LXI    B,4
  241.     LDIR
  242.     LXI    H,320
  243.     MOV    D,A
  244.     MOV    E,A
  245.     PUSH    H
  246.     PUSH    D
  247.     NEQL    D,-4
  248. ;        for  I:= 1 TO Y DO  CALC:=CALC*X;  
  249.     JNC    L249
  250.     STMT    D,21
  251.     MOV    0(IX),A
  252.     MVI    -1(IX),1
  253.     PUSH    IX
  254.     MOV    H,A
  255.     MOV    L,8(IX)
  256.     XTHL
  257. L274
  258.     MOV    D,M
  259.     DCX    H
  260.     MOV    E,M
  261.     XTHL
  262.     PUSH    H
  263.     GE    D,0
  264.     JNC    L275
  265.     STMT    D,22
  266.     LXI    H,-4
  267.     DADD    S
  268.     SPHL
  269.     XCHG
  270.     PUSH    IX
  271.     POP    H
  272.     LXI    B,-5
  273.     DADD    B
  274.     LXI    B,4
  275.     LDIR
  276.     LXI    H,-4
  277.     DADD    S
  278.     SPHL
  279.     XCHG
  280.     PUSH    IX
  281.     POP    H
  282.     LXI    B,9
  283.     DADD    B
  284.     LXI    B,4
  285.     LDIR
  286.     MULT    D,-4
  287.     LXI    H,3
  288.     DADD    S
  289.     XCHG
  290.     PUSH    IX
  291.     POP    H
  292.     DCX    H
  293.     DCX    H
  294.     XCHG
  295.     LXI    B,4
  296.     LDDR
  297.     POP    H
  298.     POP    H
  299.     CTRL    M,22
  300.     POP    H
  301.     XTHL
  302.     INR    M
  303.     INX    H
  304.     JRNZ    L288
  305.     INR    M
  306.     JV    L289
  307. L288
  308.     JMP    L274
  309. L275
  310.     POP    D
  311. L289
  312.     POP    D
  313. L249
  314. L251    EQU    L249
  315. L252    EQU    L251
  316. ;1:
  317.     STMT    D,23
  318. L151
  319. ;POWER:=CALC;
  320.     STMT    D,24
  321.     LXI    H,-4
  322.     DADD    S
  323.     SPHL
  324.     XCHG
  325.     PUSH    IX
  326.     POP    H
  327.     LXI    B,-5
  328.     DADD    B
  329.     LXI    B,4
  330.     LDIR
  331.     LXI    H,3
  332.     DADD    S
  333.     XCHG
  334.     PUSH    IX
  335.     POP    H
  336.     LXI    B,16
  337.     DADD    B
  338.     XCHG
  339.     LXI    B,4
  340.     LDDR
  341.     POP    H
  342.     POP    H
  343. ;END;
  344.     STMT    D,25
  345.     EXIT    D,5
  346.