Assembler - язык неограниченных возможностей

         

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


Эти восемь 32-битных регистров (DR0 – DR7) позволяют программам, выполняющимся на уровне привилегий 0, определять точки останова, не модифицируя код программ, например для отладки ПЗУ или программ, применяющих сложные схемы защиты от трассировки. Пример отладчика, использующего эти регистры, — SoftICE.

DR7 (DCR) — регистр управления отладкой

биты 31 – 30: поле LEN для точки останова 3 (размер точки останова)

00 — 1 байт

01 — 2 байта

10 — не определен (например, для останова при выполнении)

11 — 4 байта

биты 29 – 28: поле R/W для точки останова 3 (тип точки останова)

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

01 — при записи

10 — при обращении к порту (если бит DE в регистре CR4 = 1)

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

биты 27 – 26: иоле LEN для точки останова 2

биты 25 – 24: поле R/W для точки останова 2

биты 23 – 22: поле LEN для точки останова 1

биты 21 – 20: поле R/W для точки останова 1

биты 19 – 18: поле LEN для точки останова 0

биты 17 – 16: поле R/W для точки останова 0

биты 15 – 14: 00

бит 13: бит GD — включает режим, в котором любое обращение к любому отладочному регистру, даже из кольца защиты 0, вызывает исключение #DB (этот бит автоматически сбрасывается внутри обработчика этого исключения)

биты 12 – 10: 001

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

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

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

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


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

биты 8, 6, 4, 2, 0: биты LE, L3, L2, L1, L0 — действуют так же, как GE – G0, но обнуляются при переключении задачи (локальные точки останова)

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

биты 31 – 16: единицы

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

бит 14: BS — причина прерывания — флаг трассировки ТF из регистра FLAGS

бит 13: BD — причина прерывания — следующая команда собирается писать или читать отладочный регистр, и бит GD в DR7 установлен в 1

бит 12: 0

биты 11 – 4: единицы

бит 3: B3 — выполнился останов в точке 3

бит 2: B2 — выполнился останов в точке 2

бит 1: B1 — выполнился останов в точке 1

бит 0: B0 — выполнился останов в точке 0

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

DR4 – DR5 зарезервированы. На процессорах до Pentium, или если бит DE регистра CR4 равен нулю, обращение к этим регистрам приводит к обращению к DR6 и DR7 соответственно. Если бит DE = 1, происходит исключение #UD

DR0 – DR3 содержат 32-битные линейные адреса четырех возможных точек останова по доступу к памяти

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


Содержание раздела