· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Случайный выбор из двух однобайтных чисел.

Посл.отвђт Сообщенiе


Дата: Окт 30, 2004 02:38:59 · Поправил: Asterix

Subj

Интересует самый короткий вариант.


Дата: Окт 30, 2004 05:21:47 · Поправил: SolidCode

Это достаточно быстрый и короткий вариант?
Многое зависит от того, где эти числа находятся. В данном случае я предполагаю, что они в байтовом массиве.

.data
num1 db 1
num2 db 2

.code
rdtsc
and eax,01h
add eax,offset num1
movsx eax,byte ptr [eax]

поправить здесь можно лишь так:
rdtsc
xor al,ah
and eax,01h
movsx eax,byte ptr [eax+offset num1]


Дата: Окт 30, 2004 05:28:01 · Поправил: Foamplast

; code

randomize: 

 Push st
 Call [GetLocalTime]
 
 Mov  Eax, [st.wSecond]
 Shl  Eax, 16
 Add  Eax, [st.wMilliseconds]
 Mov  [seed], Eax
 Ret

rnd:

 Mov  Eax, [seed]
 Mov  Ecx, 69621
 Mul  Ecx
 Mov  Ecx, 0x7fffffff
 Div  Ecx
 Mov  [seed], Edx
 Ret


choice:

 Call rnd
 
 Mov  Edx, [seed]
 And  Edx, 1
 Mov  Eax, [numbers + Edx]
 Ret
 
; bss

seed rd 1

numbers:
  rd 1
  rd 2

 SYSTEMTIME st

Вызываешь один раз randomize, а затем choice сколько влезет.

P.S. Можно первые пять команд из randomize заменить на rdtsc, как в варианте выше. Кстати, про вариант выше. Если выбор пероидический, то при определённой частоте выбора случайность будет утеряна (чисто теоретически).


Дата: Окт 30, 2004 06:58:04 · Поправил: Asterix

Я предполагал передавать числа в ah, al и возвращать там же. Желательно вообще обойтись без операций с памятью.
Нужно что-то типа
rol ax, cl
вот только я торможу как заставить 5 младших бит cl рандомно приходить такими чтоб сдвиг получался кратным 8


Дата: Окт 30, 2004 07:12:02 · Поправил: Black_mirror

bh,bl - числа
результат выбора в bl
rdtsc
lea ecx,[eax*8]
ror bx,cl


Дата: Окт 30, 2004 16:14:50

bh,bl - числа
результат выбора в bl

rdtsc
shr eax,1
jc @f
mov bl,bh
@@:
9 байт, против 13 у Black_mirror
но выполняется медленнее


Дата: Окт 31, 2004 05:29:06

Тогда можно 8 байт:

dec eax
jpe @f


Дата: Окт 31, 2004 21:04:05

А если числа в регистрах EBX,EDX, по можно исп
rdtsc
dec eax
cmovpe ebx,edx
Результат в EBX, но работает быстрее предыдущих вариантов


Дата: Окт 31, 2004 22:44:17

Вобщем рандомизатор что-то получился не очень, вот исходник - может кто хочет поэкспериментировать и предложить лучший.

http://cracklab.ru/f/files/1941166798__KeyGen.rar


Дата: Ноя 1, 2004 23:38:34

Вот блин, глупость написал, а внимания никто не обратил. rdtsc записывает результат в пару регистров EDX:EAХ. Короче надо использовать пару EBX,ECX в коде.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.062