![]() |
|
![]() ![]() ![]() |
|
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Подскажите, пожалуйста, как написать кусок кода (на асме
![]() ![]() -------------------- Да. Именно так. |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Это цитата из твоей статьи на WASM.RU
![]() ![]() Только меня интересует именно произвольная степень, да и алгоритм должен быть довольно быстрым. Добавлено @ 10:12
А вот нашёл эту книжку. Сейчас скачаю, посмотрю. -------------------- Да. Именно так. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Хмм... В том, что я скачал ничего толкового не нашёл
![]() Это сообщение отредактировал(а) Дрон - 25.4.2004, 11:31 -------------------- Да. Именно так. |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Там глава про сопроцессоры - ты ее видишь ? Там есть статья 82 "Использование сопроцессора для реализации операции возведения в целую положительную степень".
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Вот оно что! В том архиве было только 58 статей. Буду искать другой...
-------------------- Да. Именно так. |
|||
|
||||
Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Книжку я так и не достал.
Но, поразбиравшись с инструкциями FPU, написал вот такое:
Всё оказалось очень просто. А для возведения числа с плавающей точкой в целую степень написал вот такое. Оно намного эффективней того, что привёл ты. Тут сложность O(log2(n)), а у тебя O(n). Регистры si и di я использовал потому, что в контексте проги остальные были заняты. Показатель -- слово со знаком.
Результат, опять же, в st(0) Короче, ассемблер рулит! ![]() PS. Сначала во второй процедуре я написал bt si,15 непосредственно перед jnc Positive потом, подумав, переместил туда, где оно сейчас. В результате время выполнения процедуры уменьшилось на 3% ![]() Это сообщение отредактировал(а) Дрон - 5.5.2004, 13:16 -------------------- Да. Именно так. |
||||
|
|||||
Sail |
|
||||
Unregistered |
Я чего то это не понял:
Почему нельзя проще:
Результат останется в ST(0) |
||||
|
|||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Sail
Так нельзя потому, что для команды f2xm1 степень должна находиться в промежутке от -1 до 1. Поэтому в своей процедуре я отдельно возвожу в целую часть показателя (через fscale) и отдельно в дробную (через f2xm1). -------------------- Да. Именно так. |
|||
|
||||
Jin X |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 5.3.2004 Репутация: 1 Всего: 1 |
Пару дней назад как раз нужно было написать универсальную процедуру возведения в степень, так что ловите исходник!
Возводит любые числа в любую степень (ну отрицательные числа в нецелую степень, естественно, не возводит... их никто вам не возведёт ![]() И безо всяких циклов ;) Файл можно стянуть вот отсюда: http://filezzz.nm.ru/pub/asm/fpower.zip --------------------
Бойся своей мечты, ибо она осуществима! |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Jin X
Ну так у меня тоже безо всяких циклов -- первый пример для нецелой степени. А второй хоть и с циклом, но работает быстрее первого для целой степени. В моём коде, разве что, нет никаких проверок на обшибку, а в остальном моё ничем не хуже ![]() -------------------- Да. Именно так. |
|||
|
||||
Jin X |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 5.3.2004 Репутация: 1 Всего: 1 |
Хе-хе, вот именно, что нету проверок
![]() К тому же, у тебя при попытке возвести в любую степень ноль или отрицательные числа будет глюк. Т.к. логарифма от этих чисел нет ![]() --------------------
Бойся своей мечты, ибо она осуществима! |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
У меня цель была написать наименьший и наибыстрейший код для динамической генерации процедуры вычисления введённой формулы, а за корректностью пусть пользователь сам следит, или её можно проверять в момент разбора выражения (т.е. один раз)
![]() -------------------- Да. Именно так. |
|||
|
||||
Jin X |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 5.3.2004 Репутация: 1 Всего: 1 |
Ладно, проверяй. Только отрицательные числа тоже можно возводить в степень (целую), как и ноль. А на юзера рассчитывать глупо, по-моему.
Используй что хочешь, мне нужно было это сделать, я сделал, а сюда написал на случай, если кому пригодится, вот и всё ![]() --------------------
Бойся своей мечты, ибо она осуществима! |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 92 |
Jin X
Да я же не настаиваю. Просто цели были разные. И от твоего, в общем случае толку получается больше. Так что спасибо, может когда-нибудь и проверка понадобится ![]() -------------------- Да. Именно так. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |