- •Лекции 17 -
- •Структура машинной
- •Структура машинной команды
- •Структура машинной команды
- •Структура машинной команды
- •Структура машинной команды
- •Сочетания операндов
- •Система команд
- •Система команд
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Прочие команды
- •Прочие команды
- •Прочие команды
- •Команды загрузки сегментных регистров
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды работы с регистром флагов
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
Команды обработки бит
Команда тестирования бита:
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