реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> mpy инструкция в 5402, Нексолько глупый вопрос - синтах mpy с TREG и двумя арг. в памяти
Саша Z
сообщение Jun 14 2007, 13:48
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Сорри за глупый вопрос - чего-то меня переклинило.

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

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

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

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

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

Спасибо.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 16 2007, 17:02
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



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

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

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

Попробуйте mvdm или mvmm, если не нравится ld.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Jun 16 2007, 18:16
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



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


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

Все равно спасибо за ответ.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 16 2007, 20:59
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



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

Ну так, не будьте эгоистом, выкладывайте решение, чтобы остальные участники форума получили ваш опыт. Иначе можно считать три предыдущих поста пустышкой.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Jun 16 2007, 21:10
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



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


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

Завтра выложу...
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Jun 17 2007, 08:26
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(Саша 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
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 17 2007, 19:45
Сообщение #7


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



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

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

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


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Jun 18 2007, 10:31
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(=GM= @ Jun 17 2007, 23:45) *
Так ещё проще, и короче
Код
    stlm    b,t
    mpy    *(_gain),b

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


Да, вполне возможно, спасибо. Я пока не был знаком с stlm инструкцией. Попробую заменить ей. Если подойдет - съэкономлю ячейку памяти - не будет нужды в промежуточной переменной, будет действительно в 2 раза короче и читабельней....
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 00:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016