2016-03-03 4 views
-1

Есть ли какая-либо конкретная программа в коде сборки оружия, которая приближается к генерации 32-битных двоичных случайных чисел? Мне нужно 1000 тестовых случаев для программы.Есть ли какая-либо конкретная программа в коде сборки оружия, которая приближается к генерации 32-битных двоичных случайных чисел?

+0

Вы должны отредактировали свой старый вопрос, чтобы сделать его менее широк. Это по-прежнему слишком велико, и ответ, вероятно, по-прежнему «такой же, как выход компилятора для нормальной функции rand()». Вы ничего не сказали о производительности или требованиях к качеству. Зачем вам это нужно в asm? Есть ли ограничение по размеру кода? (ответ там, а не на этот вопрос) –

+0

Мне нужно 1000 случайных 32-битных чисел в двух наборах, чтобы я мог реализовать алгоритм перехода от одного числа к другому. –

+0

Комментарий не отвечает ни на один из вопросов, отправленных @PeterCordes. И что значит «приближается»? Если вы выслеживаете (*, например, Google или Википедию) типичный генератор случайных чисел, он «приблизится». Возможно, вам придется немного поработать, чтобы преобразовать его в сборку ARM, если это то, что вам действительно нужно. – lurker

ответ

1

В этой связи представляет собой 32-битный код ARM для (генератора xorshift) ПГСЧ: http://hackipedia.org/Platform/3D0/html,%203DO%20SDK%20Documentation/Type%20A/tktfldr/acbfldr/2acbh.html

Основной алгоритм newbit: = bit33 ПНП bit20, сдвиг влево 33 битное число и положить в newbit внизу; эта операция выполняется для всех необходимых новых битов (т. е. 32 бита). Вся операция может быть закодирована компактно путем максимального использование сдвигового вытянутой руки:

; enter with seed in R0 (32 bits), R1 (1 bit in least significant bit) 
; R2 is used as a temporary register. 
; on exit the new seed is in R0 and R1 as before 
; Note that a seed of 0 will always produce a new seed of 0. 
; All other values produce a maximal length sequence. 
; 
    TST R1, R1, LSR #1      ; top bit into Carry 
    MOVS R2, R0, RRX       ; 33 bit rotate right 
    ADC R1, R1, R1       ; carry into lsb of R1 
    EOR R2, R2, R0, LSL #12     ; (involved!) 
    EOR R0, R2, R2, LSR #20     ; (similarly involved!) 

https://en.wikipedia.org/wiki/Pseudorandom_number_generator

+0

Спасибо, Ральф. Ценю вашу помощь! –