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

 
 
> Операции над большими числами, Операции над большими числами
NickSmith
сообщение Mar 8 2010, 20:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 21-10-09
Пользователь №: 53 117



Для программирования DDS синтезатора, мне надо вычислять код частоты..
Исходные:
Есть константа в виде 5050. Далее мне нужно эту константу разделить на 1000 затем полученный результат разделить на 1 умноженную на 2^28
У полученного результата то что будет после запятой округлить в большую сторону..
Как все это выполнить на асме?? Я нашел только стандартные процедуры деления, которые описаны в апнотах. Но у них нет деления для нецелых числе. Точней только для 1 байтных чисел есть..

Подскажите, как бы все это реализовать??
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
NickSmith
сообщение Mar 12 2010, 11:17
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 21-10-09
Пользователь №: 53 117



Пробовал менять местами множимое и множитель с добавление регистра, но все то же..
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 12 2010, 13:31
Сообщение #3


Ambidexter
*****

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



Поменяйте порядок сдвига, как показано ниже, и будет вам щастье
Код
noad8:    ror    m16u3;shift right result byte 3
    ror    m16u1;rotate result byte 1 and multiplier High
    ror    m16u0;rotate result byte 0 and multiplier Low;
    ror    m16u2;rotate right result byte 2

На будущее, не надо именовать один и тот же регистр разными именами, это моветон. Да, и откажитесь от таких ужасных обозначений переменных, почему не взять просто prod0, prod1, prod2, prod3, a0,a1, b0, b1, b2?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
NickSmith
сообщение Mar 13 2010, 10:10
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 21-10-09
Пользователь №: 53 117



Цитата(=GM= @ Mar 12 2010, 16:31) *
На будущее, не надо именовать один и тот же регистр разными именами, это моветон. Да, и откажитесь от таких ужасных обозначений переменных, почему не взять просто prod0, prod1, prod2, prod3, a0,a1, b0, b1, b2?

Счастье не наступило.. Все равно не верный результат умножения..

Цитата(rx3apf @ Mar 12 2010, 17:03) *
Мда.. Не понос, так золотуха... Я не понял, надо что, реализовать это чудо на младших представителях семейства AVR, "тиньках" ? Нет ? Тогда на кой, простите, икс, брать _такую_ реализацию ? Есть же на то команда mul. Да, многоразрядное умножение довольно "развесистое", но все ж быстрее, чем цикл, да и компактнее при таких разрядностях. Блин, дал же _готовое_ деление, по регистру прибавить - и больше ничего не надо...


Я же писал. Я работаю с tiny2313. В нем к сожалению нет mul. Приходится что то изобретать.. Деление слишком громоздкое получается, аж под 750 тактов..
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 13 2010, 10:28
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(NickSmith @ Mar 13 2010, 13:10) *
Я же писал. Я работаю с tiny2313. В нем к сожалению нет mul.


Ну тогда ладно wink.gif Хотя платформа для задачи не самая лучшая - mega8 стоит столько же, но такие вещи делаются быстрее.
Цитата
Приходится что то изобретать.. Деление слишком громоздкое получается, аж под 750 тактов..

Чтобы реализовать через умножение при той же точности результата, разрядность придется увеличивать, и как бы не получилось еще больше. А по реализации - умножение "в столбик" еще проще, проверили бит множителя, если "1" - прибавили множимое к аккумулятору. Затем сдвинули множитель для следующей проверки, и множимое тоже сдвинули (умножили на 2). И так до конца множителя. Вот только множимое придется расширить до разрядности аккумулятора, и все вместе это будет довольно долго...
Go to the top of the page
 
+Quote Post
NickSmith
сообщение Mar 13 2010, 11:09
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 21-10-09
Пользователь №: 53 117



Цитата(rx3apf @ Mar 13 2010, 13:28) *
Ну тогда ладно wink.gif Хотя платформа для задачи не самая лучшая - mega8 стоит столько же, но такие вещи делаются быстрее.

Я еще только начинаю знакомиться с современными микропроцессорами.. Просто мне попались толковые книжки по 2313 вот я ее и взял за основу.. Изначально я вообще хотел на 89С2051 делать, но с ней очень хлопотно и неудобно.. А меги я изучу обязательно..
Цитата(rx3apf @ Mar 13 2010, 13:28) *
Чтобы реализовать через умножение при той же точности результата, разрядность придется увеличивать, и как бы не получилось еще больше. А по реализации - умножение "в столбик" еще проще, проверили бит множителя, если "1" - прибавили множимое к аккумулятору. Затем сдвинули множитель для следующей проверки, и множимое тоже сдвинули (умножили на 2). И так до конца множителя. Вот только множимое придется расширить до разрядности аккумулятора, и все вместе это будет довольно долго...

А есть ли какие нибудь толковые книжки, где бы об этом можно было почитать.. Я к сожалению разбазарил свою библиотеку по электронике и выч. технике, правда я ее собирал в конце 80ч в начале 90 х, но помню, что там были книжки, в которых эти вещи очень доходчиво описывались с очень понятными примерами.. Во всяком случае во времена Z80 у меня с этим проблем не возникало.. Сейчас все забыл напрочь.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- NickSmith   Операции над большими числами   Mar 8 2010, 20:23
- - rx3apf   Цитата(NickSmith @ Mar 8 2010, 23:23) Под...   Mar 8 2010, 20:39
|- - NickSmith   Цитата(rx3apf @ Mar 8 2010, 23:39) Или пл...   Mar 8 2010, 20:41
|- - rx3apf   Цитата(NickSmith @ Mar 8 2010, 23:41) Не ...   Mar 8 2010, 21:19
|- - NickSmith   Цитата(rx3apf @ Mar 9 2010, 00:19) Должны...   Mar 8 2010, 21:59
|- - rx3apf   Цитата(NickSmith @ Mar 9 2010, 00:59) А г...   Mar 8 2010, 22:52
|- - NickSmith   Цитата(rx3apf @ Mar 9 2010, 01:52) Почему...   Mar 9 2010, 10:01
- - cant   Вам нужно не числа сокращать, а формулу. Тобишь оп...   Mar 9 2010, 11:04
- - =GM=   Цитата(NickSmith @ Mar 8 2010, 20:23) Ест...   Mar 9 2010, 12:28
|- - NickSmith   Цитата(=GM= @ Mar 9 2010, 15:28) Поточнее...   Mar 9 2010, 13:07
|- - =GM=   Как вы вычисляете-то? Что ж из вас ответы клещами ...   Mar 9 2010, 17:21
|- - NickSmith   Цитата(=GM= @ Mar 9 2010, 20:21) Как вы в...   Mar 9 2010, 18:45
|- - rx3apf   Цитата(NickSmith @ Mar 9 2010, 21:45) И о...   Mar 9 2010, 19:24
|- - NickSmith   Цитата(rx3apf @ Mar 9 2010, 22:24) А ...   Mar 9 2010, 19:57
|- - =GM=   Правильно так: (5050/10^8)*2^28 =0x13BA0000000/0x5...   Mar 9 2010, 20:29
|- - NickSmith   Цитата(=GM= @ Mar 9 2010, 23:29) Правильн...   Mar 9 2010, 21:25
|- - rx3apf   Цитата(NickSmith @ Mar 10 2010, 00:25) То...   Mar 9 2010, 21:31
|- - NickSmith   Цитата(rx3apf @ Mar 10 2010, 00:31) Фигне...   Mar 9 2010, 21:33
|- - rx3apf   Цитата(NickSmith @ Mar 10 2010, 00:33) А ...   Mar 9 2010, 22:55
|- - NickSmith   Цитата(rx3apf @ Mar 10 2010, 01:55) Ну ка...   Mar 9 2010, 23:03
|- - rx3apf   Цитата(NickSmith @ Mar 10 2010, 02:03) Т....   Mar 10 2010, 07:44
|- - NickSmith   Цитата(rx3apf @ Mar 10 2010, 10:44) Я уже...   Mar 10 2010, 10:48
|- - rx3apf   Цитата(NickSmith @ Mar 10 2010, 13:48) Но...   Mar 10 2010, 10:56
|- - NickSmith   Цитата(rx3apf @ Mar 10 2010, 13:56) Мать-...   Mar 10 2010, 11:01
|- - ae_   Цитата(NickSmith @ Mar 10 2010, 19:01) Вс...   Mar 10 2010, 15:14
|- - NickSmith   Цитата(ae_ @ Mar 10 2010, 18:14) Если я п...   Mar 10 2010, 17:12
|- - ae_   Цитата(NickSmith @ Mar 11 2010, 01:12) Из...   Mar 10 2010, 17:27
- - _Pasha   ЦитатаПриближение действительного числа рациональ...   Mar 10 2010, 01:09
- - Genadi Zawidowski   Цитатаtiny2313 Взяли бы мегу восьмую и писали на W...   Mar 10 2010, 06:10
- - NickSmith   С одним вроде как все понятно теперь, но вот тепер...   Mar 10 2010, 19:44
|- - rezident   Цитата(NickSmith @ Mar 11 2010, 00:44) Чт...   Mar 10 2010, 22:49
|- - NickSmith   Цитата(rezident @ Mar 11 2010, 01:49) Дык...   Mar 11 2010, 00:00
- - NickSmith   Что то не получается у меня переделать умножение и...   Mar 11 2010, 23:52
|- - rx3apf   Цитата(NickSmith @ Mar 12 2010, 02:52) Чт...   Mar 12 2010, 14:03
|- - rx3apf   Цитата(NickSmith @ Mar 13 2010, 14:09) Я ...   Mar 13 2010, 11:18
|- - NickSmith   Цитата(rx3apf @ Mar 13 2010, 14:18) Да та...   Mar 13 2010, 11:31
- - NickSmith   Имеется формула код фазы = ( a*b )/c где а =знач...   Mar 14 2010, 10:12
- - ae_   Цитата(NickSmith @ Mar 14 2010, 18:12) Им...   Mar 14 2010, 15:25
- - NickSmith   Цитата(ae_ @ Mar 14 2010, 18:25) Далее, н...   Mar 14 2010, 23:05
- - ae_   Цитата(NickSmith @ Mar 15 2010, 07:05) Ог...   Mar 15 2010, 00:21
- - rezident   Цитата(NickSmith @ Mar 15 2010, 04:05) А ...   Mar 15 2010, 00:23


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 14:09
Рейтинг@Mail.ru


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