Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 17 - 18 - Система команд IA-32.ppt
Скачиваний:
47
Добавлен:
18.02.2023
Размер:
612.35 Кб
Скачать

Команды обработки бит

Команда тестирования бита:

BT база, смещение

База: РОН или ячейка памяти 16 или 32 бита Смещение: РОН или непосредственное значение (8 bit).

Выбирает бит в битовой строке (указываемой в базе) расположенный на позиции, указанной в операнде – смещение и записывает значение этого бита в флаг CF. Содержимое остальных флагов не определено.

Если базой является РОН, то инструкция берет остаток от деления смещения на 16 или 32 в зависимости от разрядности базы.

Если базой является память, то это адрес байта, содержащего нулевой бит последовательности.

Примеры:

bt

ax, 5

bt

[ebx], eax

 

 

Команды обработки бит

Команда тестирования бита и его установки: BTS база, смещение

База: РОН или ячейка памяти 16 или 32 бита Смещение: РОН или непосредственное значение (8 bit).

Выбирает бит в битовой строке (указываемой в базе) расположенный на позиции, указанной в операнде – смещение и записывает значение этого бита в флаг CF, а значение самого бита устанавливается в 1. Содержимое остальных флагов не определено.

Если базой является РОН, то инструкция берет остаток от деления смещения на 16 или 32 в зависимости от разрядности базы.

Если базой является память, то это адрес байта, содержащего нулевой бит последовательности.

Примеры:

bts

ecx, 23

bts

[ebx], edx

 

 

Команды обработки бит

Команда тестирования бита и его сброса: BTR база, смещение

База: РОН или ячейка памяти 16 или 32 бита Смещение: РОН или непосредственное значение (8 bit).

Выбирает бит в битовой строке (указываемой в базе) расположенный на позиции, указанной в операнде – смещение и записывает значение этого бита в флаг CF, а значение самого бита устанавливается в 0. Содержимое остальных флагов не определено.

Если базой является РОН, то инструкция берет остаток от деления смещения на 16 или 32 в зависимости от разрядности базы.

Если базой является память, то это адрес байта, содержащего нулевой бит последовательности.

Примеры:

btr

ecx, 23

btr

[ebx], edx

 

 

Команды обработки бит

Команда тестирования бита и его инвертирования: BTС база, смещение

База: РОН или ячейка памяти 16 или 32 бита Смещение: РОН или непосредственное значение (8 bit).

Выбирает бит в битовой строке (указываемой в базе) расположенный на позиции, указанной в операнде – смещение и записывает значение этого бита в флаг CF, а значение самого бита инвертируется. Содержимое остальных флагов не определено.

Если базой является РОН, то инструкция берет остаток от деления смещения на 16 или 32 в зависимости от разрядности базы.

Если базой является память, то это адрес байта, содержащего нулевой бит последовательности.

Примеры:

btс

ecx, 23

btс

[ebx], edx

 

 

Команды обработки бит

Команда сканирования бит вперед:

BSF назначение, источник

Назначение: РОН Источник: РОН или память

Осуществляет поиск в источнике первого младшего бита установленного в 1. Если бит найден, то его индекс записывается в назначение. Если источник равен нулю, то результат команды не определен.

Примеры:

bsf

eax, edx

bsf

ecx, [ebx]

 

 

Команды обработки бит

Команда сканирования бит назад:

BSR назначение, источник

Назначение: РОН Источник: РОН или память

Осуществляет поиск в источнике первого старшего бита установленного в 1. Если бит найден, то его индекс записывается в назначение. Если источник равен нулю, то результат команды не определен.

Примеры:

bsr

eax, edx

bsr

ecx, [ebx]

 

 

Команды работы с регистром флагов

STC

Установить флаг переноса (CF)

CLC

Сбросить флаг переноса (CF)

CMC

Инвертировать флаг переноса (CF)

CLD

Сбросить флаг направления (DF)

STD

Установить флаг направления (DF)

CLI

Сбросить флаг разрешения прерываний

 

 

(обработка прерываний запрещена)

STI

Установить флаг разрешения прерываний

 

 

(обработка прерываний разрешена)

PUSHF / PUSHFD

Записать содержимое регистра флагов в стек

POPF / POPFD

 

Загрузить регистр флагов из стека

LANF

 

Загрузить флаги в регистр AH

SAHF

 

Записать AH в регистр флагов

 

 

 

 

Команды передачи управления

Команда безусловного перехода: JMP адрес

Адрес: РОН, ячейка памяти, непосредственное значение.

Передает управление на другую команду без сохранения информации об адресе возврата.

Выделяют четыре вида перехода:

Ближний переход – внутри текущего сегмента кода.

Короткий переход – в пределах -128 до 127 байт относительно (E)IP.

Дальний переход – переход на инструкцию, расположенную в другом сегменте кода.

Переключение задач – переход на инструкцию, расположенную в другой задаче.

Пример:

jmp next

Команды передачи управления

Вызов подпрограммы:

CALL адрес

Адрес: непосредственное значение, РОН, ячейка памяти

Сохраняет в стеке адрес возврата и передает управление по адресу, указанному в операнде.

Выделяют четыре вида вызова:

Ближний вызов – внутри текущего сегмента кода,

Дальний вызов – переход в другой сегмент кода,

Вызов с изменением уровня привилегий,

Переключение задач.

Пример:

call print

Команды передачи управления

Возврат из вызова подпрограммы:

RET

RET значение

Значение – непосредственное значение размером 8 или 16 бит.

Осуществляет переход по адресу возврата сохраненному в стеке командой CALL. Дополнительно в параметре может быть указано количество байт стека, которые необходимо освободить.

Выделяют три вида возврата:

Возврат из ближнего вызова,

Возврат из дальнего вызова,

Возврат из вызова с изменением уровня привилегий.

Пример:

ret

ret 8