Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/2256: Рейтинг темы: голосов - 2256, средняя оценка - 4.63
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16381 / 7693 / 1080
Регистрация: 11.11.2010
Сообщений: 13,781
15.11.2013, 04:43  [ТС]
ГЛАВА 12
КОМАНДЫ СДВИГА
(часть 3/3)


Генерация псевдослучайных чисел
Одним из наиболее полезных приложений микропроцессоров является применение их для моделирования реальных процессов и явлений окружающего нас мира. С помощью компьютера можно успешно моделировать такие процессы явления, как движение потока нефти или газа в трубопроводах, взлет и посадка самолетов, распределение потока работ в цифровой вычислительной системе, движение графического изображения в играх, и многое другое. Многие из этих моделей становятся тем ближе к своим реальным прототипам, чем больше содержат случайных и заранее неопределяемых элементов.
Псевдослучайные числовые последовательности могут использоваться для шифровки данных и сообщений, поскольку ключ для их дешифровки на приемной стороне строится с помощью идентичного генератора псевдослучайной числовой последовательности. Эти последовательности также широко используются в кодах с обнаружением и исправлением ошибок, поскольку они позволяют формировать такие блоки данных, в которых правильные сообщения оказываются разделенными большим расстоянием Хемминга (оно измеряется числом ошибочных битов). Благодаря хорошим автокорреляционным свойствам эти последовательности используются для помехозащищенных радарных систем, в которых ответный сигнал сравнивается с переданной строкой.
Одним из приемов, используемых при построении моделей, которые имитируют события, происходящие через случайные интервалы времени, является генерация с помощью микропроцессора последовательностей псевдослучайных чисел. Такие последовательности, заданные надлежащим образом, могут храниться в памяти в виде таблиц. Однако, часто желательно чтобы микропроцессор сам мог генерировать случайные величины, а не использовать заготовленные таблицы.
Если известны алгоритм и исходные величины, микропроцессор может генерировать последовательность случайных чисел. И хотя они не являются действительно случайными, многие их характеристики совпадают с характеристиками действительно случайных последовательностей. По этой причине генерируемые последовательности являются псевдослучайными. Особенно наглядно это проявляется в больших последовательностях псевдослучайных чисел, в которых практически невозможно предсказать каждое последующее число.
Одним из широко используемых методов генерации псевдослучайных чисел является метод последовательного умножения. Его алгоритм состоит из следующих шагов:
  1. Выбирается какое-нибудь значение X. Оно называется начальным значением и является первым числом генерируемой псевдослучайной последовательности.
  2. Число X умножается на постоянный множитель N. В результате получается число P.
  3. Число P делится на константу M, называемую модулем. Остаток от деления образует новое значение величины X и является следующим числом псевдослучайной последовательности.
  4. Шаги 2 и 3 повторяются.
Поскольку генерируемые псевдослучайные числа являются остатками от деления P/M, то значение модуля M определяет максимально возможную длину последовательности. Так, если M=216, то переменная X может принимать 216 или 65536 значений. Такой диапазон последовательности вполне достаточен для большинства применений. Если вычисления ограничиваются 16-битовыми числами, то для достижения максимально возможной независимости соседних членов последовательности величина множителя N не должна превосходить квадратный корень из модуля M. Для того чтобы закон распределения чисел был более или менее постоянен на протяжении всей последовательности, последние три бита сомножителя X должны содержать 011 или 101. Начальное значение для процедуры можно взять из значения секунд и сотых долей секунд внутреннего таймера системы или ASCII или SCAN-кода последнего введенного с клавиатуры символа (желательно проследить что бы в начальное значение не попал 0).
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;читаем значение сотых долей секунд в таймере для
;начального значения последовательности случайных
;чисел. В регистр AH номер функции получения времени
AGAIN: MOV AH,2Ch
INT 21h ;получаем время
MOV AX,DX ;берем секунды из DH и сотые доли секунды из DL
CMP AX,0
JE AGAIN
;генерация 200 псевдослучайных чисел
MOV CX,200
RANDOM: CALL PSEUDO_RANDOM
LOOP RANDOM
· · ·
PSEUDO_RANDOM PROC NEAR
PUSH DX
MOV BX,261
MUL BX
POP DX
RET
Псевдослучайные последовательности,
образованные при помощи циклического сдвига
Еще одним из достаточно простых способов образования псевдослучайной последовательности чисел является комбинирование операций циклического сдвига, операции «логического И» (AND) для выделения одиночных разрядов и «операции исключающего ИЛИ» (XOR).
Пусть командами RCR или RCL сдвигается число, имеющее размер https://www.cyberforum.ru/cgi-bin/latex.cgi?m бит. Результат операции XOR между https://www.cyberforum.ru/cgi-bin/latex.cgi?n-м и последним (https://www.cyberforum.ru/cgi-bin/latex.cgi?m-м) разрядом помещается во флаг переноса и оттуда попадает в 1-й разряд. Такая схема проходит совокупность состояний, которая определяется комбинациями битов в регистре после каждого сдвига и эта последовательность повторится через каждые K чисел, то есть является циклической с периодом K.
Число возможных состояний m-разрядного регистра составляет https://www.cyberforum.ru/cgi-bin/latex.cgi?K=2^m, то есть равно числу двоичных комбинаций https://www.cyberforum.ru/cgi-bin/latex.cgi?m бит. Однако состояние, когда в регистре содержатся все 0, является для данной схемы «тупиковым», поскольку операция XOR будет формировать только нули. Поэтому максимальная длина последовательности, которую можно сформировать с помощью данной схемы, равна https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{m}-1. Получить последовательности максимальной длины можно лишь в том случае, если https://www.cyberforum.ru/cgi-bin/latex.cgi?m и https://www.cyberforum.ru/cgi-bin/latex.cgi?n выбраны правильно и результирующая последовательность битов является псевдослучайной. (Критерием для определения максимальной длины служит неприводимость полинома https://www.cyberforum.ru/cgi-bin/latex.cgi?1+x^{m}+x^{n} и его первичность на поле Галуа.) В качестве примера рассмотрим 4-разрядный регистр сдвига с обратной связью. В таблице перечислены генерируемые псевдослучайные числа, начиная с 1111b (15) (с тем же успехом можно выбрать любое начальное число, за исключением 0000).
1111 (15) 1000 (08) 1100 (12) 1010 (10)
0111 (07) 0100 (04) 0110 (06) 1101 (13)
0011 (03) 0010 (02) 1011 (11) 1110 (14)
0001 (01) 1001 (09) 0101 (05) 
Регистры сдвига максимальной длины можно строить, используя и более двух точек для подключения обратной связи через операцию «Исключающее ИЛИ». В этом случае по модулю 2 суммируются несколько битов. При некоторых m для построения регистра максимальной длины требуется более двух точек подключения обратной связи. В таблице приводятся все значения m, вплоть до 33, при которых для построения регистра максимальной длины достаточно двух точек подключения обратной связи, то есть обратная связь берется с n-го и m-го (последнего) разряда. Значения n и циклической длины изменяются числом периодов. Иногда n может иметь более одного значения; в любом случае вместо n можно взять m–n. Для 4-разрядного регистра можно было бы использовать точки подключения обратной связи при https://www.cyberforum.ru/cgi-bin/latex.cgi?n=1 и https://www.cyberforum.ru/cgi-bin/latex.cgi?m=4.
m n Длина m n Длина
3 2 7 18 11 262143
4 3 15 20 17 1048575
5 3 31 21 19 2097151
6 5 63 22 21 4194303
7 6 127 23 18 8388607
9 5 511 25 22 33554431
10 7 1023 28 25 268435455
11 9 2047 29 27 536870911
15 14 32767 31 28 2147483647
17 14 131071 33 20 8589934591
Длина регистра сдвига обычно выбирается кратной 8. В этом случае требуется более двух точек подключения обратной связи.
m
Точки подключения
обратной связи
Длина
8 4, 5, 6 255
16 4, 13, 15 65535
24 17, 22, 23 16777215
Свойства последовательностей максимальной длины
для шифровальщиков и любителей взламывать чужие шифры
  1. В одном полном цикле (K тактов) число «единиц» на одну превышает число «нулей». Дополнительная единица возникает благодаря исключению нулевого состояния. При значениях длины регистра, которые обычно используются на практике, дополнительная единица не может оказать какого-либо влияния: 17-разрядный регистр (16-разрядов + флаг переноса) вырабатывает за один период 65536 единиц и 65535 нулей.
    1 1111 (15) 5 1000 (08) 9 1100 (12) 13 1010 (10)
    2 0111 (07) 6 0100 (04) 10 0110 (06) 14 1101 (13)
    3 0011 (03) 7 0010 (02) 11 1011 (11) 15 1110 (14)
    4 0001 (01) 8 1001 (09) 12 0101 (05)  
  2. В каждом цикле (K тактов) половину всех единиц составляют «одиночные» (5, 6, 7, 8, 11, 12, 13, 14), четвертую часть – двойные (то есть две следующие подряд) (3, 9, 10, 11), восьмую часть – тройные (2, 15) и т.д. То же самое относится и к последовательно идущим нулям. Это говорит о том, что вероятность появления начала и конца единичного состояния не зависит от результата последнего переброса и, следовательно, вероятность завершения цепочки последовательно возникших единиц или нулей для каждого переброса составляет одну вторую.
  3. Если последовательность полного цикла (K тактов) сравнить с последовательностью такой же длины, но сдвинутой на любое число n бит (где n не равно 0 и не кратно K), то число несовпадений будет превышать число совпадений на единицу. Автокорреляционная функция такой последовательности при нулевой задержке представляет собой дельта-функцию Кронекера, а во всех остальных точках равна 1/K.
Контрольные вопросы и упражнения
  1. Предположим, что регистр DX содержит 1011100110111001b, а регистр CX – 3. Определите содержимое регистра DX после следующих несвязанных команд:
    1. SHR DX,1
    2. SHR DX,5
    3. SHR DL,CL
    4. SHL DX,CL
    5. SHL DL,1
    6. ROR DL,2
    7. ROR DX,4
    8. SAL DH,1
  2. Напишите программу, в которой, используя команды сдвига, пересылки и сложения, умножьте содержимое регистра AX на 100.
  3. Напишите программу, в которой, используя команды сдвига и циклического сдвига, содержимое пары регистров DX:AX:
    1. умножается на 4;
    2. делится на 4;
    3. 48 бит в регистрах DX:AX:BX умножается на 2.
  4. Разделите 16-разрядное число, помещенное на вершину стека, на два 8-разрядных числа и снова разместите их в стеке.
Миниатюры
Электронный учебник   Электронный учебник   Электронный учебник  

Электронный учебник   Электронный учебник   Электронный учебник  

Электронный учебник   Электронный учебник  
Изображения
 
7
Закрытая тема Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru