Форум программистов, компьютерный форум CyberForum.ru

Прокомментируйте функцию - C++

Восстановить пароль Регистрация
 
iKarma
9 / 9 / 0
Регистрация: 17.10.2011
Сообщений: 114
18.03.2012, 18:32     Прокомментируйте функцию #1
Всем привет =) не могу разобраться с функцией - помогите разобраться, прокомментируйте плиз, особенно непонятен момент с ассемблером =(
Функция умножения L-словных сомножителей:
C++
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
// A – массив 32-х битных слов 1-го сомножителя;
// B – массив 32-х битных слов 2-го сомножителя;
// P – массив 32-х битных слов произведения;
// L – количество 32-х битных слов в каждом сомножителе.
void Mmul(unsigned long int* A, unsigned long int* B,
           unsigned long int* P, int L){
 int q, j, k;
 unsigned long int Pm, Ps, r_A, r_B, r_P;
  for(q = 0; q < (L + L); q++) P[q] = 0;
  for(q = 0; q < (L + L - 1); q++){
   Pm = 0;
   Ps = 0;
   r_P = 0;
   for(j = 0; j < L; j++){
    if(j > q) break;
    for(k = 0; k < L; k++){
     if((k + j) > q) break;
     if((k + j) == q){
      r_A = A[j];
      r_B = B[k];
      asm{
       mov eAX, r_A
       mov eBX, r_B
       mul eBX
       add Pm, eAX
       adc Ps, eDX
       adc r_P, 0
      }
     }
    }
   }
   P[q] = P[q] + Pm;
   P[q + 1] = P[q + 1] + Ps;
   if(r_P != 0) P[q + 2] = P[q + 2] + r_P;
  }
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 18:32     Прокомментируйте функцию
Посмотрите здесь:

C++ Прокомментируйте код
Прокомментируйте код. C++
прокомментируйте программу C++
прокомментируйте программу C++
прокомментируйте строчку.. C++
Прокомментируйте пожалуйста C++
C++ Прокомментируйте программу
Прокомментируйте код C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hemull
47 / 47 / 1
Регистрация: 12.03.2012
Сообщений: 108
18.03.2012, 19:01     Прокомментируйте функцию #2
ассемблерная вставка
Assembler
1
2
3
4
5
6
7
8
asm{
       mov eAX, r_A //копируем значение из r_A в eAX
       mov eBX, r_B //аналогично
       mul eBX // умножаем на eBX
       add Pm, eAX //плюсуем Pm и eAX
       adc Ps, eDX //сложение с переносом
       adc r_P, 0
      }
Инструкция ADC аналогична инструкции ADD, но в ней учитыва-
ется флаг переноса (предварительно установленный предыдущим сло-
жением). Всякий раз когда вы складываете два значения, превышаю-
щие по размеру слово, то младшие (менее значащие) слова нужно
сложить с помощью инструкции ADD, а остальные слова этих значений
- с помощью одной или нескольких инструкций ADC, последними скла-
дывая самые значащие слова.
iKarma
9 / 9 / 0
Регистрация: 17.10.2011
Сообщений: 114
18.03.2012, 19:24  [ТС]     Прокомментируйте функцию #3
Это функция относится к методу Диффи-Хеллмана. Для него есть довольно простая формула: y = (m^x) * mod n. Не подскажите что означают массивы A и B?
Yandex
Объявления
18.03.2012, 19:24     Прокомментируйте функцию
Ответ Создать тему
Опции темы

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru