|
Перестановка бит в байте, получить зеркальное отображение |
|
|
|
 |
Ответов
|
Nov 7 2008, 21:39
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ARV @ Nov 7 2008, 18:45)  вот на телесистемах была пару раз ветка по этой теме (поиск рулит) - там просто перлы были! 11 тактов, кажется или даже меньше! НЕ ВЕРЮ! Покажите <13 на AVR... на PIC можно за 12
|
|
|
|
|
Nov 8 2008, 10:43
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(singlskv @ Nov 8 2008, 06:39)  НЕ ВЕРЮ! Покажите <13 на AVR...
на PIC можно за 12 12 тактовКод Reverse_1:; реверс бит в байте (R4 - вход/выход)
; обмен средних бит в тетрадах mov R17,R4 andi R17,0b10011001 sub R4,R17 swap R4 or R4,R17 ; выделение четных/нечетных бит mov R17,R4 andi R17,0b10101010 sub R4,R17 ; обмен четных/нечетных бит out SREG,R4 ror R4 lsl R17 adc R4,R17
Порядок преобразования: a b c d e f g h C a f g d e b c h 0 a - g - e - c - 0 - f - d - b - h 0 h - f - d - b - - - g - e - c - - a h g f e d c b a 0
Единственный тонкий момент: обнуление I (запрет прерываний) С разбегу обойти его мне не удалось без добавления 13-го такта.
©argus98 - все права защищены :))
|
|
|
|
|
Nov 8 2008, 20:22
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ae_ @ Nov 8 2008, 13:43)  12 тактовКод Reverse_1:; реверс бит в байте (R4 - вход/выход)
; обмен средних бит в тетрадах mov R17,R4 andi R17,0b10011001 sub R4,R17 swap R4 or R4,R17 ; выделение четных/нечетных бит mov R17,R4 andi R17,0b10101010 sub R4,R17 ; обмен четных/нечетных бит out SREG,R4 ror R4 lsl R17 adc R4,R17
Порядок преобразования: a b c d e f g h C a f g d e b c h 0 a - g - e - c - 0 - f - d - b - h 0 h - f - d - b - - - g - e - c - - a h g f e d c b a 0
Единственный тонкий момент: обнуление I (запрет прерываний) С разбегу обойти его мне не удалось без добавления 13-го такта. Ну это не до конца честный вариант, Код out SREG,R4 ror R4 нужно менять на Код bst R4,0 lsr R4 bld R4,7 а это уже 13 тактов... Кстати говоря, тк тема снова всплыла, есть небольшая модификация 13тактового алгоритма которая позволяет отказаться от использования бита T в SREG: Код ; 13 words / 13 cycles ; ;tmp= abcdefgh mov tmp2, tmp ;tmp2= abcdefgh asr tmp ;tmp= aabcdefg C=h ror tmp2 ;tmp2= habcdefg C=h rol tmp ;tmp= abcdefgh C=a rol tmp ;tmp= bcdefgha andi tmp2, 0b10101010 ;tmp2= h0b0d0f0 andi tmp, 0b01010101 ;tmp= 0c0e0g0a add tmp, tmp2 ;tmp= hcbedgfa mov tmp2, tmp ;tmp2= hcbedgfa andi tmp2, 0b01100110 ;tmp2= 0cb00gf0 swap tmp2 ;tmp2= 0gf00cb0 andi tmp, 0b10011001 ;tmp= h00ed00a add tmp, tmp2 ;tmp= hgfedcba но увы все равно 13...  Цитата(Qwertty @ Nov 8 2008, 08:27)  Под "PIC" подразумевается 16-ая или 18-ая серии? Тогда интересно было бы взглянуть на реверс из трех инструкций... Увы, для PIC сейчас найти не могу, а писать заново не буду, Пики я только "со словарем", потаму как редко... Насколько я помню, пойдет даже на 10/12 серии..., экономия 1 такта там из-за аккамуляторной модели, типа можно сделать сдвиг и получить в результате 2 числа одно сдвинутое а второе исходное... как то так...
|
|
|
|
|
Nov 8 2008, 22:42
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(singlskv @ Nov 8 2008, 23:22)  Увы, для PIC сейчас найти не могу, а писать заново не буду, Пики я только "со словарем", потаму как редко... Насколько я помню, пойдет даже на 10/12 серии..., экономия 1 такта там из-за аккамуляторной модели, типа можно сделать сдвиг и получить в результате 2 числа одно сдвинутое а второе исходное... как то так... Идет даже на 10/12 серии!!! Напряжение нарастает  За 12 тактов 10/12/16/18 серии выполняют ТРИ коротких инструкции или 1,5 длинных. Как в это упаковать реверс 8 бит я не понимаю.
|
|
|
|
Сообщений в этой теме
bbill Перестановка бит в байте Nov 6 2008, 11:28 =GM= 1) Если есть два свободных порта, переставить пров... Nov 6 2008, 11:33 Maik-vs Цитата(bbill @ Nov 6 2008, 14:28) Появила... Nov 6 2008, 11:39 Сергей С. Цитата(bbill @ Nov 6 2008, 16:28) Появила... Nov 6 2008, 11:50 Vlad219i Цитата(bbill @ Nov 6 2008, 15:28) Можно т... Nov 6 2008, 12:45 МП41 Эх, не хватает однако подобной аппаратной команды.... Nov 6 2008, 13:08 CDT Цитата(bbill @ Nov 6 2008, 14:28) Появила... Nov 6 2008, 14:32 _Pasha Кодrol tmp1
ror tmp2
;........rept 8 раз
А в чем п... Nov 6 2008, 14:42 bbill Спасибо Maik-vs. И короче, и главное быстрее. А ещ... Nov 6 2008, 14:46 Maik-vs Цитата(bbill @ Nov 6 2008, 17:46) Спасибо... Nov 7 2008, 12:42 Aleksandr Baranov Bit Order Nov 6 2008, 16:03 zombi И всетаки мне кажется если скорость важнее то лучш... Nov 7 2008, 14:22  ARV Цитата(singlskv @ Nov 8 2008, 00:39) НЕ В... Nov 7 2008, 21:45  Qwertty Цитата(singlskv @ Nov 8 2008, 00:39) на P... Nov 8 2008, 05:27   _Pasha Цитата(Qwertty @ Nov 8 2008, 08:27) А для... Nov 8 2008, 07:10     ae_ Цитата(Qwertty @ Nov 9 2008, 07:42) Идет ... Nov 9 2008, 00:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|