|
поменять местами биты в байте, простой вопрос |
|
|
|
 |
Ответов
|
Apr 26 2010, 07:56
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Для AVR все равно быстрее так Код uint8_t rsb(uint8_t a) { a = ((a & 0x55) << 1) | ((a & 0xAA) >> 1); a = ((a & 0xCC) >> 2) | ((a & 0x33) << 2); return __swap_nibbles(a); } 15 тактов. Даже если на асм написать развернутый цикл со сдвигом через перенос получится 16 тактов. Код 5 a = ((a & 0x55) << 1) | ((a & 0xAA) >> 1); \ 00000000 2F10 MOV R17,R16 \ 00000002 7515 ANDI R17,0x55 \ 00000004 0F11 LSL R17 \ 00000006 7A0A ANDI R16,0xAA \ 00000008 9506 LSR R16 \ 0000000A 2B01 OR R16,R17 6 a = ((a & 0xCC) >> 2) | ((a & 0x33) << 2); 7 return __swap_nibbles(a); \ 0000000C 2F10 MOV R17,R16 \ 0000000E 7C1C ANDI R17,0xCC \ 00000010 9516 LSR R17 \ 00000012 9516 LSR R17 \ 00000014 7303 ANDI R16,0x33 \ 00000016 0F00 LSL R16 \ 00000018 0F00 LSL R16 \ 0000001A 2B01 OR R16,R17 \ 0000001C 9502 SWAP R16 \ 0000001E 9508 RET
|
|
|
|
|
Apr 27 2010, 01:53
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(KRS @ Apr 26 2010, 11:56)  Для AVR все равно быстрее так Код uint8_t rsb(uint8_t a) { a = ((a & 0x55) << 1) | ((a & 0xAA) >> 1); a = ((a & 0xCC) >> 2) | ((a & 0x33) << 2); return __swap_nibbles(a); } 15 тактов. Даже если на асм написать развернутый цикл со сдвигом через перенос получится 16 тактов. Код ... С первой половиной согласен — 6 тактов, вторая половина могла бы уложиться в 5 без лишних сдвигов. Итого 11 тактов против 15. Код uint8_t rsb(uint8_t a) { a = ((a & 0x55) << 1) | ((a & 0xAA) >> 1); return __swap_nibbles(a); a = ((a & 0x66) | (a & 0x99)); }
mov r17,r16 lsr r17 andi r17,0x55 lsr r16 andi r16,0xAA or r16,r17 mov r17,r16 swap r17 andi r17,0x66 andi r16,0x99 or r16,r17 (ret)
|
|
|
|
|
Apr 27 2010, 20:58
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(x736C @ Apr 27 2010, 05:53)  С первой половиной согласен — 6 тактов, вторая половина могла бы уложиться в 5 без лишних сдвигов. Итого 11 тактов против 15. Код uint8_t rsb(uint8_t a) { a = ((a & 0x55) << 1) | ((a & 0xAA) >> 1); return __swap_nibbles(a); a = ((a & 0x66) | (a & 0x99)); }
mov r17,r16 lsr r17 andi r17,0x55 lsr r16 andi r16,0xAA or r16,r17 mov r17,r16 swap r17 andi r17,0x66 andi r16,0x99 or r16,r17 (ret) у Вас какая-то полная фигня в асм тексте(и в С тоже) после lsr r17 и lsr r16 и неиспользования в дальнейшем флага С Вы младший бит ужо потеряли короче, меньше 13 тактов и не надейтесь получить  эта я Вам как "крупный специалист по перекладыванию битиков" гарантирую...
|
|
|
|
|
Apr 28 2010, 00:36
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(singlskv @ Apr 28 2010, 00:58)  у Вас какая-то полная фигня в асм тексте(и в С тоже) после lsr r17 и lsr r16 и неиспользования в дальнейшем флага С Вы младший бит ужо потеряли короче, меньше 13 тактов и не надейтесь получить  эта я Вам как "крупный специалист по перекладыванию битиков" гарантирую...  Вы правы, действительно ошибся. lsl надо заменить на rol, lsr на ror. 11 тактов и получится. Перепроверьте. Соответственно код на Си тоже надо подправить. Поправленный код Код mov r17,r16 rol r17 andi r17,0x55 ror r16 andi r16,0xAA or r16,r17 mov r17,r16 swap r17 andi r17,0x66 andi r16,0x99 or r16,r17
|
|
|
|
Сообщений в этой теме
Vny4ek поменять местами биты в байте Apr 25 2010, 19:34 zltigo Цитата(Vny4ek @ Apr 25 2010, 21:34) 0х72=... Apr 25 2010, 19:45 aaarrr Цитата(zltigo @ Apr 25 2010, 23:45) Не хи... Apr 25 2010, 19:47 ASN Vny4ek
тут есть Apr 25 2010, 19:53 Vny4ek я это вижу как цикл на 8 шагов
где проверяется зна... Apr 25 2010, 20:04 baralgin Сумбурное описание, но если правильно понял то тип... Apr 25 2010, 20:04 demiurg_spb Если вопрос звучал так: "Как зеркалить биты в... Apr 25 2010, 20:53 KRS IMHO цикл тут неоптимален.
Можно же стандартный сп... Apr 25 2010, 20:46 baralgin Цитата(KRS @ Apr 25 2010, 23:46) Можно же... Apr 25 2010, 20:57 zltigo Цитата(baralgin @ Apr 25 2010, 22:57) Цик... Apr 25 2010, 21:12 baralgin Не поленился, проверил (плохая привычка меряться..... Apr 25 2010, 21:55 zltigo Цитата(baralgin @ Apr 25 2010, 23:55) Не ... Apr 25 2010, 22:04 KRS Цитата(baralgin @ Apr 26 2010, 01:55) ps:... Apr 25 2010, 22:07 baralgin Цитата(zltigo @ Apr 26 2010, 01:04) Сильн... Apr 25 2010, 22:31 Vny4ek я проще себе это представлял, не знаю только как н... Apr 26 2010, 05:33 zltigo Цитата(Vny4ek @ Apr 26 2010, 07:33) я про... Apr 26 2010, 06:58 zltigo Цитата(KRS @ Apr 26 2010, 09:56) Для AVR ... Apr 26 2010, 08:14 demiurg_spb Цитата(KRS @ Apr 26 2010, 11:56) Даже есл... Apr 26 2010, 20:59  MrYuran Цитата(demiurg_spb @ Apr 27 2010, 00:59) ... Apr 27 2010, 09:06    singlskv Цитата(x736C @ Apr 28 2010, 04:36) Перепр... Apr 28 2010, 08:03 Vny4ek ЦитатаВсе плохо, Вы, как оказалось, не только напи... Apr 26 2010, 17:12 smac Цитата(Vny4ek @ Apr 26 2010, 21:12) Инфы ... Apr 26 2010, 19:45 sigmaN Vny4ek вот как-то так:
установить бит в байтеКодb ... Apr 26 2010, 19:55 Vny4ek sigmaN, спасибо большое. То что написали после вас... Apr 27 2010, 05:02 zltigo Цитата(Vny4ek @ Apr 27 2010, 07:02) sigma... Apr 27 2010, 07:35 sergeeff Jr. Я по простому сделал (как и сказали, при помощи та... Apr 27 2010, 06:15 akl Может.
Apr 27 2010, 09:16 sergeeff Jr. Блин крутые специалисты, вы проблему решаете или п... Apr 27 2010, 22:55 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 02:55)... Apr 27 2010, 23:29 sergeeff Jr. Я решаю задачи (взяв AVR с большим количеством пам... Apr 28 2010, 00:09 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 04:09)... Apr 28 2010, 00:22 sigmaN ЦитатаА во вторых человек настолько хреново разбир... Apr 28 2010, 02:55 ASN sergeeff Jr
Тут речь не оптимизации ради оптимизац... Apr 28 2010, 15:21 x736C Да, облажался. Мне показалось, АВР делает цикличес... Apr 28 2010, 09:04 sergeeff Jr. Такое впечатление, что все ваши начальники понимаю... Apr 28 2010, 13:56 zltigo Цитата(sergeeff Jr. @ Apr 28 2010, 15:56)... Apr 28 2010, 14:11 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 17:56)... Apr 28 2010, 14:13 sergeeff Jr. Байт конечно, очепятался я.
Я не говорил, что я н... Apr 28 2010, 16:49 KRS Цитата(sergeeff Jr. @ Apr 28 2010, 20:49)... Apr 28 2010, 22:11 sergeeff Если обратите внимание, в последних книгах по прог... Apr 28 2010, 17:35 aaarrr Цитата(sergeeff Jr. @ Apr 28 2010, 20:49)... Apr 28 2010, 18:05 sergeeff Это все на тему - сделать работоспособное устройст... Apr 28 2010, 20:41 Vny4ek Всем большое спасибо за помощь. Сам понимаю что ту... Apr 30 2010, 06:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|