Зеркально отображение бит

Тема в разделе "WASM.ASSEMBLER", создана пользователем emergenter, 19 сен 2004.

  1. emergenter

    emergenter New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2003
    Сообщения:
    16
    Адрес:
    СПб
    Подскажите пожалуйста самый красивый спопсоб зеркального отображения бит в байте, Например:

    10110001 -> 10001101
    Код (Text):
    1.  
    2. 10110001 -> 10001101
    3.  


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

    , а как красивее??
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035



    Код (Text):
    1.  
    2. mov ah,al ;<= вот это меня переглючило
    3. rol ax,4  ;<=
    4. mov ebx,eax
    5. and al,33h
    6. xor ebx,eax
    7. shr ebx,2
    8. lea eax,[ebx+eax*4]
    9. mov ebx,eax
    10. and al,55h
    11. xor ebx,eax
    12. shr ebx,1
    13. lea eax,[ebx+eax*2]


    так красивее? 8)
     
  3. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Я нашел вроде вот такое решение:


    Код (Text):
    1.   mov  ah,al
    2.   shr  al,1
    3.   and  al,01010101b
    4.   shl  ah,1
    5.   and  ah,10101010b
    6.   or   al,ah
    7.  
    8.   mov  ah,al
    9.   shr  al,2
    10.   and  al,00110011b
    11.   shl  ah,2
    12.   and  ah,11001100b
    13.   or   al,ah
    14.  
    15.   rol  al,4
     
  4. dShell

    dShell New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2004
    Сообщения:
    13
    у Уорена так написано:


    Код (Text):
    1.  
    2. unsigned rev(unsigned x){
    3.   x = ( x & 0x55555555 ) << 1 | ( x >> 1 ) & 0x55555555;
    4.   x = ( x & 0x33333333 ) << 2 | ( x >> 2 ) & 0x33333333;
    5.   x = ( x & 0x0f0f0f0f ) << 4 | ( x >> 4 ) & 0x0f0f0f0f;
    6.   x = ( x << 24 ) | (( x & 0xff00 )  << 8 ) | (( x >> 8 ) & 0xff00 ) | (x >> 24 );
    7.   return x;
    8. }
    9.  
     
  5. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    dShell Вроде то же, что и у меня... Только для dword.
     
  6. dShell

    dShell New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2004
    Сообщения:
    13
    черт, я опять условие не прочитал :
    :dntknw:.



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

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    emergenter

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



    mov eax,znachenie

    mov ebx,OF tabl

    mov al,[ebx+eax]



    tabl db 0

    ...

    db 255
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    dShell

    Последнюю строчку перед return можно заменить на:

    x = ((x & 0x00FF00FF) ror 8) | ((x rol 8) & 0x00FF00FF);
     
  9. dShell

    dShell New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2004
    Сообщения:
    13
    Quantum

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