Перейти к содержанию
    

Давайте устраивать на форуме конкурсы

Ну он вроде двигает бесплатно практически в любой команде.

 

К сожалению, при индексации - сдвиг отнюдь не на любое количество бит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

помнится, была тут темка на счет отзеркаливания битов в байте - такого типа задачки предполагаются? ;) если склероз не подводит, самая короткая процедурка в 11 ассемблерных команд вышла (AVR8)....

Кстати, а что так много - на пике у меня 5 получилось:

movlw 8
Loop:
rlcf    Source, F
rrcf    Dest, F
addlw 0xFF
bnz   Loop

Чисто 5 минут подумал пока собачку выгуливал. С АВР не знаком, что у них такая система команд плохая, что в два раза больше команд надо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, а что так много - на пике у меня 5 получилось:

 

Речь об оптимизации по скорости без использования таблицы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Речь об оптимизации по скорости без использования таблицы.

тогда 16 -

rlcf Source, F
rrcf Dest, F
;; повторить 8 раз

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тогда 16 -

 

Это метод в лоб. На AVR он тоже, кстати, занимает 16 тактов. Есть способ быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это метод в лоб. На AVR он тоже, кстати, занимает 16 тактов. Есть способ быстрее.

Понял. На пике тоже получилось 11 команд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из книжки выудил:

x = (x & 0x55) << 1 | (x & 0xaa) >> 1;
x = (x & 0x33) << 2 | (x & 0xcc) >> 2;
x = (x & 0x0f) << 4 | (x & 0xf0) >> 4;

Будет любопытно взглянуть, что сделает Hi-Tech PICC компилятор. Последнее выражение - одна команда. А как с первыми двумя обойдется? (Проверю сам, позже, сейчас нет времени)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потом тоже сделать с портированием JPEG, потом MPEG, потом FS, TCP, кучей войс кодеков и т.д.

Это будет и полезно и забавно. Просто рассказы как начал портировать и обломался тоже будут интересны.

 

Ничего себе конкурсы...

:biggrin:

 

А чем тогда это будет отличаться от тем типа "подарю проект", которые, кстати, не очень часто появляются на форуме ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да ну. Все эти трюки давно собраны тут - http://graphics.stanford.edu/~seander/bithacks.html
поглядел на счет реверсирования битов - увы, не все трюки там :) я говорил о реверсировании битов в байте применительно для AVR на асме. то, что по ссылке для AVR будет скомпилировано далеко не в 11 команд :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понял. На пике тоже получилось 11 команд.

Не, на пике 12тактов

на авр 13 тактов

лучше не сделать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Не, на пике 12тактов

на авр 13 тактов

лучше не сделать

Лучше можно сделать. Но лучше не делать. :)

Берете один восмибитный порт МК и соединяете его с другим в обратном порядке. В один порт пишите, из другого читаете.

Итого всего две команды (а не такта). Но очень расточительно с точки зрения использования ног МК...

Возможны более "щадящие" варианты, с использованием только одного порта...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итого всего две команды (а не такта). Но очень расточительно с точки зрения использования ног МК...

У PIC это одна команда movff

Возможны более "щадящие" варианты, с использованием только одного порта...

В CPLD и FPGA это вообще не проблема...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
У PIC это одна команда movff

Одной командой не получится. Почему - подумайте. :)

В CPLD и FPGA это вообще не проблема...

Это да. Но речь, вроде бы, идет об МК.

 

Изменено пользователем @Ark

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У PIC это одна команда movff

Команда-то одна, да тактов все равно два.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Команда-то одна, да тактов все равно два.

Дело не в тактах. Эта команда сначала читает, а потом записывает.

А нужно - все наоборот. Сначала записать данные в порт, а затем извлечь результат из другого порта.

Причем, лучше это сделать с некоторой паузой между записью и чтением...

 

Изменено пользователем @Ark

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...