Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Программирование - Длинная арифметика на ассемблере (80х86)  

Длинная арифметика на ассемблере (80х86)

Gooddy
Gooddy
3-ий класс
Сообщения: 84
[Сообщение #1] 8 сентября 2011, 13:42
Что-то мне подсказывает, что на ассемблере проще всего реализовывать длинную арифметику, по крайней мере для сложения/вычитания, всего то нужно первое (младшее) число сложить командой ADD, а последующие командой ADC, например в цикле.

У кого какие соображения по поводу умножения и деления (если брать основание системы 2^32, т.е. максимальное значение int32+1)?

Чисти код! Чисти код! Чисти код!
Вадим К
Вадим К
Академик
Сообщения: 85
[Сообщение #2] 8 сентября 2011, 13:53
умножать в столбик умеем? делается идентично. При этом нужно помнить, что при перемножении двух 32битных, результат сохраняется в двух регистрах (если я правильно помню - в eax младшие 32 бита, в edx старшие).
Деление - точно так же. Если делать деление в двоичной форме, то алгоритм очень простой
сдвигаем делитель влево до тех пор пока оно по кол-ву разрядов будет равно делимому.
1) если делимое больше делителя, вычитаем полученный делитель с делимого, в ответ записываем 1 иначе записываем 0.
2) сдвигаем вправо делитель. если сдвигать нет куда, то ответ есть.
3) назад к пункту 1.

Галочка "подтверждения прочтения" - вселенское зло.
bugmenot
bugmenot
3-ий класс
Сообщения: 88
[Сообщение #3] 10 сентября 2011, 08:48
у интелов произведение и делимое и так длинные

виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy
Gooddy
3-ий класс
Сообщения: 84
[Сообщение #4] 10 сентября 2011, 18:27
Умножение/деление длинные, но всего в 2 int'а. Я говорю про действительно длинные числа. В 100 и более int'ов.

Чисти код! Чисти код! Чисти код!
bugmenot
bugmenot
3-ий класс
Сообщения: 88
[Сообщение #5] 12 сентября 2011, 23:48
а, тогда да.
а вообще ассемблер плохо переносится.

виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy
Gooddy
3-ий класс
Сообщения: 84
[Сообщение #6] 13 сентября 2011, 15:26
Да он вообще не переносится.

Чисти код! Чисти код! Чисти код!
bugmenot
bugmenot
3-ий класс
Сообщения: 88
[Сообщение #7] 14 сентября 2011, 20:58
c 32бит на 64 перенесётся :-)
и с 16 бы перенёсся если бы не произвольный размер, т.е. указатели разных моделей

виконання програми розпочинається з того самого мiсця, де призупинилося.


Всего сообщений: 7 (сейчас показаны: с 1 по 7)

Перейти в раздел:


 © 2004 - 2017, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.03 сек.
Обратная связь  
Рейтинг@Mail.ru Majordomo.ru - надёжный хостинг