Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/2256: Рейтинг темы: голосов - 2256, средняя оценка - 4.63
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
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
Закрытая тема Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru