home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / PROGRAM / ASM / ALIB30B / RANDOM1.ASM < prev    next >
Assembly Source File  |  1994-12-05  |  1KB  |  58 lines

  1.     page    66,132
  2. ;******************************* RANDOM1.ASM *********************************
  3.  
  4. LIBSEG           segment byte public "LIB"
  5.         assume cs:LIBSEG , ds:nothing
  6.  
  7. ;----------------------------------------------------------------------------
  8. .xlist
  9.     include  mac.inc
  10.     include  common.inc
  11.     extrn    random_seed:far
  12.     extrn    scale_word:far
  13. .list
  14. comment 
  15. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -( RANDOM  )
  16. random_word1 - generate random word value, using method 1
  17. ;
  18. ;  inputs: bx = minimum value of random range
  19. ;          bp = maximum value of random range
  20. ;          
  21. ;  output: ax = random number
  22. ;          all registers are restored except for -ax-
  23. * * * * * * * * * * * * * *
  24. 
  25. seed    dw    -1
  26.  
  27.     public    random_word1
  28. random_word1    proc    far
  29.     apush    dx,cx
  30.     mov    ax,cs:seed
  31.     cmp    ax,-1            ;check if first entry
  32.     jne    do_rand            ; jmp if not first entry
  33. ;
  34. ; initialize the random seed
  35. ;
  36.     call    random_seed
  37.  
  38. do_rand:mov    cx,1255            ;get constant multiplier
  39.     mul    cx
  40.     add    ax,6173            ;add constant adjustment factor
  41.     adc    dx,0
  42.     mov    cx,29282        ;mod value for ranging
  43.     div    cx
  44.     mov    cs:seed,dx        ;store new seed
  45. ;
  46. ; now convert number to desired range
  47. ;
  48.     mov    ax,dx
  49.     call    scale_word
  50.     
  51.     apop    cx,dx
  52.     retf
  53.     
  54. random_word1    endp
  55.  
  56. LIBSEG    ENDS
  57. ;;    end
  58.