Форум по микроконтроллерам: Подпрограммы умножения двух 4-х байтных чисел - Форум по микроконтроллерам

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Подпрограммы умножения двух 4-х байтных чисел Подпрограммы умножения двух 4-х байтных чисел

#1 Пользователь офлайн   Алексашка 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 311
  • Регистрация: 26 Апрель 13
  • ГородМирный, РС (Якутия)

Отправлено 16 Ноябрь 2015 - 12:28

Господа, у кого есть ПП умножения двух 4-х байтных чисел для PIC18 серии. Поделитесь пожалуйста. :rake:
Попробовал слизать такую ПП с поделки на Си, запутался в регистрах как в паутине. :help:
0

#2 Пользователь офлайн   mf323 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 84
  • Регистрация: 27 Январь 13
  • ГородУфа

Отправлено 16 Ноябрь 2015 - 15:00

А почему бы самому не написать? Неплохая зарядка для мозгов. Ведь по сути умножение это сколько раз прибавить число к самому себе, в отличие от деления здесь должно быть попроще. Сам я ни разу не использовал умножение таких больших чисел, но по идее если ты будешь сдвигать одно число вправо(то что поменьше) а другое влево, то в итоге одно из них дойдёт до единицы, а второе станет результатом умножения.
0

#3 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 17 Ноябрь 2015 - 12:53

Из дизассемблера:
Скрытый текст

Входные регистры : 1 = 0x04-0x07, 2 = 0x09-0x0C
Выходные регистры: 0x00-0x03
Время выполнения = 83 такта.
Поддерживается знаковое умножение.

Разбирайтесь :)
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#4 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 17 Ноябрь 2015 - 13:59

Прикрепленный файл  asm_mul.rar (16,56К)
Количество загрузок:: 101

Проверил, всё работает:
Прикрепленное изображение: mul.png
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#5 Пользователь офлайн   Алексашка 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 311
  • Регистрация: 26 Апрель 13
  • ГородМирный, РС (Якутия)

Отправлено 17 Ноябрь 2015 - 16:31

mf323 пишет:

Цитата

А почему бы самому не написать? Неплохая зарядка для мозгов.

Дело в том что я делал свой проект по частотному регулированию пуш-пула на си, и там таких проблем с умножением вовсе нет. Но скорость с которой в Си включаются и выключаются нужные мне выводы портов остановила мне весь проект.
Перешел обратно на АСМ для ускорения в разы обработки действий с портами. Терять вагончик времени на процедуру умножения (а я ее никогда еще не разбирал побайтно), не вижу смысла. Поэтому и спросил мож в закромах есть у кого.
Сам сделал умножение на Си и перевел его в АСМ точнее дизасемблировал и тупо слизал в надежде что разберусь, что к чему, переделал названия которые дал компиль Си в понятные мне TEMP, Count. И тут то завис, что откуда и куда переносится складывается и т.д.

Цитата

Прикрепленный файл asm_mul.rar (16,56К)


Проверил, всё работает

Алекс спасибо от души мужик, как обычно выручил :ay:
0

#6 Пользователь офлайн   mf323 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 84
  • Регистрация: 27 Январь 13
  • ГородУфа

Отправлено 17 Ноябрь 2015 - 16:55

Я си вообще не понимаю, кучу всяких книг давно уже скачал, пару раз в год сажусь почитать, но результата 0, не могу видимо узреть какую-то фишку, а на асме всё прекрасно понимаю, как бы вижу весь код целиком, куда и что идёт, но согласен что это муторно, постоянно приходится следить за привязкой к адресам, страницам итд.
А что такое пуш-пулл?
0

#7 Пользователь офлайн   Алексашка 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 311
  • Регистрация: 26 Апрель 13
  • ГородМирный, РС (Якутия)

Отправлено 17 Ноябрь 2015 - 18:12

Я сам Си начал осиливать недавно, Пуш-пул применяется в индукционных нагревателях, переводится как Тяни-толкай, так вот он накачивает LC контур который потом может например толкать трансформатор Тесла, или нагревать заготовку помещенную в индуктор L, вобщем как то так подробнее если интересно погугли.
0

#8 Пользователь офлайн   mf323 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 84
  • Регистрация: 27 Январь 13
  • ГородУфа

Отправлено 17 Ноябрь 2015 - 19:29

Alex
а почему в приведенном выше коде выходных регистров только 4? если умножить максимальное 4-ёх байтное на такое же, то на выходе должно быть 8 байт. И что такое - PRODL, PRODH ?
0

#9 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 17 Ноябрь 2015 - 21:56

Потому, что выходная переменная была - long - это 4 байта.
Что такое PRODL, PRODH - понятия не имею :) Я просто взял кусок, который создал Си-компилятор и подправил все адреса.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#10 Пользователь офлайн   nick14 

  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 465
  • Регистрация: 15 Февраль 11
  • ГородРыбинск

Отправлено 18 Ноябрь 2015 - 07:15

Цитата

Что такое PRODL, PRODH - понятия не имею.


PRODL, PRODH - это результат умножения младший и старший байты (в 18 серии есть команда умножения MULWF)....
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей