Флаг ловушки

редактировать

A флаг прерывания разрешает работу процессора в одно- шаговом режиме. Если такой флаг доступен, отладчики могут использовать его для пошагового выполнения компьютерной программы.

Одношаговое прерывание

Когда система получает команду на однократное выполнение шаг, он выполнит одну инструкцию, а затем остановится. Можно проверить содержимое регистров и ячеек памяти; если они верны, системе можно дать команду продолжить выполнение следующей инструкции. Флаг прерывания Intel 8086 и ответ на прерывание типа 1 позволяют довольно легко реализовать одношаговую функцию в системе на базе 8086. Если установлен флаг прерывания, 8086 автоматически выполнит прерывание типа 1 после выполнения каждой инструкции. Когда 8086 выполняет прерывание типа 1, он помещает регистр флага в стек .

Настройка

У 8086 нет инструкции для непосредственной установки или сброса флага прерывания.. Эти операции выполняются путем помещения регистра флага в стек, изменения бита флага прерывания на то, что программист хочет, а затем выталкивания регистра флага обратно из стека. Инструкции по установке флага прерывания следующие:

PUSHF ; Помещать флаги в стек MOV BP, SP ; Скопируйте SP в BP для использования в качестве индекса OR WORD PTR [BP + 0], 0100H ; Установить флаг TF POPF ; Флаг восстановления Регистра

Фактически вы не используете флаг прерывания таким образом, потому что вы обычно контролируете программу из ISR. Вы продолжаете выполнение программы IRET.

Int3ServiceRoutine:; Стек: Ret, Flags PUSHA ; Стек: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI PUSH DS PUSH ES ; Стек: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI, DS, ES... код ISR, использующий только целое число (в противном случае вы также должны хранить регистры с плавающей запятой) MOV BP, СП ; Стек: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI, DS, ES MOV BP, [BP + 10] ; Сохраненный SP OR WORD PTR [BP + 0], 0100H ; Установить флаг TF в сохраненном регистре флагов POP ES POP DS POPA IRET ; продолжить выполнение ОДНОЙ инструкции, затем снова вызвать ISR.
Сброс

Чтобы сбросить флаг прерывания, просто замените инструкцию ИЛИ в предыдущей последовательности на инструкцию:

AND WORD PTR [BP + 0], 0FEFFH

Прерывание флаг сбрасывается, когда 8086 выполняет прерывание типа 1, поэтому пошаговый режим будет отключен во время процедуры обслуживания прерывания.

Регистр состояния
1514131211109876543210(позиция бита)
----O D I TS Z -A -P -C Флаги
Последняя правка сделана 2021-06-11 10:12:22
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте