
06.01.2013, 03:10
|
 |
.
|
|
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
|
|
Как то так
Код:
// Сдвиг
if ShiftBit <> 0 then
if ShiftBit < 0 then
Src := Src shl Abs(ShiftBit) // сдвигаем влево на ShiftBit
else
Src := Src shr ShiftBit; // сдвигаем вправо на ShiftBit
// Обратный порядок байт
if CheckBox1.Checked then
asm
mov eax, Src // Загрузить число в аккумулятор
bswap eax // перевести
mov Src, eax // сохранить
end;
// Переставить байты
if CheckBox2.Checked then
asm
mov eax, Src // Загрузить число в аккумулятор
xchg al, ah // обменять байты
ror eax, 16 // вращать на 16 бит
xchg al, ah // обменять байты
ror eax, 16 // вращать на 16 бит
mov Src, eax // сохранить
end;
// Переставить полубайты
if CheckBox3.Checked then
asm
mov ecx, 4 // счётчик
mov eax, Src // Загрузить число в аккумулятор
@_loop:
ror al, 4 // вращать al на 4 бита
ror eax, 8 // вращать eax на 8 бит
loop @_loop // крутим счётчик
mov Src, eax // сохранить
end;
// Обратный порядок бит в байтах
if CheckBox4.Checked then
asm
mov eax, Src // Загрузить число в аккумулятор
xor edx, edx // обнулить edx
mov ecx, 32 // счётчик
@:
rcr eax, 1 // >> выдвигаем крайний бит в CARRY
rcl edx, 1 // << задвигаем из CARRY в крайний бит результата
loop @, ecx // крутим счётчик
mov Src, edx // сохранить
end;
// Инвертировать
if CheckBox5.Checked then
begin
end;
// XOR by
if CheckBox6.Checked and (edtMask.Text <> '') then
begin
Mask := HexToDec(edtMask.Text); // получаем маску
Src := Src xor Mask; // применяем к числу
end;
// удаляем лишние 0
St := IntToHex(Src, SrcLen);
if (Length(St) > SrcLen) and (St[Length(St)] = '0') then
while (Length(St) > SrcLen) and (St[Length(St)] = '0') do
SetLength(St, Length(St) - 1);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
|