Подскажите пожалуйста самый красивый спопсоб зеркального отображения бит в байте, Например: 10110001 -> 10001101 Код (Text): 10110001 -> 10001101 Раньше знал, сейчас что-то забыл!! Тупой вариант понятен типа использования команд rcl и rcr!! , а как красивее??
Код (Text): 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)
Я нашел вроде вот такое решение: Код (Text): 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
у Уорена так написано: Код (Text): 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; }
emergenter Может такой понравится. mov eax,znachenie mov ebx,OF tabl mov al,[ebx+eax] tabl db 0 ... db 255
dShell Последнюю строчку перед return можно заменить на: x = ((x & 0x00FF00FF) ror 8) | ((x rol 8) & 0x00FF00FF);