· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Зеркально отображение бит

Посл.отвђт Сообщенiе


Дата: Сен 19, 2004 13:38:08

Подскажите пожалуйста самый красивый спопсоб зеркального отображения бит в байте, Например:
10110001 -> 10001101
10110001 -> 10001101

Раньше знал, сейчас что-то забыл!! Тупой вариант понятен типа использования команд rcl и rcr!!
, а как красивее??


Дата: Сен 19, 2004 13:57:14 · Поправил: Black_mirror

„ а как красивее??“
mov ah,al ;<= вот это меня переглючило
rol ax,4  ;<=
mov ebx,eax
and al,33h
xor ebx,eax
shr ebx,2
lea eax,[ebx+eax*4]
mov ebx,eax
and al,55h
xor ebx,eax
shr ebx,1
lea eax,[ebx+eax*2]

так красивее? 8)


Дата: Сен 19, 2004 21:28:39

Я нашел вроде вот такое решение:
  mov  ah,al
  shr  al,1
  and  al,01010101b
  shl  ah,1
  and  ah,10101010b
  or   al,ah

  mov  ah,al
  shr  al,2
  and  al,00110011b
  shl  ah,2
  and  ah,11001100b
  or   al,ah

  rol  al,4


Дата: Сен 20, 2004 12:37:33 · Поправил: dShell

у Уорена так написано:
unsigned rev(unsigned x){
  x = ( x & 0x55555555 ) << 1 | ( x >> 1 ) & 0x55555555;
  x = ( x & 0x33333333 ) << 2 | ( x >> 2 ) & 0x33333333;
  x = ( x & 0x0f0f0f0f ) << 4 | ( x >> 4 ) & 0x0f0f0f0f;
  x = ( x << 24 ) | (( x & 0xff00 )  << 8 ) | (( x >> 8 ) & 0xff00 ) | (x >> 24 );
  return x;
}


Дата: Сен 20, 2004 12:49:02

dShell Вроде то же, что и у меня... Только для dword.


Дата: Сен 20, 2004 13:31:03

черт, я опять условие не прочитал : „бит в байте“ :(.

_Chingachguk_, алгоритм тот же.


Дата: Сен 22, 2004 12:54:13

emergenter
Может такой понравится.

mov eax,znachenie
mov ebx,OF tabl
mov al,[ebx+eax]

tabl db 0
...
db 255


Дата: Сен 22, 2004 20:00:07

dShell
Последнюю строчку перед return можно заменить на:
x = ((x & 0x00FF00FF) ror 8) | ((x rol 8) & 0x00FF00FF);


Дата: Сен 22, 2004 23:11:39

Quantum
Пожалуй я только соглашусь с вами :))


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043