Форум Программирование Длинная арифметика на ассемблере (80х86) |
|
Что-то мне подсказывает, что на ассемблере проще всего реализовывать длинную арифметику, по крайней мере для сложения/вычитания, всего то нужно первое (младшее) число сложить командой ADD, а последующие командой ADC, например в цикле. У кого какие соображения по поводу умножения и деления (если брать основание системы 2^32, т.е. максимальное значение int32+1)? Чисти код! Чисти код! Чисти код! | ||||||
|
умножать в столбик умеем? делается идентично. При этом нужно помнить, что при перемножении двух 32битных, результат сохраняется в двух регистрах (если я правильно помню - в eax младшие 32 бита, в edx старшие). Деление - точно так же. Если делать деление в двоичной форме, то алгоритм очень простой сдвигаем делитель влево до тех пор пока оно по кол-ву разрядов будет равно делимому. 1) если делимое больше делителя, вычитаем полученный делитель с делимого, в ответ записываем 1 иначе записываем 0. 2) сдвигаем вправо делитель. если сдвигать нет куда, то ответ есть. 3) назад к пункту 1. Галочка "подтверждения прочтения" - вселенское зло. | ||||||
|
у интелов произведение и делимое и так длинные виконання програми розпочинається з того самого мiсця, де призупинилося. | ||||||
|
Умножение/деление длинные, но всего в 2 int'а. Я говорю про действительно длинные числа. В 100 и более int'ов. Чисти код! Чисти код! Чисти код! | ||||||
|
а, тогда да. а вообще ассемблер плохо переносится. виконання програми розпочинається з того самого мiсця, де призупинилося. | ||||||
|
Да он вообще не переносится. Чисти код! Чисти код! Чисти код! | ||||||
|
c 32бит на 64 перенесётся :-) и с 16 бы перенёсся если бы не произвольный размер, т.е. указатели разных моделей виконання програми розпочинається з того самого мiсця, де призупинилося. | ||||||
Перейти в раздел:
© 2004 - 2024, Delphi.int.ru |
Версия форума: 1.10 (19.01.2010) |
Выполнено за 0.01 сек. |