Помогите разобраться с api функцией time ()!

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 22 май 2010.

  1. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    amvoz
    Так и понимай, что не все, что "валяется" в system32 является частью WinAPI ;)
    И грузить нехилую MSVC CRT-либу ради одной тривиальной функции time - это э-э.., чересчур круто, т.к. вполне можно обойтись и GetSystemTimeAsFileTime с элементарным преобразованием к Unix-time или через ntdll.RtlTimeToSecondsSince1970 или ручками (задаешь dq-константу начала отсчета unix-времени в формате FILETIME, берешь разность и делишь ее на 10 000 000)
     
  2. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Ну я просто по глупости своей думал что все api-функции являются частью WinAPI

    А вообще мне надо было разобраться с тремя функцциям, а time- одна из них, думал,разберусь с ней, разберусь и с остальными. Вот они:
    Код (Text):
    1. #include <stdlib.h>
    2. #include <time.h>
    3.  
    4. int main ()
    5.  srand (time(0));
    6.   rand();
    7.  return 0;
    8. }
    ТО есть видите, получается я подключаю либу не ради одной функции, а ради трёх уже. Это генератор случайных чисел у меня, надо было его на асме сделать.

    Аналогов на асме не нашёл. Вот что нашёл в инклудах:
    DeInitRand PROTO :lol: WORD,:lol: WORD
    InitRand PROTO :lol: WORD,:lol: WORD

    А, например, о функции InitRand в трижды хвалёном msdn всего два упоминания, да и то не в официальной документации, а на каком-то левом форуме.
    http://social.msdn.microsoft.com/Search/ru-RU?query=InitRand&ac=8

    И чё мне делать? Ссылки о случайных числах на асме оставляли желать много лучшего. Вот и пришлось использовать плохие сишные функции. Не всё в жизни хорошо, иногда и плохо бывает.
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    :lol:
    Не трех, а одной - rand, т.к. srand(time()) - это простое присвоение статической переменной dword seed значения time(). А для чего тут время именнно в unix-формате совершенно не ясно, т.к. с таким же успехом м.б. юзать апишные GetTickCount, QueryPerformanceCounter или команду rdtsc. А простые конгруэнтные rand() это ваще элементарщина в стиле
    seed = (seed*a+c) mod m;
    и соотв-но разные их реализации отличаются выбором констант мультипликатора (a), инкремента (c) и модуля (m - обычно = степени 2 -> взятие старших разрядов)
    см. лголист, Функция C++ rand(), нужен аналог на асм, дельфийский _Random
    Да и в масме есть готовые функции nseed и nrandom, и в ntdll - продвинутые RtlRandom и RtlRandomEx