home *** CD-ROM | disk | FTP | other *** search
/ Dr. CD ROM (Annual Premium Edition) / premium.zip / premium / DOSGRAPH / MASWED.ZIP / MANDEL.ASM < prev    next >
Assembly Source File  |  1992-07-15  |  3KB  |  92 lines

  1. ;MANDEL.ASM
  2. ;Assemblerrutin för max It% iterationer i mandelbrotprogrammet
  3. ;lim är gränsen (lim=4) där iterationen skall avbrytas
  4. ;call mandel (lim,It%,Recon,Imcon)
  5. .387
  6. lim equ 18
  7. It% equ 14
  8. Recon   equ 10
  9. Imcon   equ  6
  10.  
  11. code segment
  12.     assume  cs:code
  13.  
  14.     push    bp          ;spara stackpekaren
  15.     mov bp,sp           ;stackpekaren till bp
  16.     push    es
  17.     les di,[bp+It%]     ;max iterationer It% till cx,
  18.     mov cx,es:[di]      ;som räknas ned med "loop"
  19.     mov bx,cx           ;kopiera It% till dx
  20.     finit               ;initialisera coprocessorn!
  21.     les di,[bp+lim]
  22.     fld qword ptr es:[di]   ;lim till tos, push
  23.     les di,[bp+Recon]
  24.     fld qword ptr es:[di]   ;Recon till tos, push
  25.     les di,[bp+Imcon]
  26.     fld qword ptr es:[di]   ;Imcon till tos, push
  27.     fld st(1)               ;Rez=Recon till tos, push
  28.     fld st(1)               ;Imz=Imcon till tos, push
  29. next:   fst st(5)           ;Imz till reg 5
  30. ;1
  31.     fadd    st,st           ;2*Imz
  32.     fmul    st,st(1)        ;2*Imz*Rez
  33.     fadd    st,st(2)        ;Imz'=2*Imz*Rez+Imcon
  34.     fxch    st(5)           ;Imz' till reg 5,Imz till tos
  35.     fmul    st,st           ;II=Imz*Imz
  36.     fxch    st(1)           ;II till reg 1, Rez till tos
  37.     fmul    st,st           ;RR=Rez*Rez
  38.     fsubrp  st(1),st        ;RR-II
  39.     fadd    st,st(2)        ;Rez'=RR-II+Recon
  40.     fld st(4)               ;Imz' till tos
  41. ;2
  42.     fadd    st,st           ;2*Imz
  43.     fmul    st,st(1)        ;2*Imz*Rez
  44.     fadd    st,st(2)        ;Imz'=2*Imz*Rez+Imcon
  45.     fxch    st(5)           ;Imz' till reg 5,Imz till tos
  46.     fmul    st,st           ;II=Imz*Imz
  47.     fxch    st(1)           ;II till reg 1, Rez till tos
  48.     fmul    st,st           ;RR=Rez*Rez
  49.     fsubrp  st(1),st        ;RR-II
  50.     fadd    st,st(2)        ;Rez'=RR-II+Recon
  51.     fld st(4)               ;Imz' till tos
  52. ;3
  53.     fadd    st,st           ;2*Imz
  54.     fmul    st,st(1)        ;2*Imz*Rez
  55.     fadd    st,st(2)        ;Imz'=2*Imz*Rez+Imcon
  56.     fxch    st(5)           ;Imz' till reg 5,Imz till tos
  57.     fmul    st,st           ;II=Imz*Imz
  58.     fxch    st(1)           ;II till reg 1, Rez till tos
  59.     fmul    st,st           ;RR=Rez*Rez
  60.     fsubrp  st(1),st        ;RR-II
  61.     fadd    st,st(2)        ;Rez'=RR-II+Recon
  62.     fld st(4)               ;Imz' till tos
  63. ;4
  64.     fadd    st,st           ;2*Imz
  65.     fmul    st,st(1)        ;2*Imz*Rez
  66.     fadd    st,st(2)        ;Imz'=2*Imz*Rez+Imcon
  67.     fxch    st(5)           ;Imz' till reg 5,Imz till tos
  68.     fmul    st,st           ;II=Imz*Imz
  69.     fld st(1)               ;Rez till tos, push
  70.     fmul    st,st           ;RR=Rez*Rez
  71.     fst st(2)               ;RR till reg 2
  72.     fsub    st,st(1)        ;RR-II
  73.     fadd    st,st(4)        ;Rez'=RR-II+Recon
  74.     fxch    st(2)           ;Rez' till st(4), RR till tos
  75.     faddp   st(1),st        ;sum=II+RR, pop
  76.     fld st(4)               ;lim till tos
  77.     fcompp                  ;lim-sum<0, sign flag=1,pop,pop
  78.     fstsw   ax              ;sw till ax
  79.     sahf                    ;ah till flaggregistern
  80.     jb  exit                ;jump if < 0
  81.     fld st(4)               ;Imz' till tos, stacken återst.
  82.     loop    next
  83. exit:   mov ax,bx           ;It% till ax
  84.     sub ax,cx               ;antal iterationer som gjorts
  85.     les di,[bp+It%]
  86.     mov es:[di],ax          ;It% innehåller nu antal iter.
  87.     pop es
  88.     finit                   ;Initialisera coprocessorn!!
  89.     pop bp
  90. code ends
  91. end
  92.