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

 
 
> Алгоритм, перестановка битов
Slavik_tz
сообщение Aug 1 2006, 05:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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регистров, и если сохранять регистр флагов, то еще больше
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
add
сообщение Aug 1 2006, 08:15
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Aug 1 2006, 16:45
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:59
Рейтинг@Mail.ru


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