Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

Со сдвигом можно зациклить :idea:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

А накладные расходы на цикл? кажется мне, цикл здесь выиграет(выиграет ли?) пару тактов и проиграет в наглядности.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

BOB51 писал(а):в произвольном порядке через флаг Т

через CY проще
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

Цикл тут выиграет только по размеру кода, а по производительности проиграет. По размеру ROR/ROL 8 раз или BST/BLD одинаково, но ROR/ROL проще 8 раз скопипастить, а в BST/BLD нужно каждую строчку редактировать. В любом случае написать кусок кода быстрее чем этот пост :))
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Кстати, обратный порядок бит не имеет никакой математической зависимости от прямого? Я не слышал (да и не соображу сейчас), а то может какие более извращённые варианты есть :)
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

Для двух бит получается что-то вроде: (X1 XOR X2) AND (0b00 - (X1:X2)) OR (X1 = X2) AND (X1:X2), это даже сходу в код не переведешь...
А для 8 думаю вообще будет :facepalm:
А чисто математически что-то вообще не видно закономерности, кроме табличной...
О! Кстати, если не жалко 256 байт флеша, то вместо 16 ROR/ROL или BST/BLD сделать:

Код: Выделить всё

LDI ZL,Low(Table*2)
LDI ZH,High(Table*2)
ADD ZL,R16
ADC ZH,ZERO
LPM R16,Z
...
Table: .db 0,0x80,0x40...

7 тактов вместо 16 :))
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

А для 8 думаю вообще будет :facepalm:

Вот и я о том. Но что-то мне подсказывает, что должна быть какая-нибудь трёхэтажная формула :)
Gudd-Head у нас в этом деле самый головастый, ща что-нибудь выдаст :)))
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

Ага, 3х этажная, логически-алгебраическая хреновина. Она точно есть, но вот искать ее думаю практического смысла нет :dont_know:
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

Эээ, чо сразу я?
Дальше ROR/ROL моя голова думать отказывается. Ну, если только как-то SWAP приплести для спортивного интереса :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

практического смысла нет

Не, мне не смысл нужен, просто интересно...

На практике мне ни разу не приходилось вертеть таким образом. Если надо выдать последовательный код, то просто выдаём его либо головой вперёд, либо ногами, в зависимости от ситуации. А внутри программы... для чего? :dont_know:

Ну, если только как-то SWAP приплести для спортивного интереса

Ага, я мусолил уже его мысленно... толку нет.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Остается только горевать по поводу отсутствия побитового SWAP.
PS. Табличное программирование форэва!
Docendo discimus
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ChipKiller »

ИМХО все не "смертельно"....
Engineer_Keen писал(а):А для 8 думаю вообще будет :facepalm:
А чисто математически что-то вообще не видно закономерности, кроме табличной...
О! Кстати, если не жалко 256 байт флеша....
если сделать таблицу для одной тетрады, то не пострадает ни размер (всего 16 байт), ни быстродействие ...
PS. и swap на разок пригодится :)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Быстродействие пострадает, даже по сравнению с обычным циклом, т.к. придётся городить огород со swap'ами. Не говоря о размере.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ChipKiller »

ploop писал(а):Быстродействие пострадает, даже по сравнению с обычным циклом....
... не совсем понял что значит обычным циклом и swap в "отзеркаливании" применяется только 1 раз...
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Байты к сожалению не всегда зеркальны по тетрадам. Даже далеко не всегда. Посему придется два раза использовать таблицу.
Docendo discimus
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

К таблице придется обращаться 2 раза, а это уже 14 тактов (по два раза 2xLDI Z, 2xZ+адрес+LPM) + выделение младшего полубайта адреса (2 раза) + склейка результатов 2х операций с таблицами. Больше 20 тактов и почти столько же флеша + 16 байт таблица... Неее, так не пойдет.
В общем варианта 3, все остальное ИМХО их комбинации.
1)

Код: Выделить всё

LDI ZH,High(START*2)
MOV ZL,R16
LPM R16,Z

+минимум тактов (5),
- максимум флеша (256+6)
- ограничение на кратность начального адреса таблицы в 256 (без ограничения - 7 тактов и нужен регистр с нулем)
регистров 3 или 4
2) ROR/ROL или BST/BLD линейно
средняя скорость выполнения (16 тактов), средний размер кода, 2 регистра
3) ROR/ROL в цикле
+ минимум флеша
- самый медленный алгоритм (42 такт)
3 регистра.
Последний раз редактировалось Engineer_Keen Вт окт 16, 2012 11:27:34, всего редактировалось 1 раз.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Kavka »

Классику надо знать!!! :))
http://www.hackersdelight.org/HDcode/reverse.c.txt
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Да, на Си хорошо получается, даже в одну строчку :))
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Вы, господин хороший, название ветки прочитали? То-то же.
Docendo discimus
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Kavka »

Классика - это книжка "Hacker's Delight" (Алгоритмические трюки для программистов).
А на каком языке реализовывать алгоритмы - ваше дело.
Не нравиться на Си - перепишите на ассемблере. :)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Ответить

Вернуться в «AVR»