Регистры отладки

Отладочные регистры появились в архитектуре микропроцессоров семейства х86, начиная с процессора Intel386. Эти регистры позволяют выставлять точки останова и перехватывать обращения процессора к памяти. В процессорах Pentium и выше можно останавливаться и по обращениям ввода-вывода.

(В свое время, в ЭВМ первого-второго и даже третьего поколений такие точки останова можно было задать на переключателях пульта оператора или системного инженера).

Отладочных регистров у процессора восемь: DR0...DR7.

Первые четыре регистра: DR0...DR3 используются для задания до четырех 32-разрядных адресов точек останова. Заданный адрес указывает байт, слово или двойное слово, попадание в который(ое) вызывает срабатывание ловушки останова. Что именно указывает адрес определяется полем LENi (i = 0...3) в регистре DB7. В этом же регистре, но только в поле RWi, задается тип перехватываемого обращения к памяти:

00 – выборка команды из памяти

01 – запись данных в память

10 – обращение к портам ввода-вывода (только для Pentium и выше при включении расширения отладки: бит DE регистра CR4)

11 – чтение или запись данных памяти.

Генерируемые при этом исключения различаются по типу. При выборке команды исключение классифицируется как отказ (fault) и обрабатывается до выполнения (этой выбираемой из памяти) команды. В случае обращения к данным исключение рассматривается как ловушка (trap) и обрабатывается после передачи (читаемых или записываемых) данных.

     
Линейный адрес точки останова 0 DR0
Линейный адрес точки останова 1 DR1
Линейный адрес точки останова 2 DR2
Линейный адрес точки останова 3 DR3
Зарезервировано DR4
Зарезервировано DR5
0/1 BT BS BD   0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 B3 B2 B1 B0 DR6
LEN3 R3 W3 LEN2 R2 W2 LEN1 R1 W1 LEN0 R0 W0     GD     0/1 GE LE G3 L3 G2 L2 G1 L1 G0 L0 DR7
                                                                 
    0/1   0 – для i386, i486 1 – для Pentium                        
                                                                   

Рисунок 4.44 – Регистры отладки

Для управления установкой отладочных точек используются два младших байта регистра DR7, биты которого имеют следующее назначение:

- бит GD (Global Debug Register Access Detect – обнаружение доступа к регистрам отладки), доступный только в реальном режиме или в защищенном режиме на уровне привилегии CPL = 0, позволяет отслеживать любые обращения к отладочным регистрам. При GD = 1 любая попытка обращения вызовет исключение 1 (отказ);

- биты GE и LE (Global и Local Exact data breakpoint match – глобальная и локальная точка немедленного останова по совпадению данных) определяют, будет ли исключение генерироваться сразу после завершения операции обмена при включенной ловушке на обращение к данным или оно произойдет несколько позже (возможно, никогда). Ловушка на обращения за командами всегда срабатывает немедленно. Бит LE автоматически сбрасывается при переключении задач, бит GE не изменяет своего состояния при таких переключениях;

- биты Gi и Li (Global и Local breakpoint enable – разрешение глобальной и локальной точек прерывания) разрешают срабатывание ловушек по отладочным точкам. Биты Li автоматически сбрасываются при переключении задач, биты Gi не изменяют своего состояния при таких переключениях. Автоматический сброс битов Li блокирует лишние срабатывания отладочных точек при переключениях задач.

Для упрощения определения отладчиком причины, вызвавшей срабатывание отладочной точки (исключение 1), могут использоваться биты регистра состояния отладки DR6 (Debug Status Register), идентифицирующие эти причины:

- биты Bi – срабатывание точки останова по регистру DRi,

- бит BS – ловушка пошагового режима,

- бит BT – ловушка переключения задач (по биту T в TSS),

- бит BD – отказ при попытке доступа к регистрам отладки при GD = 1.

Значения флагов Bi действительны только для контрольных точек с установленными битами Li и/или Gi.

Генерация исключений по контрольным точкам может быть отключена флагом RF регистра флагов процессора.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: