С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 143
1

Генерация псевдослучайных чисел при помощи LFSR

03.11.2019, 22:30. Показов 2541. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
пишу на делфи. нужно сделать вставку ассемблерскую
у меня есть число(resultkey) типа extended состоящее из 1 и 0(длина числа = 28).мне нужно сделать его линейный сдвиг влево и чтобы в 0-ой бит стало число равное операции XOR 27-ого и 3-ого битов числа resultkey.Так надо делать пока число после сдвига не будет равно первоначальному .После каждого сдвига 27-бит надо записать в массив .Сделайте и обьясните пожалуйста
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2019, 22:30
Ответы с готовыми решениями:

Преобразования двух чисел при помощи логических операторов
Помогите пожалуйста. Даны 2 числа в двоичном виде. Первое число умножить на 16 и в полученном...

Генерация псевдослучайных чисел.с++
Метод середины квадратов, у меня программа вычисляет одно число, а надо 125. Как сделать чтоб...

Генерация псевдослучайных чисел!!!
Помогите кто чем может!!пожалуйста! Составьте программу, реализующую линейный конгруэнтный ГПСЧ,...

C++11 генерация псевдослучайных чисел
Хотел заполнить матрицу максимального потребления ресурсов процессами (алгоритм банкира), но при...

8
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,698
Записей в блоге: 9
03.11.2019, 22:38 2
А разве Intel x86 поддерживает работу с числами, разрядность которых не кратна 8?
И в Delphi тип extended занимает 10 байт = 80 бит - ни как не 28 бит.
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 143
03.11.2019, 22:52  [ТС] 3
массив из 27-мых битов надо вывести в массив чисел в делфи

Добавлено через 2 минуты
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
10 байт = 80 бит - ни как не 28 бит.
думал Integer , но его не хвататет

Добавлено через 6 минут
я хочу реализовать шифрование (LSFR) с помощью fasm

Добавлено через 49 секунд
на ассемблере оно будет быстрее считать

Добавлено через 2 минуты
это возможно сделать?
0
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,698
Записей в блоге: 9
04.11.2019, 00:35 4
Если возможно на Delphi, то и на ассемблере возможно.
А почему 32-разрядного DWord (или что там у Delphi имеется) не хватит для размещения 28 бит?
Без записи в массив
Assembler
1
2
3
4
5
6
7
8
9
10
mov eax, [resultkey]
bt eax, 3
rcl ebx, 1
bt eax, 27
adc ebx, 0
and ebx, 1
shl eax, 1
or eax, ebx
and eax, $0FFFFFFF
mov [resultkey], eax
Добавлено через 1 час 14 минут
В статье Шустрый 128-битный LFSR (MMX required) предлагают ускорение за счёт использования бита чётности флага состояний.
воспользовавшись значением флага четности PF (Parity Flag) регистра флагов. Действительно, сложения по модулю 2 (XOR) определяют четность количества установленных битов. Единственное, флаг четности PF устанавливается, если младший значащий байт результата содержит чётное число единичных (ненулевых) битов, т.е. как минимум один арифметический сдвиг нам сделать все-таки придется:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
xor ecx,ecx
mov ebx,0FFFFFFFFh ; S
mov eax,080000057h ; taps (32,31,30,28,26,1)
 
and ebx,eax
mov cl,ah
sar ebx,018h
lahf
xor cl,ah
 
sar cl,02h
and cl,01h
Вам, наверное, нужны не сами значения, а длина периода.

Добавлено через 5 минут
При вычислении длины периода совершенно не нужен массив.
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 143
06.11.2019, 11:02  [ТС] 5
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Вам, наверное, нужны не сами значения, а длина период
мне нужны значения . так как их и биты исходного файла я буду XOR для шифрования

Добавлено через 46 минут
только этот массив будет равен периоду 2^28

Добавлено через 15 секунд
очень большое число
0
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,698
Записей в блоге: 9
06.11.2019, 16:39 6
Цитата Сообщение от damaaa Посмотреть сообщение
этот массив будет равен периоду 2^28
это количество элементов, а его размер составит в 4 раза больше, т.к. один элемент - 4 байта.

Таким образом - смысла в массиве нет - вычисляйте по мере необходимости порциями, равными буферу для файла.
0
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 143
07.11.2019, 17:29  [ТС] 7
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
procedure TForm4.Button2Click(Sender: TObject);
var i,v:integer;
Key_1,Key_2,Key_3,Key_4:string;
textedit,textedit_1:string;
Bit_1,Bit_2,k,Bit_3,Bit_4:integer;
bit:integer;
Text_edit,text_edit_change:string;
massiv_bits:array[1..8] of integer;
Xor28_3:integer;
boo:boolean;
begin
k:=1;
boo:=true;
 Text_edit:=edit1.Text;
 while(Text_edit_change <>Text_edit) do
 begin
 if boo then Text_edit_change :=Text_edit;
 for i:=1 to 8 do massiv_bits[i]:= strtoint(text_edit_change[i]);
 Button3.Enabled:=true;
 key_1:= copy(Text_edit_change,1,8);
// key_3:= copy(Text_edit_change,9,8);
// key_2:= copy(Text_edit_change,17,8);
// key_1:= copy(Text_edit_change,25,4);
 bit:=strtoint(key_1[7]);
 if (bit and 1) > 0 then
  bit_1 := 1  else bit_1 := 0;
   bit:=strtoint(key_1[6]);
   if (bit and 1) > 0 then
  bit_2 := 1 else bit_2 := 0;
   bit:=strtoint(key_1[5]);
 if (bit and 1) > 0 then
  bit_3 := 1  else bit_3 := 0;
   bit:=strtoint(key_1[1]);
 if (bit and 1) > 0 then
  bit_4 := 1  else bit_4 := 0;
 Xor28_3:=bit_1 xor bit_2;
 Xor28_3:= Xor28_3 xor bit_3;
 Xor28_3:=Xor28_3 xor bit_4;
  Text_edit_change:='';
  for i:=1 to 7 do
  begin
  massiv_bits[i]:= massiv_bits [i+1];
  Text_edit_change:=Text_edit_change +  inttostr(massiv_bits[i]);
  end;
   Text_edit_change:= Text_edit_change + inttostr(Xor28_3);
   massiv_bits[8]:= Xor28_3;
   boo:=false;
   k:=k+1;
 end;
 showmessage(inttostr(k));
 end;
вот этот типа код высчитывает для 2^8 . а если 2 в 28 то оооочень долго

Добавлено через 33 секунды
посоветуйте как сделать лучше

Добавлено через 9 секунд
пожалуйста

Добавлено через 37 секунд
в edi1.text у меня ключ равный по длине степени многочлена
0
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,698
Записей в блоге: 9
07.11.2019, 18:13 8
Лучший ответ Сообщение было отмечено damaaa как решение

Решение

4*2^28=2^30 байт=2 Гбайт
Это много для хранения в массиве. Вычисляйте и обрабатывайте порциями по 1 Мбайт.

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

Я не понимаю, что у вас в коде твориться, поэтому советов не будет.

А у Delphi есть встроенный или плагин автоформаттер исходного кода? По-моему GExperts зовётся.

Добавлено через 25 минут
Смотрите, в вашем коде на Delphi вы смешиваете интерфейс и логику работы.
Для нормальной программы требуется написать отдельную процедуру EnCode, которую вызывать из обработчика нажатия на кнопку. Описание заголовка процедуры
Delphi
1
procedure EnCode(var AArray:array of char; ALength:integer; var Key:dword);
В процедуру передаётся массив символов, его длина, код из LFSR.
В самой процедуре производится кодирование массива (гаммирование) ключом. Придётся выполнять приведение типов (typecast).
1
1 / 1 / 0
Регистрация: 12.04.2019
Сообщений: 143
07.11.2019, 18:32  [ТС] 9
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
1
procedure EnCode(var AArray:array of char; ALength:integer; var Key:dword);
понял
спасибо большое
0
07.11.2019, 18:32
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2019, 18:32
Помогаю со студенческими работами здесь

Генерация псевдослучайных чисел
На скриншоте видно, я создаю четыре переменные и присваиваю к ним значения от созданных ранее...

Генерация псевдослучайных чисел
Здравствуйте! Пишу программу, в ней мне нужно использовать случайные числа, сгенерированные в...

Генерация алгоритмов псевдослучайных чисел
Помогите пожалуйста! Не могу написать код программы. Даже не знаю с какой стороны подступиться,а...

Генерация массива псевдослучайных чисел
нужно сгенерировать 4 массива псевдослучайных чисел по законам распределения(нормальный, гамма,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru