Advertisement
okrlbok

random

Mar 27th, 2024 (edited)
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; x[i + 1] = (A * x[i] + B) mod N - pseudo-random numbers formula
  2. ; N depends on platform (for example, 32-bit -> 2^32)
  3.  
  4.         org 100h
  5.  
  6. EntryPoint:
  7.         call    Random.Initialize
  8. .GenerateLoop:
  9.         call    Random.Get
  10.  
  11.         push    ax
  12.         call    PrintHex
  13.  
  14.         mov     ax, $0C08
  15.         int     21h
  16.         test    al, al
  17.         jnz     @F
  18.         mov     ah, $08
  19.         int     21h
  20. @@:
  21.         jmp     .GenerateLoop
  22.         ret
  23.  
  24. ; Registers:
  25. ;   Overwrites AX, CX, DX.
  26. ;
  27. PrintHex:
  28.         push    bp
  29.         mov     bp, sp
  30.         push    bx
  31.  
  32.         mov     bx, [bp + 4]
  33.         mov     cx, 4
  34. .PrintLoop:
  35.         rol     bx, 4
  36.         mov     ax, bx
  37.         and     ax, 0000'0000_0000'1111b
  38.  
  39.         cmp     al, $0A
  40.         sbb     al, $69
  41.         das
  42.  
  43.         mov     dl, al
  44.         mov     ah, $02
  45.         int     21h
  46.         loop    .PrintLoop
  47.  
  48.         pop     bx
  49.         pop     bp
  50.         ret     2
  51.  
  52. Random.Initialize:
  53.         mov     ah, 02Ch
  54.         int     21h
  55.         mov     [Random.wPrev], dx
  56.         ret
  57.  
  58. Random.Get:
  59.         mov     ax, [Random.wPrev]
  60.         rol     ax, 7
  61.         adc     ax, 23
  62.         mov     [Random.wPrev], ax
  63.         ret
  64.  
  65. Random.wPrev    dw      ?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement