Эта статья написана как руководство или путеводитель . ( Февраль 2016 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
В этой статье не процитировать какие - либо источники . ( сентябрь 2011 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Флаг ловушки позволяет работу процессора в одинарном шаге режиме. Если такой флаг доступен, отладчики могут использовать его для пошагового выполнения компьютерной программы .
Одношаговое прерывание [ править ]
Когда система получает указание на пошаговое выполнение, она выполнит одну инструкцию и затем остановится. Можно проверить содержимое регистров и ячеек памяти; если они верны, системе можно дать команду продолжить выполнение следующей инструкции. 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, поэтому пошаговый режим будет отключен во время процедуры обслуживания прерывания.
|