случайные числа

Тема в разделе "WASM.BEGINNERS", создана пользователем NaZGuL, 11 июл 2005.

  1. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    Может кому-то это покажется глупо, но всеже...

    Как сделать генератор случайных чисел, чтобы при каждом запуске программа выдавала одну и ту-же последовательность?
     
  2. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    Инициировать генератор одним и тем же числом :)
     
  3. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    так это и есть генератор псевдослучайных чисел, он генерирует числа по закону, начало зависит соответственно от начального значения (seed).


    Код (Text):
    1.  
    2. seed dd ?
    3. ...
    4. ;---
    5. rnd proc base:DWORD
    6. psh ecx,edx
    7.   mov eax, [seed]
    8.   xor edx,edx
    9.   mov ecx, 127773
    10.   div ecx
    11.  
    12.   obmen_reg eax, edx
    13.   psh edx
    14.   mov ecx, 16807
    15.   mul ecx
    16.   po edx
    17.  
    18.   obmen_reg eax, edx
    19.   psh edx
    20.   mov ecx, 2836
    21.   mul ecx
    22.   po edx
    23.                
    24.   sub edx, eax
    25.   mov eax, edx    
    26.  
    27.   mov [seed], eax
    28.   mov ecx, base
    29.   inc ecx
    30.   xor edx,edx
    31.   div ecx
    32.   mov eax, edx
    33. po ecx,edx
    34. ret
    35. rnd endp
    36.  
    37. ;---
    38. init_rnd proc
    39. pushad
    40.   db 0fh,31h
    41.   shr eax, 2
    42.   add eax, 1
    43.   mov [seed],eax
    44. popad
    45. ret
    46. init_rnd endp  
    47.  
    48.  
     
  4. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    Я тут покопался в одной очень умной книге и нашел там вот такую вещь:



    seed db 2Fh



    proc Random:

    mov ax,word ptr seed

    mov cx,8

    newbit: mov bx,ax

    and bx,002dh

    xor bh,bl

    clc

    jpe shift

    stc

    shift: rcr ax,1

    loop newbit

    mov word ptr seed, ax

    mov ah,0

    ret



    Может, кто объяснит, как это должно работать, а то на FASM’e это чудо все время выдает одно число.
     
  5. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Должно быть "seed dw 2Fh"



    з.ы. оказывается фасм понимает уже масмовский синтаксис и "mov word ptr seed, ax" хватает как "mov word [seed],ax"