home *** CD-ROM | disk | FTP | other *** search
/ PC Underground / UNDERGROUND.ISO / math / root.asm < prev    next >
Assembly Source File  |  1995-07-28  |  1KB  |  55 lines

  1. .286                ;enable 286 commands at least
  2. e equ db 66h                    ;operand size prefix (32 bit commands)
  3. w equ word ptr
  4.  
  5. code segment public
  6. assume cs:code
  7. public root
  8. public rootfct
  9.                                 ;radicand value in dx:ax
  10. root proc pascal                ;result in ax (function)
  11. e                ;computer with 32 bits
  12.     xor si,si        ;clear intermediate result (in esi)
  13.   db 66h,0fh,0ach,0d3h,10h    ;shrd ebx,edx,16d - dx to ebx (upper 16 bits)
  14.     mov bx,ax        ;ax to ebx (down) - dx:ax now in ebx
  15. e
  16.   xor dx,dx            ;clear edx
  17. e
  18.     mov cx,bx        ;store initial value in ecx
  19. e
  20.   mov ax,bx            ;load eax also
  21.  
  22. iterat:
  23. e
  24.   idiv bx                       ;divide by Xn
  25. e
  26.     xor dx,dx        ;remainder unimportant
  27. e
  28.     add ax,bx        ;add Xn
  29. e
  30.     shr ax,1        ;divide by 2
  31. e
  32.     sub si,ax               ;difference to previous result
  33. e
  34.     cmp si,1                ;less than equal to 1
  35.   jbe finished                  ;then finished
  36. e
  37.     mov si,ax               ;store result as previous
  38. e
  39.   mov bx,ax                     ;record as Xn
  40. e
  41.     mov ax,cx               ;reload initial value for division
  42.   jmp iterat                    ;and go to beginning of loop
  43. finished:
  44.   ret                           ;result now in eax
  45. root endp
  46.  
  47. rootfct proc pascal a:dword    ;translates procedure to Pascal function
  48.     mov ax,word ptr a       ;write parameters to register
  49.   mov dx,word ptr a+2
  50.   call root                     ;and extract root
  51.     ret
  52. rootfct endp
  53. code ends
  54. end
  55.