умножение 32 битных чисел со знаком написать на ассемблере.

Обсуждаем контроллеры компании Atmel.
Ответить
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Чт ноя 06, 2014 15:37:50
Откуда: Кубинка, Московская обл.

Сообщение 1dimon1 »

Всем привет. пишу на алгоритм билдере (но это не принципиально сейчас).
Пишу программу для работы с датчиком температуры, давления и влажности BME280. Так вот, свалилась проблемка. Необходимо производить умножение с 32 битными числами да еще и со знаком. С обычным умножением справился, а вот со знаковым - затормозил... Обычное умножение реализовано на основе операций умножения описанных в апноуте AVR201. А вот со знаковым забуксовал. Может кто делал это на ассемблере? Контроллер атмега8, желательно использование аппаратного перемножителя, так как есть ограничение на время обработки...
Реклама
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

всё очень просто.
1. проверяешь старший бит числа на знак.
2. если число отрицательное ставишь флаг знака, иначе флаг знака сброшен.
3. находишь дополнение отрицательного числа до положительного числа.
4. умножаешь положительные числа.
5. смотришь флаг знака.
6. если флаг установлен, находишь дополнение результата умножения до отрицательного числа.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="1dimon1",url="/forum/viewtopic.php?p=3801867#p3801867"]Может кто делал это на ассемблере?[/uquote]
Чен делал
http://elm-chan.org/cc_e.html
см. AVR assembler libraries->32bit x 32bit multiply(signed/unsigned)
не аппаратное - но там используется обычное умножение - можно свое подсунуть
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Чт ноя 06, 2014 15:37:50
Откуда: Кубинка, Московская обл.

Сообщение 1dimon1 »

спасибо, буду пробовать.
Реклама
Эиком - электронные компоненты и радиодетали
Самсусамыч

Сообщение Самсусамыч »

Посмотрите, в архиве есть какие-то вычисления на АВ… может пригодятся.
Цитата автора (victor_b_k VRTP):
Кстати, у меня есть наработки по вычислениям с плавающей запятой в более подходящем для микроконтроллеров формате. При этом число занимает не четыре, а три байта. Точность представления чисел более пяти десятичных знаков. Правда из за сокращенного формата диапазон представляемых чисел составляет +/- 1000000 (примерно). Но в реальной жизни редко приходится оперировать большими числами при работе с реальным оборудованием, ведь обычно разрядность обрабатываемых величин (поступающих от разного рода датчиков) не превышает 16 разрядов. А уменьшение формата позволяет сэкономить память и сократить время вычислений.
demo.zip
Реклама
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

ох, любители плавающей запятой ...
плавающая запятая нужна тогда и только тогда, когда один и тот же параметр может изменяться от очень малой величины до очень большой величины.
господа, кто-нибудь реально в устройствах на МК видел такой огромный диапазон изменения чисел? например, от 0,000001 до 1000000?
лично я не видел никогда.
в том то и дело, что реальные числа - от АЦП, от датчиков и всё прочее - ВСЕГДА укладывают во вполне представимое целое число. чаще всего в 16 бит (два байта).
поэтому спрашивается - а зачем тут нужна плавающая точка?
даже, если нужны дробные числа, всегда можно их представить целым числом, а положение точки держать в уме, и выводить точку в нужном месте на экран.
а плавающая точка нужна только "малограмотным", которые не могут сообразить, что любое дробное число можно представить целым числом и точкой в нужной позиции.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6322
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="Starichok51",url="/forum/viewtopic.php?p=3802219#p3802219"]а плавающая точка нужна только "малограмотным", которые не могут сообразить, что любое дробное число можно представить целым числом и точкой в нужной позиции.[/uquote]
Как всякое слишком категоричное утверждение - оно в общем случае неверно. Не стану расписывать свои давние разработки, но приходилось делать не только "плавучку", но и массу функций: экспонента, корень, тригонометрические. И не ради понтов и выпендрёжа, а нужно было в реальном времени считать тепловую модель электродвигателя, защищая его, родимого, то ли по 8, то ли по 12 уставкам. "Возьми Си и не парься?" Так в этом МК не было даже сдвига вправо, какой там Си! Утаптывал, борясь за каждый байт. "Так кто виноват, что ты взял неправильный контроллер" - скажет тот, кто никогда не работал на заказчика-частника, у которого каждый цент на учёте. Попробуйте, вам понравится (вряд ли).
Но труды того стоили. Некоторые дивайсы исправно несут службу до сих пор, и это не мигание диодами в кубиках, а реальное производство, кующее рубли.
Хотя справедливости ради стоит согласиться, что в очень многих случаях без плавучки можно и нужно обойтись. Но подросло поколение АйрДуньщиков, очень далёких от понимания архитектуры МК и даже в далёком приближении понятия не имеющих об форматах данных.
Ну вот, началось старческое брюзжание :) Пойду глотну коньячку, если ещё осталось от днюхи
Изображение
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

экспонента, корень, тригонометрические - я не имел в виду такие функции.
тут уж для вычисления требуется такой большой диапазон чисел, где без плавающей точки не обойтись.
хотя, у Атмел для корня квадратного есть целочисленный алгоритм.
Jack_A писал(а):справедливости ради стоит согласиться, что в очень многих случаях без плавучки можно и нужно обойтись
именно это я и имел в виду в своем посте.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 6322
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="Starichok51",url="/forum/viewtopic.php?p=3803222#p3803222"]хотя, у Атмел для корня квадратного есть целочисленный алгоритм.[/uquote]
Это было бы прекрасно, если бы и остальные формулы в расчёте были в целых числах, а так что в ём проку? Я - не Атмел, но и у меня реализован алгоритм корня. И в части мантиссы - он совершенно целочисленный :)
Изображение
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

тогда, я думаю, для тебя не составит труда и для тригонометрии реализовать в целых числах.
а размер числа уже будет зависеть от требуемой точности результата.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 6322
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Я шёл к цели кратчайшим путём, не заботясь о том, насколько "кошерны" с точки зрения ортодоксов мои решения. Например, плавучка у меня была 3-байтная: знак/порядок + 2 байта мантиссы, даже без скрытого разряда. Компромисс меж точностью и быстродействием. Точность устраивала, а микросекунды всегда были в дефиците. Real time, мать её...
Мы, мне кажется, уже пришли к консексусу относительно беспредметности спора "нужно-не нужно" без рассмотрения конкретного набора алгоритмов, параметров, значений.
Последний раз редактировалось Jack_A Сб мар 07, 2020 21:48:33, всего редактировалось 1 раз.
Изображение
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Чт ноя 06, 2014 15:37:50
Откуда: Кубинка, Московская обл.

Сообщение 1dimon1 »

Спасибо за наводки, получилось, по крайней мере с калькулятором ответы совпадют :)
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Jack_A писал(а):Мы, мне кажется, уже пришли к консексусу ...
а некоторые депутаты достигали консенсуса по несколько раз за одно заседание ...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «AVR»