![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
||||
|
||||
|
Чего там разбираться
Код:
procedure TForm1.btnLeftClick(Sender: TObject);
begin
dec(ShiftBit);
if ShiftBit < -32 then
ShiftBit := -32;
lblShiftBit.Caption := Format(ShiftSt, [ShiftBit]);
Calculate;
end;
procedure TForm1.btnRightClick(Sender: TObject);
begin
inc(ShiftBit);
if ShiftBit > 32 then
ShiftBit := 32;
lblShiftBit.Caption := Format(ShiftSt, [ShiftBit]);
Calculate;
end;Тогда переводи число в String и работай уже с ним. |
|
#17
|
||||
|
||||
|
Теперь как просили, нули "срезаются".
![]() |
|
#18
|
|||
|
|||
|
Цитата:
Теперь "Обратный порядок байт" работает как надо. К утру вообще "конфетка" получится ![]() Или который сейчас у вас час? У меня 3.30 ночи... Последний раз редактировалось AVL, 05.01.2013 в 05:44. |
|
#19
|
|||
|
|||
|
Цитата:
Кальк переусердствует и теперь срезает нули спереди и сзади. Вводя 3 байтовое число получаейм 2-х байтовое. Пример: 40 E2 01 - "ОПБ" - 1Е 24. |
|
#20
|
|||
|
|||
|
Мне вот, честно, просто интересно. ТС решил просто тестером подработать или все-таки сам будет код писать?
|
|
#21
|
|||
|
|||
|
Цитата:
И, поверьте, радости моей не было предела. Последний раз редактировалось AVL, 06.01.2013 в 02:23. |
|
#22
|
|||
|
|||
|
Цитата:
|
|
#23
|
|||
|
|||
|
angvelem, добавьте, пожалуйста, комментов в Ваш текст, а то мне таки трудно разобраться. Про АСМ я вообще молчу.
Я понимаю, что Вам есть чем и без меня заняться, но если сможете выкроить время, как говорится ![]() Спасибо! |
|
#24
|
||||
|
||||
|
Что неясно, какие строки прокомментировать?
|
|
#25
|
|||
|
|||
|
Цитата:
Как в блок-схеме работает эта процедура. Как организован пересчёт данных которые выдаются в окна. Не как конкретно считаются данные в конкретном окне, а как это в принципе, в общем реализовано. Примерно такой вопрос. |
|
#26
|
||||
|
||||
|
Как то так
Код:
// Сдвиг
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); |