Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Генератор xoshiro128 на Ассемблере

05.07.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Семейство xoshiro (xoroshiro) - это высокоскоростные и очень эффективные алгоритмы генерации псевдослучайных чисел общего назначения с хорошим распределением. Свое название генераторы получили от используемых в них операций XOR/Shift/Rotate. Разные варианты генераторов используют для рабочего буфера разные объемы памяти, а также реализованы как в 64-битной, так и в 32-битной версии. У меня тут будет 32-битный вариант xoshiro128 с периодом 2128.

На всякий случай сразу уточню, что если в тексте встречается термин "случайное число", то имеется в виду "псевдослучайное число". У любого алгоритма генерации все равно есть зависимость и период, пусть даже очень большой, а создавать истинно случайные числа они не в состоянии.

Переходим к программированию. Как можно догадаться из суффикса названия, для работы генератора потребуется 128 бит, то есть 4 DWORD'а.
  1. ;---------------------------------------------
  2. ; Данные для генератора случайных чисел
  3.  
  4. s  rd 4
Дальше выполняется инициализация. В оригинальном алгоритме есть два варианта инициализации - "короткая" и "длинная". Они отличаются только количеством холостых прокруток генератора, соответственно, 264 и 296 раз. Я решил использовать второй вариант.
  1. ;---------------------------------------------
  2. ; Инициализация генератора случайных чисел
  3. ; stdcall long_jump,seed
  4. ;---------------------------------------------
  5. proc long_jump seed:DWORD
  6.         locals
  7.              s0 dd ?
  8.              s1 dd ?
  9.              s2 dd ?
  10.              s3 dd ?
  11.         endl
  12.  
  13.         pusha
  14.  
  15.         ; Начальное "засеивание" генератора
  16.         mov     edi,s
  17.         mov     eax,[seed]
  18.         rol     eax,1
  19.         xor     eax,0x1C580662
  20.         stosd
  21.         rol     eax,3
  22.         add     eax,0x0B6F099F
  23.         stosd
  24.         rol     eax,5
  25.         xor     eax,0xB523952E
  26.         stosd
  27.         rol     eax,7
  28.         sub     eax,0xCCF5A0EF
  29.         stosd
  30.  
  31.         ; Холостая прокрутка генератора для инициализации
  32.         lea     edi,[s0]
  33.         push    edi
  34.         xor     eax,eax
  35.         stosd
  36.         stosd
  37.         stosd
  38.         stosd
  39.  
  40.         xor     ebx,ebx
  41. .loc_for_1:
  42.         xor     ecx,ecx
  43. .loc_for_2:
  44.         mov     eax,[.lj+ebx*4]
  45.         and     eax,1
  46.         shl     eax,cl
  47.         jz      @f
  48.  
  49.         mov     esi,s
  50.         lodsd
  51.         xor     [s0],eax
  52.         lodsd
  53.         xor     [s1],eax
  54.         lodsd
  55.         xor     [s2],eax
  56.         lodsd
  57.         xor     [s3],eax
  58. @@:
  59.         stdcall next
  60.  
  61.         inc     ecx
  62.         cmp     ecx,32
  63.         jb      .loc_for_2
  64.  
  65.         inc     ebx
  66.         cmp     ebx,4
  67.         jb      .loc_for_1
  68.  
  69.         pop     esi
  70.         mov     edi,s
  71.         movsd
  72.         movsd
  73.         movsd
  74.         movsd
  75.  
  76.         popa
  77.         ret
  78.  
  79. .lj:    dd 0xB523952E
  80.         dd 0x0B6F099F
  81.         dd 0xCCF5A0EF
  82.         dd 0x1C580662
  83. endp
Также стоит упомянуть начальное "засеивание" рабочего буфера генератора. В комментариях к оригинальному коду просто сказано, что буфер не должен быть полностью нулевым, а все действия по его заполнению отдаются целиком на откуп программиста. Я добавил свой вариант заполнения, который показался мне рабочим, вы можете заменить его на любой другой. В принципе, достаточно инициализировать ненулевым значением любой из четырех DWORD'ов буфера.

Читать статью целиком »
Просмотров: 205 | Комментариев: 3

Роллы из гречки в беконе

03.07.2021 | Категория: А еще я туда ем! | Автор: ManHunter

Роллы из гречки в беконе

"Дорогая редакция! Ваш рецепт роллов нам очень понравился. Правда, вместо риса у нас была гречка, вместо лосося - тушенка, вместо сушеных водорослей для заворачивания - полоски бекона. Но все равно - получилось вкусно." Как вы поняли из предисловия, сегодня будет рецепт по мотивам анекдота.

Читать статью целиком »
Просмотров: 106 | Комментариев: 1

Shutter Count Viewer 1.9

30.06.2021 | Категория: Мои программы | Автор: ManHunter

Скриншот программы Shutter Count Viewer

Программа Shutter Count Viewer предназначена для проверки зеркальных фотоаппаратов производства Nikon, Pentax, Samsung, Sony и некоторых моделей зеркальных фотоаппаратов Canon перед покупкой или продажей, чтобы узнать реальный пробег камеры. Для этого достаточно сделать снимок в формате JPEG или RAW и открыть фотографию в программе. Если фотоаппарат поддерживает эту функцию, то Shutter Count Viewer сразу же покажет счетчик сделанных кадров, информацию о дате съемки, версии программного обеспечения, производителе и модели камеры, а также комментарии и описания фотографии, если в фотоаппарате можно устанавливать эти параметры. Счетчик кадров отображается не только в числовом виде, но и в процентном соотношении от заявленного производителем ресурса затвора. Это позволяет наглядно оценить активность использования камеры. Но все же помните, что ресурс затвора - это не время до поломки фотоаппарата, а количество кадров, которое камера гарантированно сделает при условии правильной эксплуатации.

Читать статью целиком »
Просмотров: 262785 | Комментариев: 301

Музей Гаража особого назначения ФСО России

27.06.2021 | Категория: Жизнь в оффлайне | Автор: ManHunter

Музей Гаража особого назначения ФСО России

В 2021 году Кремлевский гараж отмечает 100-летний юбилей. К этой дате в павильонах ВДНХ открылся музей Гаража особого назначения - многофункциональный музейно-выставочный комплекс, который станет хранителем истории легендарного подразделения и центром изучения отечественной и мировой автомобильной промышленности. Завеса секретности и сурового романтизма будет приоткрыта в экспозиции, посвященной истории органов государственной охраны России. Основу постоянной экспозиции составляет уникальная коллекция автомобилей Гаража особого назначения и мотоциклов Почетного эскорта. Редчайшие экспонаты, научные исследования и архивные материалы расскажут о становлении, развитии и укреплении Федеральной службы охраны Российской Федерации, занимающей важное место в системе обеспечения государственной безопасности страны.

Читать статью целиком »
Просмотров: 274 | Комментариев: 7

Изменение защищенных и приватных свойств класса

24.06.2021 | Категория: Web-мастеру и не только | Автор: ManHunter

Изменение защищенных и приватных свойств класса

Кто хоть раз пробовал ООП в PHP, знает, что при попытке записать что-то в защищенные или приватные свойства класса, интерпретатор выдаст ошибку. Это хорошо и правильно, приватные и защищенные свойства для того и сделаны именно такими. Но в PHP есть средства, с помощью которых можно обойти это правило и поменять эти свойства извне класса. Сначала позвольте дать вам три совета по использованию этих средств. Во-первых, никогда так не делайте. Во-вторых, никогда так не делайте. Ну и в-третьих, никогда так не делайте. Потому что на практике нет и быть не может ситуаций, когда это может действительно понадобиться, а огрести проблем - как нечего делать. Короче, я вас предупредил.

Читать статью целиком »
Просмотров: 259 | Комментариев: 0

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0096 сек.) / Память: 4.75 Mb
Наверх