![]() |
|
|
![]()
|
|
| Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
Возникла необходимость провернуть четыре основные математические операции с огромными числами
числа 8-ми байтные... бегая в поиске инфы я наткнулся на то, что нужно использовать флаги переноса для создания цепочки регистров под свое число. почитав о флаге переноса вычитал, что этот флаг служит для переноса единички, если число не влезло в регистр, но толком не понял как с этим работать. Как собрать цепочку регистров и как с ней работать? Нету ли где-нибудь примера работы с большими числами? как провернуть сложение двух 8-ми байтных числа к примеру? еще вот тонкость... к примеру мы умножаем два 8-ми байтных числа, насколько я понимаю, можем получить 16 байтное число! куда же его... в умной книге было написано, что регистров всего 16, юзать все нельзя... регистров-то хватит? Буду благодарен за любую информацию! |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
Ну во-первых числа делятся на целые и вещественные, расширенный формат вещественного числа может хранить значения от 10^-4932 до 10^4932. Если речь идёт о целых числах, то в природе существуют команды mmx расширения и регистры этого набора команд имеют размерность 64 бита(8 байт), одной командой ты можешь складывать, вычитать, умножать и делить эти числа. Если же ты хочешь ограничиться основным набором команд для целочисленных вычислений, то при работе с 64 разрядными числами следует учитывать флаг переноса(CF, я так понял о нём ты уже слышал), просто прочти справку по командам: adc, sbb, imul, idiv.
Это сообщение отредактировал(а) W4FhLF - 9.2.2007, 10:05 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
Складывать и умножать уже научился...
Подскажите алгоритм деления пожалуйста... числа целые в 8 байт, беззнаковые... в проге могу юзать только 16-ти разрядные регистры... проц 8086 вот как умножать получилось если кому в будущем понадобится:
помогите алгоритмом деления плз! пробую делить "как на бумаге руками", но не получается выскакивает "divide overflow" как с этим бороться можно? нужно к примеру DX:AX - FFFFh:FFFFh разделить на слово 0001h частное в AX ну никак не влезает... что с этим делать? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Используй сдвиговое деление вычитанием... для этого напиши процедуры LongCompare и LongShift, a LongAdd и LongSub у тебя, как я понимаю, уже есть.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |