Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Команды поддержки языков высокого уровня.
Команда
| Описание
| ENTER Размер,Вложенность
| Подготовка стека для локальных параметров процедуры. Алгоритм:
· (EBP) => стек.
· (ESP) => промежуточная переменная fp.
Если Вложенность не 0, то коррекция EBP по режиму адресации и (EBP) => стек.
· (fp) => EBP.
· (fp) => стек.
· ESP = (ESP) - Размер
| LEAVE
| LEAVE from procedure – выход из процедкры.
Выполгяет действия, обратные комаде ENTER, приводя стек в исходное состояние:
· (EBP) => ESP – восстановление состояния стека до процедуры.
· EBP восстанавливается из стека.
| BOUND
РегистрИндекса, ГраницыМассива
| BOUND check array BOUNDs – контроль нахождения индекса в гоаницах массива.
РегистрИндекса содержит текущий индекс массива, а второй операнда определяет в памяти 2 слова или 2 двойных слова. Первое считается минимальным значением индекса, а второе - максимальным. Если текущий индекс оказывается вне границ, то генерируется команда INT 5. Используется для контроля нахождения индекса в заданных рамках, что является важным средством отладки.
|
Команды прерываний.
Команда
| Описание
| INT НомерПрерывания
| INTerrupt – прерывание.
Вызов прерывания с заданным номером. Алгоритм:
· В стек содержимое регистра флагов.
· В стек полный адрес возврата.
Сбрасывается флаг TF.
· Косвенный переход через элемент дескрипторной таблицы прерываний по НомерПрерывания.
| INTO
| INTerrupt if Overflow – прерывание, если переполнение.
Вызов прерывания с заданным номером. Алгоритм:
· Если флаг переполнения OF = 0, ничего не делается.
· Если флаг переполнения OF = 1, то вызов команды INT.
| IRET
| Interrupt RETurn – возврат из прерывания. Алгоритм:
· Если флаг NT = 0, то возврат в прерванную программу.
· Если флаг NT = 1, то переключение задач.
Команда извлекает из стека сохраненные в нем адрес возврата и регистр флажков. Бит уровня привилегий будет модифицироваться только в том случае, если текущий уровень привилегий равен 0.
|
Команды синхронизации процессора.
Команда
| Описание
| HLT
| HaLT – останов.
Останавливает процессор. Из него процессор может быть выведен внешним прерыванием или перезагрузкоц.
| LOCK
| LOCK signal prefix – блокировка.
Представляет собой префикс блокировки шины. Он заставляет процессор сформировать сигнал LOCK# на время выполнения находящейся за префиксом команды. Этот сигнал блокирует запросы шины другими процессорами в мультипроцессорной системе.
| NOP
| No Operanion – нет операции.
Холостая команда. Не производит никаких действий.
| WAIT
| WAIT – ожидание.
Синхронизация с сопроцессором, останавливает основной процессор до завершение операции в сопроцессоре.. Большинство команд сопроцессора автоматически вырабатывают команду.FWAIT, выполняющую то же самое.
|
Команды обработки цепочки бит.
Команда
| Описание
| BSFприемник, источник
| Bit Scan Forward – побитовое сканирование вперед.
Проверка наличия битов 1 в источнике
Номер первого бита, находящегося в состоянии 1, помещается в приемник, флажок ZF сбрасывается в 0. Если источник содержит 0, то флаг ZF=1, а содержимое приемника не определено.
| BSR приемник, источник
| Bit Scan Revers – побитовое сканирование назад.
Аналогична BSF. Разница в направлении просмотра..
| BT источник, индекс
| Bit Test – проверка битов.
Извлечение бита (с номером индекс) из источника, помещение в флаг CF..
| BTC источник, индекс
| Bit Test and Complement – проверка битов и инверсия.
Извлечение бита (с номером индекс) из источника, помещение в флаг CF, инверсия.
| BTR источник, индекс
| Bit Test and Reset – проверка битов и сброс в 0.
Извлечение бита (с номером индекс) из источника, помещение в флаг CF, сброс в 0.
| BTS источник, индекс
| Bit Test and Set – проверка битов и установка в 1.
Извлечение бита (с номером индекс) из источника, помещение в флаг CF, установка в 1.
|
Команды управления защитой.
Команда
| Описание
| LGDT источник_48
| Load Global Descriptor Table
Загрузка 48-битного регистра глобальной дескрипторной таблицы GDTR из памяти. Источник_48 указывает на 6-байтную величину. Это 16 бит размера и 32 бита базового адреса начала таблицы GDT.
| SGDT приемник_48
| Store Global Descriptor Table
Сохранить регистр GDTR в памяти.
| LIDT источник_16
| Load Interrupt Descriptor Table
Загрузка 16-битного регистра дескрипторной таблицы прерываний IDTR из памяти.
| SIDT приемник_16
| SIDT
Сохранить регистр IDTR в памяти.
| LLDT источник_16
| Load Local Descriptor Table
Загрузка 16-битного регистра локальной дескрипторной таблицы LLDR значением селектора глобальной дескрипторной таблицы GDT из памяти (16 бит).
| SLDT приемник_16
| Store Local Descriptor Table
Сохранить регистр LDTR в регистре или памяти (16 бит).
| LMSW источник_16
| Load Machine Status Word
Загрузка слова состояния машины MSW (младшие 16 бит регистра CRO) значением 16-битного слова памяти или регистра.
| SMSW приемник_16
| Store Machine Status Word
Сохранить MSW в регистре или памяти (16 бит).
| LTR источник_16
| Load Test Register
Загрузка регистра задачи TR селектором сегмента Tss задачи из регистра или памяти (16 бит).
| STR приемник_16
| Store Test Register
Сохранить регистр задачи TR в регистре или памяти (16 бит).
| LAR приемник, источник
| Load Access Rights byte
Загрузка в приемник байта прав доступа, дескриптор которого задан в источнике.
| LSL приемник, источник
| Losd Segment Limit
Загрузка в приемник лимита сегмента, дескриптор которого задан в источнике.
| ARPL приемник, источник
| Adjust RPL field of selector – настройка поля RPL селектора. Алгоритм:
· Если RPL_прием > RPL_источ, то флаг ZF=0.
· Если RPL_прием < RPL_источ, то флаг ZF=1, RPL_прием = RPL_источ.
| VERR сегмент
| VERify for Reading – проверка сегмента на чтение. Алгоритм:
· Проверка определения сегмента в таблицах CDT или LDT.
· Проверка, указывет ли дескриптор сегмента на сегмент кода или данных.
· Проверка, является ли сегмент записываемым.
· Проверка уровня привилегий..
· Если проверки положительны, то флаг ZF=1, иначе ZF=0.
| VERW сегмент
| VERify for Writing – проверка сегмента на чтение. Алгоритм:
· Проверка определения сегмента в таблицах CDT или LDT.
· Проверка, указывет ли дескриптор сегмента на сегмент кода или данных.
· Проверка, является ли сегмент считываемым.
· Если проверки положительны, то флаг ZF=1, иначе ZF=0.
|
|