Страница 159 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн окт 15, 2012 17:18:28
Gudd-Head
Со сдвигом можно зациклить

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн окт 15, 2012 18:38:04
Alexeyslav
А накладные расходы на цикл? кажется мне, цикл здесь выиграет(выиграет ли?) пару тактов и проиграет в наглядности.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 07:25:33
GP1
BOB51 писал(а):в произвольном порядке через флаг Т
через CY проще
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 08:40:37
Engineer_Keen
Цикл тут выиграет только по размеру кода, а по производительности проиграет. По размеру ROR/ROL 8 раз или BST/BLD одинаково, но ROR/ROL проще 8 раз скопипастить, а в BST/BLD нужно каждую строчку редактировать. В любом случае написать кусок кода быстрее чем этот пост

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 08:47:36
ploop
Кстати, обратный порядок бит не имеет никакой математической зависимости от прямого? Я не слышал (да и не соображу сейчас), а то может какие более извращённые варианты есть

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 09:42:14
Engineer_Keen
Для двух бит получается что-то вроде: (X1 XOR X2) AND (0b00 - (X1:X2)) OR (X1 = X2) AND (X1:X2), это даже сходу в код не переведешь...
А для 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 в вопросах и ответах
Добавлено: Вт окт 16, 2012 09:47:12
ploop
А для 8 думаю вообще будет
Вот и я о том. Но что-то мне подсказывает, что должна быть какая-нибудь трёхэтажная формула
Gudd-Head у нас в этом деле самый головастый, ща что-нибудь выдаст

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 09:54:49
Engineer_Keen
Ага, 3х этажная, логически-алгебраическая хреновина. Она точно есть, но вот искать ее думаю практического смысла нет

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 09:59:06
Gudd-Head
Эээ, чо сразу я?
Дальше ROR/ROL моя голова думать отказывается. Ну, если только как-то SWAP приплести для спортивного интереса

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 10:00:45
ploop
практического смысла нет
Не, мне не смысл нужен, просто интересно...
На практике мне ни разу не приходилось вертеть таким образом. Если надо выдать последовательный код, то просто выдаём его либо головой вперёд, либо ногами, в зависимости от ситуации. А внутри программы... для чего?
Ну, если только как-то SWAP приплести для спортивного интереса
Ага, я мусолил уже его мысленно... толку нет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 10:31:10
pyzhman
Остается только горевать по поводу отсутствия побитового SWAP.
PS. Табличное программирование форэва!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 10:45:44
ChipKiller
ИМХО все не "смертельно"....
Engineer_Keen писал(а):А для 8 думаю вообще будет

А чисто математически что-то вообще не видно закономерности, кроме табличной...
О! Кстати, если не жалко 256 байт флеша....
если сделать таблицу для одной тетрады, то не пострадает ни размер (всего 16 байт), ни быстродействие ...
PS. и
swap на разок пригодится

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 10:49:10
ploop
Быстродействие пострадает, даже по сравнению с обычным циклом, т.к. придётся городить огород со swap'ами. Не говоря о размере.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 10:53:56
ChipKiller
ploop писал(а):Быстродействие пострадает, даже по сравнению с обычным циклом....
... не совсем понял что значит
обычным циклом и swap в "отзеркаливании" применяется только 1 раз...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 11:05:57
pyzhman
Байты к сожалению не всегда зеркальны по тетрадам. Даже далеко не всегда. Посему придется два раза использовать таблицу.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 11:09:20
Engineer_Keen
К таблице придется обращаться 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 регистра.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 11:22:49
Kavka
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 11:37:48
ploop
Да, на Си хорошо получается, даже в одну строчку

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 11:38:31
pyzhman
Вы, господин хороший, название ветки прочитали? То-то же.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 11:44:52
Kavka
Классика - это книжка "Hacker's Delight" (Алгоритмические трюки для программистов).
А на каком языке реализовывать алгоритмы - ваше дело.
Не нравиться на Си - перепишите на ассемблере.
