|
Алгоритм, перестановка битов |
|
|
|
Aug 1 2006, 05:37
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 4-07-06
Пользователь №: 18 558

|
Помогите найти алгоритм наиболее быстрый, для перестановки битов R->R ----- 0->7 1->6 2->5 3->4 4->3 5->2 6->1 7->0 1). Простой, сдвиговый с иполозование бита переноса региста флагов ldi cnt,8 loop: rol tmp ror tmp1 dec cnt brne loop mov tmp,tmp1 занимает 8байт памяти, время выполнения 5мкс, использование 3регистров, и если сохранять регистр флагов, то еще больше
|
|
|
|
|
 |
Ответов
|
Aug 1 2006, 08:15
|

Местный
  
Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459

|
Цитата занимает 8байт памяти, время выполнения 5мкс Я думаю Вы поторопились с расчетами... 1 команда занимает 1слово(2байта) Цитата Помогите найти алгоритм наиболее быстрый, для перестановки битов rol tmp ror tmp2 rol tmp ror tmp2 rol tmp ror tmp2 rol tmp ror tmp2 rol tmp ror tmp2 rol tmp ror tmp2 rol tmp ror tmp2 rol tmp ror tmp2 Наверное самый быстрый. 16 тактов (1мкс 16МГц)32 байт
Сообщение отредактировал add - Aug 1 2006, 08:18
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Aug 1 2006, 16:45
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(add @ Aug 1 2006, 12:15)  rol tmp ror tmp2 rol tmp ror tmp2 ... Наверное самый быстрый. 16 тактов (1мкс 16МГц)32 байт Вот так будет короче и быстрее: Код ; 13 words / 13 cycles ; tmp= abcdefgh mov tmp2,tmp ; tmp2= abcdefgh andi tmp2,0b01010101 ; tmp2= 0b0d0f0h andi tmp, 0b10101010 ; tmp= a0c0e0g0 bst tmp2,0 ; T=h lsr tmp2 ; tmp2= 00b0d0f0 bld tmp2,7 ; tmp2= h0b0d0f0 lsl tmp ; tmp= 0c0e0g00 C=a adc 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
|
|
|
|
|
Aug 1 2006, 20:36
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Или вот так: Код ; 13 words / 13 cycles ; tmp= abcdefgh mov tmp2,tmp ; tmp2= abcdefgh lsr tmp2 ; tmp2= 0abcdefg C=h ror tmp ; tmp= habcdefg C=h andi tmp, 0b10101010; tmp= h0b0d0f0 andi tmp2,0b01010101; tmp2= 0a0c0e0g lsl tmp2 ; tmp2= a0c0e0g0 C=0 lsl tmp2 ; rmp2= 0c0e0g00 C=a adc 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 Это если флаг Т не использовать. Блин, а похоже что короче и не получится, ну нету у AVR некоторых команд. Например XOR Rxx,K или ADC Rxx,K.
|
|
|
|
Сообщений в этой теме
Slavik_tz Алгоритм Aug 1 2006, 05:37 DeXteR 3->4
4->3
Эти биты можеш поменять мсестами ... Aug 1 2006, 06:22 Andy_F Для PIC'а это выглядит так:
<CODE>
;***... Aug 1 2006, 07:58  Slavik_tz Цитата(singlskv @ Aug 1 2006, 19:45) Цита... Aug 2 2006, 06:11 pokos Если использовать таблицу в 256 значений, то получ... Aug 1 2006, 08:23 Andy Mozzhevilov Цитата(Slavik_tz @ Aug 1 2006, 11:37) зан... Aug 1 2006, 08:26 _Bill Цитата(Slavik_tz @ Aug 1 2006, 08:37) Пом... Aug 1 2006, 12:25 CDT Цитата(Slavik_tz @ Aug 1 2006, 08:37) 1).... Aug 2 2006, 04:41 Slavik_tz Цитата(CDT @ Aug 2 2006, 07:41) Цитата(Sl... Aug 2 2006, 05:39 Slavik_tz Всем большое спасибо за помощь!!! Aug 2 2006, 05:27 add Цитата; 13 words / 13 cycles
; tmp= abcd... Aug 2 2006, 06:11 Andy Mozzhevilov Цитата(add @ Aug 2 2006, 12:11) да...век ... Aug 2 2006, 06:18 singlskv Цитата(add @ Aug 2 2006, 10:11) да...век ... Aug 2 2006, 07:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|