Флаг-ловушка
Эта статья написана как руководство или руководство . ( февраль 2016 г. ) |
Флаг ловушки разрешает работу процессора в одношаговом режиме . Если такой флаг доступен, отладчики могут использовать его для пошагового выполнения компьютерной программы .
Одношаговое прерывание
[ редактировать ]Когда системе дано указание выполнить одношаговую операцию, она выполнит одну инструкцию, а затем остановится. Можно просмотреть содержимое регистров и ячеек памяти; если они верны, системе можно приказать продолжить выполнение следующей инструкции. Флаг ловушки Intel 8086 типа 1 и реакция на прерывание позволяют довольно легко реализовать одноэтапную функцию в системе на базе 8086. Если флаг ловушки установлен, 8086 будет автоматически выполнять прерывание типа 1 после выполнения каждой инструкции. Когда 8086 выполняет прерывание типа 1, он помещает регистр флага в стек .
Параметр
[ редактировать ]нет У 8086 инструкций для прямой установки или сброса флага ловушки. Эти операции выполняются путем помещения регистра флага в стек, изменения бита флага ловушки на то, что хочет программист, а затем извлечения регистра флага обратно из стека. Инструкции по установке флага ловушки:
PUSHF ; Push flags on stack MOV BP,SP ; Copy SP to BP for use as index OR WORD PTR[BP+0],0100H ; Set TF flag POPF ; Restore flag Register
На самом деле вы не используете флаг Trap таким образом, поскольку обычно вы отслеживаете программу с помощью процедуры обслуживания прерываний (ISR). Вы продолжаете выполнение программы с помощью IRET.
Int3ServiceRoutine: ; Stack: Ret, Flags PUSHA ; Stack: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI PUSH DS PUSH ES ; Stack: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI, DS, ES ... the ISR code using only integer (otherwise you must also store floating point registers) MOV BP,SP ; Stack: Ret, Flags, AX, CX, DX, BX, SP, BP, SI, DI, DS, ES MOV BP,[BP+10] ; Stored SP OR WORD PTR[BP+0],0100H ; Set TF flag in the stored Flag register POP ES POP DS POPA IRET ; continue execution for ONE instruction, then calling ISR again.
Сброс
[ редактировать ]Чтобы сбросить флаг ловушки, просто замените инструкцию OR в предыдущей последовательности на инструкцию:
- И СЛОВО PTR[BP+0],0FEFFH
Флаг ловушки сбрасывается, когда 8086 выполняет прерывание типа 1, поэтому одношаговый режим будет отключен во время процедуры обслуживания прерывания.
|