Сделать рандомайзер в макросах?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Asterix, 18 сен 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Есть идея использовать секунды из переменной @Time, но боюсь

    в 1 секунду уложится компиляция всего исходника - как быть?

    Или это невозможно?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Так можно наверное сделать супер-пупер цикл (затормаживать компиляцию) и в нём периодически брать эту переменную , потом можно ещё ксорить с другой такой-же динамически изменяющейся переменной (ещё часы, минуты можно использовать) и повторять так много раз . Если компилиться будет не слишком часто , то должно получаться доволи рандомное значение .



    На боард.фасм видел макрос XOR , он может пригодиться .
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > потом можно ещё ксорить с другой такой-же динамически изменяющейся переменной



    Какой? Где ее взять то?



    > ещё часы, минуты можно использовать



    Не, вот если б можно было миллисекунды заюзать :derisive:
     
  4. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    представляю компиляцию, на пару часов :)



    а вообще, конечно, чуть менее удобно, но

    можно сделать по типу search&replace,

    т.е. написать внешний парсер исходника,

    который будет вставлять перед самой компиляцией

    рандомные значения...
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Вот ещё вариант, с использованием FASM.

    Каждый вызов макроса random меняет значение __RND__


    Код (Text):
    1. include 'ext.fi'
    2.  
    3.  
    4. __RND__  = 0
    5. __SEED__ = %t
    6.  
    7. macro   random
    8. {
    9.         __SEED__ = (__SEED__ mod 127773 * 16807) - (__SEED__ / 127773 * 2836)
    10.         __RND__  = __SEED__ mod 0xffffffff ; размерность = DWORD
    11. }
    12.  
    13.  
    14. repeat 50
    15.        random
    16.        DISPLAY <__RND__ @HEX  @n
    17. end repeat
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    S_T_A_S_

    Хорошая идея, но только мне на выходе желательно получить рандомное число из диапазона 0..20(дес.)
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Значит нужно исправить макрос:
    Код (Text):
    1.  
    2.         __RND__  = __SEED__ mod 21