Ассемблер (ASM) для AVR в вопросах и ответах
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Со сдвигом можно зациклить 
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А накладные расходы на цикл? кажется мне, цикл здесь выиграет(выиграет ли?) пару тактов и проиграет в наглядности.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
BOB51 писал(а):в произвольном порядке через флаг Т
через CY проще
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Цикл тут выиграет только по размеру кода, а по производительности проиграет. По размеру ROR/ROL 8 раз или BST/BLD одинаково, но ROR/ROL проще 8 раз скопипастить, а в BST/BLD нужно каждую строчку редактировать. В любом случае написать кусок кода быстрее чем этот пост 
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кстати, обратный порядок бит не имеет никакой математической зависимости от прямого? Я не слышал (да и не соображу сейчас), а то может какие более извращённые варианты есть 
- Реклама
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для двух бит получается что-то вроде: (X1 XOR X2) AND (0b00 - (X1:X2)) OR (X1 = X2) AND (X1:X2), это даже сходу в код не переведешь...
А для 8 думаю вообще будет
А чисто математически что-то вообще не видно закономерности, кроме табличной...
О! Кстати, если не жалко 256 байт флеша, то вместо 16 ROR/ROL или BST/BLD сделать:
7 тактов вместо 16
А для 8 думаю вообще будет
А чисто математически что-то вообще не видно закономерности, кроме табличной...
О! Кстати, если не жалко 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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А для 8 думаю вообще будет![]()
Вот и я о том. Но что-то мне подсказывает, что должна быть какая-нибудь трёхэтажная формула
Gudd-Head у нас в этом деле самый головастый, ща что-нибудь выдаст
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ага, 3х этажная, логически-алгебраическая хреновина. Она точно есть, но вот искать ее думаю практического смысла нет 

- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Эээ, чо сразу я?
Дальше ROR/ROL моя голова думать отказывается. Ну, если только как-то SWAP приплести для спортивного интереса
Дальше ROR/ROL моя голова думать отказывается. Ну, если только как-то SWAP приплести для спортивного интереса
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
практического смысла нет
Не, мне не смысл нужен, просто интересно...
На практике мне ни разу не приходилось вертеть таким образом. Если надо выдать последовательный код, то просто выдаём его либо головой вперёд, либо ногами, в зависимости от ситуации. А внутри программы... для чего?

Ну, если только как-то SWAP приплести для спортивного интереса
Ага, я мусолил уже его мысленно... толку нет.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Остается только горевать по поводу отсутствия побитового SWAP.
PS. Табличное программирование форэва!
PS. Табличное программирование форэва!
Docendo discimus
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ИМХО все не "смертельно"....
PS. и swap на разок пригодится
если сделать таблицу для одной тетрады, то не пострадает ни размер (всего 16 байт), ни быстродействие ...Engineer_Keen писал(а):А для 8 думаю вообще будет
А чисто математически что-то вообще не видно закономерности, кроме табличной...
О! Кстати, если не жалко 256 байт флеша....
PS. и swap на разок пригодится
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Быстродействие пострадает, даже по сравнению с обычным циклом, т.к. придётся городить огород со swap'ами. Не говоря о размере.
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
... не совсем понял что значит обычным циклом и swap в "отзеркаливании" применяется только 1 раз...ploop писал(а):Быстродействие пострадает, даже по сравнению с обычным циклом....
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Байты к сожалению не всегда зеркальны по тетрадам. Даже далеко не всегда. Посему придется два раза использовать таблицу.
Docendo discimus
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
К таблице придется обращаться 2 раза, а это уже 14 тактов (по два раза 2xLDI Z, 2xZ+адрес+LPM) + выделение младшего полубайта адреса (2 раза) + склейка результатов 2х операций с таблицами. Больше 20 тактов и почти столько же флеша + 16 байт таблица... Неее, так не пойдет.
В общем варианта 3, все остальное ИМХО их комбинации.
1)
+минимум тактов (5),
- максимум флеша (256+6)
- ограничение на кратность начального адреса таблицы в 256 (без ограничения - 7 тактов и нужен регистр с нулем)
регистров 3 или 4
2) ROR/ROL или BST/BLD линейно
средняя скорость выполнения (16 тактов), средний размер кода, 2 регистра
3) ROR/ROL в цикле
+ минимум флеша
- самый медленный алгоритм (42 такт)
3 регистра.
В общем варианта 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 раз.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, на Си хорошо получается, даже в одну строчку 
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вы, господин хороший, название ветки прочитали? То-то же.
Docendo discimus
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Классика - это книжка "Hacker's Delight" (Алгоритмические трюки для программистов).
А на каком языке реализовывать алгоритмы - ваше дело.
Не нравиться на Си - перепишите на ассемблере.
А на каком языке реализовывать алгоритмы - ваше дело.
Не нравиться на Си - перепишите на ассемблере.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)



