|
Ушел с форума
16377 / 7689 / 1080
Регистрация: 11.11.2010
Сообщений: 13,769
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 14.11.2013, 07:16 [ТС] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 9 Синтаксис команды:ЛОГИЧЕСКИЕ КОМАНДЫ (часть 2/2) Команды обработки бит Команды сканирования бит Команда BSF (Побитное сканирование вперед = Bit Scan Forward) BSF <DEST>,<SRC> Возможные варианты команды: bsf reg,reg/mem Семантика команды: для проверки наличия единичных битов в операнде SRC. Если первый единичный бит числа находится в N-ой позиции, значит само число кратно 2N-1. Псевдокод: IF SRC=0 THEN ZF ELSE ZF DEST WHILE Bit(SRC,DEST)=0 DO DEST ENDDO ENDIF Алгоритм работы:
Найдем номер крайнего справа бита в регистре EBX, содержащего единицу
Команда BSR Синтаксис команды:(Побитное сканирование назад = Bit Scan Reverse) BSR <DEST>,<SRC> Возможные варианты команды: bsr reg,reg/mem Семантика команды: проверка наличия единичных битов в операнде SRC. Алгоритм работы:
ELSE ZF DEST WHILE Bit(SRC,DEST)=0 DO DEST ENDDO ENDIF Применение: команду BSR используют при работе на битовом уровне для определения позиции крайних слева единичных битов. Найдем номер крайнего слева бита в регистре EBX содержащего единицу.
Команды проверки и модификации бит Синтаксис команды:Команда BT (Проверка битов = Bit Test) BT <SRC>,<Index> Возможные варианты команды: bt reg/mem,reg bt reg/mem,imm Семантика команды: извлечение значения заданного бита в флаг CF. Алгоритм работы:
CF Применение: команду BT используют для определения значения конкретного бита в операнде SRC. Номер проверяемого бита задается содержимым операнда Index (значение числом из диапазона 0...31). После выполнения команды, флаг CF устанавливается в соответствии со значением проверяемого бита.
Команда BTC Синтаксис команды:(Проверка бита и его инверсия = Bit Test and Complement) BTC <SRC>,<Index> Возможные варианты команды: btc reg/mem,reg btc reg/mem,imm Семантика команды: извлечение значения заданного бита в флаг CF и изменение его значения в операнде SRC на обратное. Псевдокод: CF Bit(SRC, Index) Алгоритм работы:
Инвертирование 8-го бита регистра EBX:
Команда BTR Синтаксис команды:(Проверка бита с его сбросом в 0 = Bit Test and Reset) BTR <SRC >,<Index > Возможные варианты команды: btr reg/mem,reg btr reg/mem,imm Семантика команды: извлечение значения заданного бита в флаг CF и изменение его значения на нулевое. Псевдокод: CF Bit(SRC, Index) Алгоритм работы:
Проверка состояния бита 8 регистра EBX и его сброс
Команда BTS Синтаксис команды:(Проверка бита с его установкой в 1 = Bit Test and Set) BTS <SRC>,<Index> Возможные варианты команды: bts reg/mem, reg bts reg/mem, imm Семантика команды: извлечение значения заданного бита операнда SRC в флаг CF и установка этого бита в единицу. Псевдокод: CF Bit(SRC, Index) Алгоритм работы:
Номер проверяемого бита задается содержимым операнда Index (значение из диапазона 0...31). После выполнения команды флаг CF устанавливается в соответствии со значением исходного бита, то есть тем, что было до выполнения операции. Проверка состояния 0-го бита регистра EBX и его установка в 1
Работа с битами Для обнуления крайнего справа единичного бита (например, 01011000X AND(X – 1) Установка крайнего справа нулевого бита (01011100X OR(X+1) Для выделения крайнего справа единичного бита (01011000X AND(-X) Для выделения крайнего справа нулевого бита (10100111 (NOT X)AND(X+1) Для выделения завершающих нулевых битов (например, 01011000
X XOR(X-1) Распространение вправо крайнего правого единичного бита (например 01011000 X OR(X-1) Обнуление крайней справа непрерывной подстроки единичных битов (01011100((X OR(X-1))+1)AND X Синтаксис команды:Команды управления флагами микропроцессора Установка флага CF STC (SET Carry flag) Семантика команды: установка флага переноса CF. Псевдокод:[CEnter]EFLAGS.CF[bit 0] Сброс флага CF Синтаксис команды:CLC (CLEAR Carry flag) Семантика команды: сброс флага переноса CF Псевдокод: EFLAGS.CF[bit 0] Синтаксис команды:Инвертировать флаг CF CMC (COMPLEMENT Carry flag) Семантика команды: инвертирование флага переноса CF Псевдокод: EFLAGS.CF[bit 0] Алгоритм работы: Если CF=1, то после команды CMC флага переноса CF сбросится в ноль, если CF=0, то после команды CMC флага переноса CF установится в 1.Применение: команды STC, CLC, CMC применяют, как правило, для установления признака успешного или не успешного выполнения подпрограмм. Установка флага DF Синтаксис команды:STD (SET Direct flag) Семантика команды: установка флага направления DF в единицу. Псевдокод: EFLAGS.DF[bit 10] Синтаксис команды:Сброс флага DF CLD (CLEAR Direct flag) Семантика команды: сброс флага направления DF. Псевдокод: EFLAGS.DF[bit 10] Применение: в процессе циклического выполнения команд, значения в регистрах ESI и EDI автоматически модифицируются (уменьшаются или увеличиваются) в зависимости от длины элемента строки и значения флага направления DF. Если DF=0, значения в регистрах ESI и EDI увеличиваются (строка символов обрабатывается со стороны меньших адресов в сторону больших адресов). Если DF=1, значения в регистрах ESI и EDI уменьшаются (строка символов обрабатывается со стороны больших адресов в сторону меньших адресов).Установка флага IF Синтаксис команды:STI (SET Interrupt flag) Семантика команды: установка флага разрешения прерывания IF в единицу, разрешая процессору распознавать маскированные прерывания. Немаскированные прерывания распознаются процессором всегда, независимо от значения флага прерывания IF. Псевдокод: EFLAGS.IF[bit 9] Синтаксис команды:Сброс флага IF CLI (CLEAR Direct flag) Семантика команды: сброс флага разрешения прерывания IF. Псевдокод: EFLAGS.IF[bit 9] Применение: организация обработки критических участков программы, в которых прервать работу микропроцессора невозможно. Однако этим не стоит злоупотреблять, так как аппаратные прерывания использует и операционная система.Установка флага ZF Синтаксис команды: XOR AX,AX, или SUB AX, AX, либо любая другая команда, которая даст нулевой результат. Семантика команды: установка флага ZF. Псевдокод: EFLAGS.ZF[bit 6] Установка флага TF Синтаксис команды: INT 3 Семантика команды: установка флага TF в единицу.Псевдокод: EFLAGS.TF[bit 8] Применение: пошаговое выполнение программы с целью ее выявления ошибок.Одновременное изменение значения нескольких флагов Если необходимо изменить значения других флагов или одновременно изменить значения нескольких флагов используют следующие схемы:
Обобщаем. Как изменить (установить/сбросить) Нумеровать биты принято с нуля, причем младший бит (нулевой) имеет маску 1, первый – 2, второй – 4, третий – 8 и т.д, т.е. маска = 2n (или 1 shl n), где n – номер бита. Управлять битами можно с помощью инструкций and, or, xor, btr, bts и btc:определенный бит в байте?
Определить состояние бита можно с помощью инструкций test и shr (ror, rcr, sar) и инструкции bt (с помощью инструкций btr, bts и btc тоже можно определить состояние изменяемого бита):
Контрольные вопросы и упражнения
6
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|