10.1.4. Отладочные регистры

Эти восемь 32-битных регистров (БРчО - БЯ7) позволяют программам, выпол­няющимся на уровне привилегий 0, определять точки останова, не код программ, например для отладки ПЗУ или программ, применяющих слож­ные схемы защиты от трассировки. Пример отладчика, использующего эти реги­стры, — БоШСЕ.

БЯ7 (БСЯ) - регистр управления отладкой

биты 31-30: поле ЕЕН для точки останова 3 (размер точки останова) 00 - 1 байт 01-2 байта

00 - не определен (например, для останова при выполнении) 11-4 байта биты 29-28: поле Я/\У для точки останова 3 (тип точки останова)

00 - при выполнении команды

01 - при записи

10 - при обращении к порту (если бит БЕ в регистре СЯ4 = 1)

11 - при чтении или записи

биты 27-26: поле ЕЕМ для точки останова 2 биты 25-24: поле 11/\У для точки останова 2 биты 23-22:' поле ЕЕИ для точки останова 1 биты поле       для точки останова 1

биты 19-18: поле ЕЕК для точки останова О биты 17-16: поле Я/ЛУдля точки останова О биты 15-14: 00

бит 13: бит ОБ - включает режим, в котором любое обращение к отладочному регистру, даже из кольца защиты 0, вызывает исключение #Б В (этот

бит автоматически сбрасывается внутри обработчика исключения)

биты 12-10: 001

бит 9: бит йЕ - если этот бит 0, точка останова по обращению к данным мо­жет не сработать или сработать на несколько команд позже, так что его лучше всегда сохранять равным 1

бит 7: бит 03 - точка останова 3 включена

бит 5: бит 02 - точка останова 2 включена

бит 3: бит 01 - точка останова 1 включена

бит 2: бит ОО - точка останова 0 включена

биты 8, 6, 4, 2, 0: биты ЕЕ, ЕЗ, Е2, Ы, ЕО - действуют так же, как йЕ - йО, но

обнуляются при переключении задачи (локальные точки

останова)

DR6 (DSR) - регистр состояния отладки - содержит информацию о причине

отладочного останова для обработчика исключения #DB биты 31-16: единицы

бит 15: ВТ - причина прерывания - отладочный бит в TSS задачи, в которую

только что произошло переключение бит 14: BS - причина прерывания - флаг трассировки TF из регистра FLAGS бит 13: BD - причина прерывания - следующая команда собирается писать

или читать отладочный регистр, и бит GD в DR7 установлен в 1. бит 12: О

биты единицы

бит 3: ВЗ - выполнился останов в точке 3 бит 2: В2 - выполнился останов в точке 2 бит 1: В1 - выполнился останов в точке 1 бит 0: ВО - выполнился останов в точке О

Процессор не очищает биты причин прерывания в данном регистре, так что об­работчику исключения #DB следует делать это самостоятельно. Кроме того, од­новременно может произойти прерывание по нескольким причинам, тогда более одного бита будет установлено.

DR4 - DR5 зарезервированы. На процессорах до Pentium или в случае, если

бит DE регистра CR4 равен нулю, обращение к этим регистрам приводит

к обращению к DR6 и DR7 соответственно. Если бит DE = 1, происходит исключение #UD

DRO - DR3 содержат 32-битные линейные адреса четырех возможных точек

останова по доступу к памяти

Если условия для отладочного останова выполняются, процессор вызывает исключение #DB.