Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Одношаговое прерывание [ править ]

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

Настройка [ править ]

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

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

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

Int3ServiceRoutine:; Стек: Ret, флаги  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, использующий только целое число (в противном случае вы также должны хранить регистры с плавающей запятой) МОВ БП, СП  ; Стек: 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.

Сброс [ править ]

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

AND WORD PTR [BP + 0], 0FEFFH

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