Регистры отладки
Шесть доступных регистров отладки (DR0-DR3, DR6, DR7) расширяют возможности отладки МП. Они устанавливают точки останова по данным и позволяют устанавливать точки останова по командам без модификации сегментов программ. Регистры DR0-DR3 предназначены для хранения четырех линейных адресов точек останова. Регистры DR4 и DR5 зарезервированы. Формат регистров DR6 и DR7 показан на рисунке.
Регистр DR6 показывает текущее состояние точек останова:
B0-B3 (386+) - флаги выставляются, когда для соответствующей точки останова выполняется условие отладки.
BD - обнаружение доступа к регистрам отладки (386+). Флаг выставляется, если следующая инструкция собирается обратиться к регистрам отладки.
BS - пошаговая отладка (386+). Флаг выставляется, если особый случай отладки вызван ловушкой пошаговой отладки (EFLAGS.TF=1).
BT - переключение задачи (386+). Флаг выставляется, если произошло переключение на задачу, в сегменте TSS которой выставлен флаг ловушки отладки.
Регистр DR7 задает условие для точек останова:
L0-L3 - локальные точки останова (386+). Точки останова действуют только в текущей задаче и при переключении задачи сбрасываются.
G0-G3 - глобальные точки останова (386+). Точки останова действуют на все задачи и не сбрасываются при переключении задач.
LE и GE - точное обнаружение инструкции в точке останова (386,486,Pentium). Не поддерживаются P6 и более новыми моделями.
GD - защита регистров отладки (386+). Разрешение генерации исключения отладки в случае, если команда обратится к одному из регистров отладки.
RW0-RW3 - условие контрольной точки (386+):
- | исполнение инструкции по указанному адресу | |
- | запись данных по указанному адресу | |
- | обращение к порту ввода-вывода (когда CR4.DE=1 только для Pentium+) | |
- | чтение или запись данных по указанному адресу |
LEN0-LEN3 (386+) - длина контрольной точки для обращения к данным (если RWx=00, то LENx тоже должно быть 00):
- | 1 байт | |
- | 2 байта | |
- | резерв. | |
- | 4 байта |