Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2008, 16:06   #1
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию Random на MASM32

Объясните пожалуйста новичку принцип работы random_а. У меня есть
такой кусок кода, он вроде работает, но я не очень понимаю принцип.
Вообще я когда-то очень давно содрал его с какого-то примера и пользовался. А сейчас чего-то какие-то подозрения, а random ли это вообще.

Код:
.data
nrandom_seed	dd 12345678

.code
nseed 	proc uses ebx edi esi, \
	TheSeed:DWORD
	mov	eax, TheSeed
	mov	nrandom_seed, eax
	ret
nseed 	endp

nrandom	PROC uses ebx edi esi, \
	base:DWORD
	
	mov	eax, nrandom_seed
	xor	edx, edx
	mov	ecx, 127773
	div	ecx
	mov	ecx, eax
	mov	eax, 16807
	mul	edx
	mov	edx, ecx
	mov	ecx, eax
	mov	eax, 2836
	mul	edx
	sub	ecx, eax
	xor	edx, edx
	mov	eax, ecx
	mov	nrandom_seed, ecx
	div	base
	mov	eax, edx
	ret
nrandom ENDP
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 01.05.2008, 16:42   #2
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

Это запутанная функция, но не рандом.
Попробуйте позапускать программу несколько раз и посмотрите на её реакцию. 100% всё будет повторяться.

Принцип действия рандома: нужно прицепиться к какой-нибудь случайной величине, и от неё плясать. Самая распространённая такая величина - время. Но время легко предсказать.

На компьютере можно получить только псевдослучайные числа, абсолютно случайных он дать не может, т.к. является цифровым устройством.
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 01.05.2008, 16:57   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

А как можно проверить random или не_random (я в смысле алгоритма)
Просто позапускав программу я повторов не заметил

Это пятнашки на этом "random_e"
Вложения
Тип файла: rar 15_kiMASM.rar (4.4 Кб, 39 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 01.05.2008, 17:24   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Ну конечно-же, слона то я и не заметил....

Код:
invoke	GetSystemTime, offset sys_time
xor	eax, eax	
mov	ax, [sys_time.wMilliseconds]
xor	edx, edx	
mov	dx, [sys_time.wSecond]
shl	edx, 16
or	eax, edx
invoke	nseed, eax
Vedrus- Спасибо !!!
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 02.05.2008, 14:09   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Vedrus Посмотреть сообщение
Принцип действия рандома: нужно прицепиться к какой-нибудь случайной величине, и от неё плясать. Самая распространённая такая величина - время.
за такую величину можно брать значение полученное от функции GetTickCount или значение полученное от команды rdtsc.
rpy3uH вне форума Ответить с цитированием
Старый 02.05.2008, 15:29   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
или значение полученное от команды rdtsc
А если я работаю не на нулевом уровне привелегий, как мне установить бит TSD ???

При компиляции -
Assembling: C:\main_assembler\15_ki_masm\15_kiM ASM.asm
C:\main_assembler\15_ki_masm\15_kiM ASM.asm(228) :
error A2085: instruction or register not accepted in current CPU mode

- это на команде rdtsc.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 02.05.2008, 16:00   #7
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
А если я работаю не на нулевом уровне привелегий, как мне установить бит TSD ???
Всё, понял - компилить для процессора не ниже .586
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно отлаживать в masm32? Minimus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 12.08.2008 10:54
masm32 v9. не линкует программу Alcash Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 23.06.2008 09:57
DirectX на masm32 Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 10.03.2008 23:05
обновление в блоге - MASM32 и DELPHI - битва за размер… Pblog Обсуждение статей 0 19.09.2007 14:40