|
Ушел с форума
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|