реклама на сайте
подробности

 
 
> Перестановка бит в байте, получить зеркальное отображение
bbill
сообщение Nov 6 2008, 11:28
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 21-10-05
Пользователь №: 9 941



Появилась необходимость (из-за разводки) перевернуть байт:
было 0b76543210
стало 0b01234567

Можно тупо bld/bst, но хотелось бы покороче. Кто сталкивался с подобной задачей.

P.S. В поиске нашел только обсуждение о перестановке двух бит.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей С.
сообщение Nov 6 2008, 11:50
Сообщение #2





Группа: Новичок
Сообщений: 9
Регистрация: 15-02-08
Пользователь №: 35 076



Цитата(bbill @ Nov 6 2008, 16:28) *
Появилась необходимость (из-за разводки) перевернуть байт:
было 0b76543210
стало 0b01234567

Можно тупо bld/bst, но хотелось бы покороче. Кто сталкивался с подобной задачей.

P.S. В поиске нашел только обсуждение о перестановке двух бит.


Я когда такое делал, особо не задумывался, про bld/bst не знал, да и задачи экономии ресурсов не стояло. Поэтому получилась такая программа на C. (листинг после компиляции в WinAVR)

Код
static const uint8_t REVERT_NIBBLE[] =
{
    0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,
    0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf
};

uint8_t
Revert_Byte(uint8_t Data)
{
4ea:    98 2f           mov    r25, r24
4ec:    92 95           swap    r25
4ee:    9f 70           andi    r25, 0x0F; 15
4f0:    ed e4           ldi    r30, 0x4D; 77
4f2:    f1 e0           ldi    r31, 0x01; 1
4f4:    df 01           movw    r26, r30
4f6:    a9 0f           add    r26, r25
4f8:    b1 1d           adc    r27, r1
4fa:    8f 70           andi    r24, 0x0F; 15
4fc:    e8 0f           add    r30, r24
4fe:    f1 1d           adc    r31, r1
500:    80 81           ld    r24, Z
502:    82 95           swap    r24
504:    80 7f           andi    r24, 0xF0; 240
506:    9c 91           ld    r25, X
508:    89 2b           or    r24, r25
    return((REVERT_NIBBLE[Data >> 4]) | ((REVERT_NIBBLE[Data & 0x0F] << 4)));
}
50a:    99 27           eor    r25, r25
50c:    08 95           ret


IMHO на асме с bld/bst будет и короче и быстрее smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - 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   вот на телесистемах была пару раз ветка по этой те...   Nov 7 2008, 15:45
- - singlskv   Цитата(ARV @ Nov 7 2008, 18:45) вот на те...   Nov 7 2008, 21:39
- - 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_   Цитата(singlskv @ Nov 8 2008, 06:39) НЕ В...   Nov 8 2008, 10:43
- - singlskv   Цитата(ae_ @ Nov 8 2008, 13:43) 12 тактов...   Nov 8 2008, 20:22
- - Qwertty   Цитата(singlskv @ Nov 8 2008, 23:22) Увы,...   Nov 8 2008, 22:42
- - ae_   Цитата(Qwertty @ Nov 9 2008, 07:42) Идет ...   Nov 9 2008, 00:47
- - singlskv   Цитата(Qwertty @ Nov 9 2008, 01:42) Идет ...   Nov 9 2008, 08:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 12:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016