![]() |
|
|
Регистрация | << Правила форума >> | 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 и работай уже с ним. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#17
|
||||
|
||||
![]() Теперь как просили, нули "срезаются".
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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
|
||||
|
||||
![]() Что неясно, какие строки прокомментировать?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |