|
Ушел с форума
16379 / 7691 / 1080
Регистрация: 11.11.2010
Сообщений: 13,771
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|