| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > Работа с большими числами... |
| Автор: Lеstat 9.2.2007, 00:46 |
| Возникла необходимость провернуть четыре основные математические операции с огромными числами числа 8-ми байтные... бегая в поиске инфы я наткнулся на то, что нужно использовать флаги переноса для создания цепочки регистров под свое число. почитав о флаге переноса вычитал, что этот флаг служит для переноса единички, если число не влезло в регистр, но толком не понял как с этим работать. Как собрать цепочку регистров и как с ней работать? Нету ли где-нибудь примера работы с большими числами? как провернуть сложение двух 8-ми байтных числа к примеру? еще вот тонкость... к примеру мы умножаем два 8-ми байтных числа, насколько я понимаю, можем получить 16 байтное число! куда же его... в умной книге было написано, что регистров всего 16, юзать все нельзя... регистров-то хватит? Буду благодарен за любую информацию! |
| Автор: W4FhLF 9.2.2007, 10:04 |
| Ну во-первых числа делятся на целые и вещественные, расширенный формат вещественного числа может хранить значения от 10^-4932 до 10^4932. Если речь идёт о целых числах, то в природе существуют команды mmx расширения и регистры этого набора команд имеют размерность 64 бита(8 байт), одной командой ты можешь складывать, вычитать, умножать и делить эти числа. Если же ты хочешь ограничиться основным набором команд для целочисленных вычислений, то при работе с 64 разрядными числами следует учитывать флаг переноса(CF, я так понял о нём ты уже слышал), просто прочти справку по командам: adc, sbb, imul, idiv. |
| Автор: Lеstat 22.3.2007, 16:48 | ||
| Складывать и умножать уже научился... Подскажите алгоритм деления пожалуйста... числа целые в 8 байт, беззнаковые... в проге могу юзать только 16-ти разрядные регистры... проц 8086 вот как умножать получилось если кому в будущем понадобится:
помогите алгоритмом деления плз! пробую делить "как на бумаге руками", но не получается выскакивает "divide overflow" как с этим бороться можно? нужно к примеру DX:AX - FFFFh:FFFFh разделить на слово 0001h частное в AX ну никак не влезает... что с этим делать? |
| Автор: Akina 22.3.2007, 17:16 |
| Используй сдвиговое деление вычитанием... для этого напиши процедуры LongCompare и LongShift, a LongAdd и LongSub у тебя, как я понимаю, уже есть. |