Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решение задач: алгоритм и операнды 
V
    Опции темы
champion
Дата 7.4.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Помогите пожалуйста решить задачи используя Assembler (Tasm). В большей части логику, т.к. остальное уж совсем просто.
 
  • Реализуйте умножение для 64 битных чисел.
  • Реализуйте сложение для чисел размером 256 бит
  • Реализуйте умножение по модулю 2 в 256 степени для 256 битных чисел


Это сообщение отредактировал(а) champion - 7.4.2008, 09:59


--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 7.4.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



процессор 32-х битный?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
champion
Дата 10.4.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Да. 


--------------------
user posted image
PM MAIL   Вверх
anwe
Дата 10.4.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



1. Логика проста: умножаешь, как на бумаге - в столбик. Получается, первое число умножаешь на каждую цифру второго и складываются полученные результаты. Только эти промежуточне результаты надо прописывать в соответсвующих смещенных разрядах влево, а сложение проводить с учетом флага переноса. В общем, как на бумаге:
Код

mov eax,dword ptr X
mov ebx,eax
mul dword ptr Y
mov dword ptr Z,eax
mov ecx,edx
mov eax,ebx
mul dword ptr Y[4]
add eax,ecx
adc edx,0
mov eax,ebx
mov ecx,edx
mov eax,dword ptr X[4]
mul dword ptr Y
add eax,ebx
mov dword ptr z[4],eax
adc ecx,edx
mov dword ptr X[4]
mul dword ptr Y[4]
add eax,ecx
adc edx,0
mov dword ptr Z[8],eax
mov dword ptr Z[12],eax

2. То же как на бумаге при сложении в столбик. Надо учитывать флаг переноса:
Код

clc
mov edi,0
mov ecx,8
l1:
mov eax,dword ptr X[edi]
adc eax,dword ptr Y[edi]
mov dword ptr Z[edi],eax
add edi,4
loop l1

3. Это что ли 256 бит *2^256? Так только для 2^256 никакой памяти не хватит.
PM MAIL   Вверх
champion
Дата 12.4.2008, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Спасибо! В третьей умножение 256 битных чисел, а потом деление на 2^256, и записываем остаток. (деление по модулю)


--------------------
user posted image
PM MAIL   Вверх
anwe
Дата 13.4.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Деление самое сложное из сложения умножения и деления. Для деления числа любой разрядности на число любой разрядности используется алгоритм самой сути деления. Что такое деление (из математики)? - Вычитание до тех пор, пока не остаток не станет меньше делителя. На этом и основан этот алгоритм: вычитается делитель из делимого, сдвинутого влево на необходимое кол-во разрядов и увеличивается соответсвующий разряд результата. Пример для 64-х разрядов: делимое в edx:eax, делитель в ecx:ebx, результат в edx:eax, остаток в esi:edi.
Код

mov ebp,64
xor edi,edi
xor esi,esi
l1:
shl eax,1
rcl,edx,1
rcl,edi,1
rcl,esi,1
cmp esi,ecx
ja l2
jb l3
cmp edi,ebx
jb l3
l2:
sub edi,ebx,
sbb esi,ecx
inc eax
l3:
dec ebp
jne l1

Для другого числа принцип такой же. ТОЛЬКО! как будешь хранить свое 2^256???? Это же 2*10^67 двойных слов smile Приведенный мной алгоритм по 64 разряда надо будет применить 6*10^57 раз smile 
Используй FPU.

Это сообщение отредактировал(а) anwe - 13.4.2008, 23:31
PM MAIL   Вверх
champion
Дата 14.4.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



А если выделить в памяти область для переменной в которой и будет хранится это число? Как переменную? Части числа записывать через запятую, как массив
X dd ffffffh,ffffffh,ffffffh,ffffffh,ffffffh,ffffffh,ffffffh,ffffffh


--------------------
user posted image
PM MAIL   Вверх
anwe
Дата 14.4.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



champion, я вчера был мягко казать не совсем трезвый, и выразился не верно. Для 2^256 конечно хватит 256 разрядов. Конечно, твоя запись верная, так и надо. Ну а алгоритм у тебя уже есть, только загоняешь результат перемножения двоек в соответствующее двойное слово в числе и все получишь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.