edx:eax mod 2^32

Тема в разделе "WASM.BEGINNERS", создана пользователем BaGiE, 17 ноя 2007.

  1. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    какой самый быстрый код, получающий остаток от деления 64-битного числа в edx:eax на 4294967296 (2^32) а то что-то в голову ничего не приходит интересного :)
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    xor edx,edx
     
  3. mathio

    mathio New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2007
    Сообщения:
    110
    При таком условии eax изначально содержит остаток, даже делить не нужно.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    BaGiE
    Не заморачивайся, а просто юзай eax там, где хотел дальше и все. По сути то, что ты ты написал, это значит отбросить все что, выше бита 2^32,т.е не принимать в дальнейшем edx ! ;)
     
  5. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Чето непойму. Какого фигу тогда компилятор (Delphi5) чтобы поделить вставил целую длиннющую процедуру для деления.
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    BaGiE

    А это "приколы нашего городка" :) Я встречался уже с подобным -- и в Дельфи, и в Студии. Почему такое происходит -- без понятия, а разбираться лень.
     
  7. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Для работы с int64 у делфи вообще отдельный набор функций для основных операций. Компилятор просто вставляет их в нужное место, причём даже не инлайнит никогда и оптимизации там соответственно никакой. По-крайней мере так было в Delphi6-7.
     
  8. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Да эта хрень мне нужна была для построения линейного конгруэнтного ПСП - можно заюзать в примитивнейном шифровании для генерации гаммы (Хотя там же написано что метод не обладает криптографической стойкостью, зато быстр, удобен и энтропия у шифртекста нормальная - даже нисколько не упаковывается). В данном случае генерируется последовательность с максимальным периодом 2^32. Еще вопрос. По ссылке написано - "Numerical Recipes in C рекомендует следующие значения: a = 1664525, c = 1013904223, m = 2^32". Какие числа выбрать, чтобы получить максимальный период, но с 64-битными числами (понятно, что m = 2^64).
     
  9. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Код (Text):
    1. format PE GUI 4.0
    2.  
    3. include 'win32a.inc'
    4.  
    5.     invoke GetTickCount
    6.  
    7.     call _next
    8.     ;...
    9.     call _next
    10.  
    11.     invoke wsprintf,__result,__fmt,eax
    12.     invoke MessageBox,0,__result,__null,0
    13.  
    14.     invoke ExitProcess,0
    15.  
    16. _next:
    17.     mov edx,1664525
    18.     mul edx
    19.     add eax,1013904223
    20.     retn
    21.  
    22. __fmt db 'The random number is 0x%08X'
    23. __null db 0
    24. __result db $-__fmt+3 dup (?)
    25.  
    26. data import
    27.  
    28.  library kernel32,'KERNEL32.DLL',\
    29.      user32,'USER32.DLL'
    30.  
    31.  import kernel32,\
    32.     GetTickCount,'GetTickCount',\
    33.     ExitProcess,'ExitProcess'
    34.  
    35.  import user32,\
    36.     wsprintf,'wsprintfA',\
    37.     MessageBox,'MessageBoxA'
    38.  
    39. end data
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
     
  11. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Спасибо) А еще слышал про какой-то ПСП. Называется как то типа Xorshift - 128 или фиг знает. Нагуглил сорцы, но нифига не понял как работает и в том числе сорцы не работали. Может кто поможет?