Как сгенерировать случайные числа, используя код сборки в диапазоне 1--4?Генерация случайных чисел
ответ
Не знаю, какую систему вы пытаетесь сделать это, так вот общий ответ, что не следует применять, независимо от того, где:
query the system time, using whatever syscall/library call/api you have available
and out the top bits, leaving only the lowest 2
tadaa. рядовые числа.
, если вы хотите, чтобы они более случайное использование возможно сделать это вместо того, чтобы:
query the system time
and out the top bits leaving only the lowest 4 store in "register1"
Loop:
do something unimportant
do something else unimportant
etc.
count down register1
jump to EndLoop if register1==0
jump Loop
EndLoop:
query the system time
and out the top bits, leaving just the lower two
Ура!
/B2S
EDIT: К сожалению, был в отпуске вне досягаемости Интернета. (да, поистине удивительно, что такие места все еще существуют). Я не особенно знаком ни с EyeBot, ни с 68-килограммовым ассом. Поэтому я не знаю, как syscall считывать часы или время (либо будет делать). Так что смотрите, что один вверх, остальная часть кода должна быть что-то вроде
//Assuming you have called the syscall to get the system time/clock, and stored it in D0
AND #%01111, D0
loop:
// It really doesn't matter,
// What Instructions you put here,
// just put 4 or 5 instructions that don't
// mess with D0, eg. AND, MOVE, ADD, AND, OR
SUB #1, D0
TST D0 // TST instruction is probably not needed
BEQ EndLoop
JMP loop
EndLoop:
// Get the system time/clock again (Next instruction assumes clock is in D0)
AND #%011, D0
D0 должны теперь содержать ваш случайное число
Какой будет код? петля: MOVE.L D0 MOVE.L D0% 4, D1 ADD.L # 1, D1 CMP.L D1 <4 MOVE.L D1, D2 JMP loop ........... ..... ?? верный? – 2010-03-31 04:28:00
1 + (rand()% 4), в общем случае (где rand() - приличный генератор случайных чисел).
call [_rand]
mod eax, 4 ; or 'and eax, 3' - same thing
inc eax
Вы могли бы пойти читать на скажем Mersenne Twister, о том, как реализовать RAND(), но это довольно сложный.
Вы можете сделать собственный квази генератор случайных чисел. Если у вас есть доступ к RTC (счетчик реального времени) или метка времени процессора, то вы можете сделать рутин относительно простым.
Очень простой пример:
Int LastIteration;
Int IterationCounter;
...
++IterationCounter;
LastIteration = CpuTimeStamp + IterationCounter;
RndNum = LastIteration & 3 + 1;
Этот квази-генератор RND достаточно непредсказуемо, если вам не нужно много сгенерированных чисел в секунду.
Это простой метод, чтобы получить несколько «случайное» число (это не совсем случайные, хотя), если API не предоставляет один
- переменного времени = получить системное время
- переменного остаток =% время 4
- переменная randomNumber = время +-
вы можете использовать это с любым языком (при условии, что вы можете получить доступ к времени).
Для расширенного генератора случайных чисел в 68K вы можете видеть this link.
это будет отличаться для каждой архитектуры, на которую вы хотите настроить таргетинг. Вы используете ARM? x86? –
Я использую для EyeBot и нуждаюсь в кодировании для дальнейшей работы – 2010-03-31 04:35:44
EyeBot, по-видимому, использует процессор 68000 - я добавил соответствующий тег, чтобы помочь вам получить ответ на конкретный процессор. –