Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Зеркальное отображение битов


Автор: Unforgiven 30.4.2007, 13:57
Подскажите пожалуйста, как мне зеркально отобразить все байты в файле заданного размера за минимальный промежуток времени (Например была последовательность 10000000 11000000 10100000, а должна получиться 00000001 00000011 00000101)? У меня так медленно это получается при файле большого размера... Заранее благодарю

Автор: W4FhLF 30.4.2007, 14:47
Код

procedure TForm1.FormCreate(Sender: TObject);
var
  value:dword;
begin
  value := $FFFF0000; // 11111111111111110000000000000000
  asm
    push eax
    push ecx
    push edx

    xor eax,eax
    mov edx,value
    mov ecx,$20
    @loop:
    shr edx,1
    adc eax,eax
    dec ecx
    jne @loop
    // eax == 0000000000000001111111111111111b
    mov value,eax

    pop edx
    pop ecx
    pop eax
  end;
  ShowMessage(IntToHex(value, 8));
end;


PS Тебе dword'ы или байты обрабатывать надо? Что-то я не совсем понял. Мой код для dword'ов

Автор: Unforgiven 30.4.2007, 14:51
Нужно переводить байты. Просто я в заголовке ошибся. Извиняюсь smile 

Автор: W4FhLF 30.4.2007, 14:56
Ну, это немногое меняет:

Код

procedure TForm1.FormCreate(Sender: TObject);
var
  value:byte;
begin
  value := $F0; // 11110000
  asm
    push eax
    push ecx
    push edx

    xor eax,eax
    mov dl,value
    mov cl,8
    @loop:
    shr dl,1
    adc al,al
    dec cl
    jne @loop
    // eax == 00001111b
    mov value,al

    pop edx
    pop ecx
    pop eax
  end;
  ShowMessage(IntToHex(value, 2));
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)