Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: mpy инструкция в 5402
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Саша Z
Сорри за глупый вопрос - чего-то меня переклинило.

делаю умножение двух значений (а коде asm) - одно в акк. B, другое передано в из головного С кода (по значению).

Судя по хелпу, mpy может либо умножать содержимое памяти с TREG (0хе) и отправлять результат в аккумулятор, либо оба операнда - содержимое памяти (и результат тоже в акк.).

У меня одно число есть результат пердварительных вычислений, и храниться в аккумуляторе B, другое число передано из С. Для умножения мне видимо надо вначале загнать то что в акк B - в TREG, затем умножать на второе.

Какая комманда перегоняет их акк. в TREG ? (не ld, stm, ...)
Предположим второе число именуется current_gain и передано из С кода как:
.global _current_gain

как я пищу умножение mpy (после загрузки TREGа)

Спасибо.
=GM=
Цитата(Саша Z @ Jun 14 2007, 13:48) *
Сорри за глупый вопрос - чего-то меня переклинило.

Для умножения мне видимо надо вначале загнать то что в акк B - в TREG, затем умножать на второе.

Какая комманда перегоняет их акк. в TREG ? (не ld, stm, ...)

Попробуйте mvdm или mvmm, если не нравится ld.
Саша Z
Цитата(=GM= @ Jun 16 2007, 21:02) *
Попробуйте mvdm или mvmm, если не нравится ld.


Спасибо, решилоьс все в давно (почти сразу после постинга вопроса). Комбинации с ld, mv.., не компилировались, но потом нашел комбинацию с зарядкой TREGа и mpyем...

Все равно спасибо за ответ.
=GM=
Цитата(Саша Z @ Jun 16 2007, 18:16) *
Спасибо, решилоьс все в давно (почти сразу после постинга вопроса). Комбинации с ld, mv.., не компилировались, но потом нашел комбинацию с зарядкой TREGа и mpyем...
Все равно спасибо за ответ.

Ну так, не будьте эгоистом, выкладывайте решение, чтобы остальные участники форума получили ваш опыт. Иначе можно считать три предыдущих поста пустышкой.
Саша Z
Цитата(=GM= @ Jun 17 2007, 00:59) *
Ну так, не будьте эгоистом, выкладывайте решение, чтобы остальные участники форума получили ваш опыт. Иначе можно считать три предыдущих поста пустышкой.


Вы правы, завтра кину, сейчас просто уже лэптоп закрыл (спать пора...smile.gif ).
Решение-то простое, наверняка для тов. на форуме с чуть более солидным опытом чем мой - элементарно...

Завтра выложу...
Саша Z
Цитата(Саша Z @ Jun 17 2007, 01:10) *
Вы правы, завтра кину, сейчас просто уже лэптоп закрыл (спать пора...smile.gif ).
Решение-то простое, наверняка для тов. на форуме с чуть более солидным опытом чем мой - элементарно...

Завтра выложу...


Вот, выкладываю:
1. Один из множителей находится в акк. B.
2. Определил временную переменную (temp)
3. Загрузка TREG через временную переменную (адресно)
4. Умножение содержимого TREGа на второй множитель (содержится в глобальной переменной (_current_gain) и результат -> обратно в акк. B

Код
.bss temp 1
.
.
.

stl b, *(temp)
mvdk *(temp), 0xe
mpy *(_current_gain), b


В принципе - несложно, просто без опыта - приходиться поковыряться.... wink.gif
=GM=
Цитата(Саша Z @ Jun 17 2007, 08:26) *
Вот, выкладываю:
Код
stl b, *(temp)
mvdk *(temp), 0xe
mpy *(_current_gain), b
В принципе - несложно, просто без опыта - приходиться поковыряться.... wink.gif

Так ещё проще, и короче
Код
    stlm    b,t
    mpy    *(_gain),b

И быстрее более чем в два раза.
Саша Z
Цитата(=GM= @ Jun 17 2007, 23:45) *
Так ещё проще, и короче
Код
    stlm    b,t
    mpy    *(_gain),b

И быстрее более чем в два раза.


Да, вполне возможно, спасибо. Я пока не был знаком с stlm инструкцией. Попробую заменить ей. Если подойдет - съэкономлю ячейку памяти - не будет нужды в промежуточной переменной, будет действительно в 2 раза короче и читабельней....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.