Принципиальные возможности отладки, поддерживаемые в 80386,
обеспечиваются с помощью выделенных для этой цели отладочных ре-
гистров. Эти программируемые регистры действительно облегчают
использование внутрисистемных эмуляторов 80386, таких как ICE-368,
которые дают намек на большие отладочные возможности этих новых
регистров.
Отладочные регистры поддерживают прерывания для команд и
данных. В общем точка прерывания адресуется установкой триггера
отладочной исключительной ситуации, когда программа выполняет
код или выборку данных, сохраненных по адресу прерывания. Преры-
вание команды позволяет обнаружить выполнение команды по любому
заданному линейному адресу. Прерывание команды позволяет уста-
новку точки прерывания даже ROM-основанном коде. Прерывания по
адресу данных - важное новшество, т.к. они могут указать точки,
когда любой заданный операнд данных выбирается или записывается,
по какой бы то ни было неизвестной причине.
Предыдущие процессоры семейства 8086 имели только пошаговую
исключительную ситуацию и прерывание по коду операции, оба этих
средства также доступны для 80386.
В общем, всесторонние отладочные возможности, заложены в ап-
паратуру каждого 80386. Особенности отладки в 80386 предлагают
четыре типа отладочных возможностей:
1. Отладочные регистры 0-3, которые определяют четыре неза-
висимых адреса прерываний, которые могут быть индивидуально ис-
пользованы для прерывания команд и прерывания по адресу данных.
2. TF (флаг ловушки) бит в регистре EFLAG, который позволяет
программе выполняться в пошаговом режиме.
3. Команда прерывания (код CC), однобайтная команда, которая
может быть вставлена в код (в памяти, допускающей запись) по лю-
бому адресу), чтобы выработать прерывание команды по заданному
адресу.
<>4. T (ловушка) бит в 32-битном TSS, который позволяет немед-
ленно возникнуть ловушке при включении любой 32-битной задачи,
отмеченной установкой бита T в TSS.
Отладочные средства действуют как ловушка, чтобы обнаружить
условия, интересующие программиста. Тогда возникает такое усло-
вие, соответствующее средство отладки инициируется, вырабатывая
исключительную ситуацию (ситуация 1), чтобы включить подпрограм-
му обработки прерываний. Все средства отладки вырабатывают ситу-
ацию 1 при инициализации, кроме элемента 3, указанного выше, ко-
манды прерывания, которая вызывает прерывание в точке (прерыва-
ние 3).
Все средства, указанные выше, доступны в операциях защищен-
ного режима; только средства 1,2 и 3 доступны в операциях
действительного режима. Свойство 4, конечно, недоступно в опера-
циях действительного режима.
Отладочные регистры 80386 состоят из шести 32-битных регист-
ров, показанных на рис. 17.1. Они включают:
- четыре регистра точек прерывания; каждый содержит линейный
адрес точки прерывания, которая сможет использоваться как точка
прерывания команды или прерывания по адресу данных.
- один управляющий отладочный регистр, используемый для оп-
ределения и дает возможность четырем точкам прерывания быть за-
данными в регистрах точек прерывания.
- один отладочный регистр состояния, который, когда возника-
ет отладочная исключительная ситуация, указывает, какое из
средств отладки была инициализировано.
Используя новые команды для этих целей, эти регистры доступны
для чтения и записи в действительном режиме и на нулевом уровне
привилений защищенного режима.
DRO-DR3, регистры точек прерывания, каждый содержит следу-
ющую область.
Линейный адрес точки прерывания - 32-битный линейный адрес
который идентифицирует зону точки прерывания.
Регистры DR4 и DR5 не реализованы в 80386. Они могут быть
реализованы в будущих процессорах.
DR7, управляющий отладочный регистр, содержит несколько об-
ластей для будущего определения размера области прерывания, что-
бы определить тип доступа, который может инициализировать каждое
прерывание, и дает возможность произойти каждому прерыванию. Об-
ласти DR6 повторяются четырежды, по одной для каждой из четырех
точек прерывания. Следующее описание применяется для четырех
идентичных областей в регистре DR6:
Таблица 17.1
Расшифровка области LEN
Расшифровка LEN Размер Зона прерывания
00 1 байт По любому линейному адресу
01 2 байта Выравненная по границе слова
10 не определено, не используется
11 4 байта Выравненная по границе двойного
слова
1. Область LEN (длина) указывает размер зоны прерывания, ко-
торая может составлять 1, 2 или 4 байта. Область LEN расшифровы-
ваться в таблице 17.1.
Каждая область LEN управляет размером соответствующей облас-
ти прерывания, управляя всеми младшими битами регистра прерыва-
ния, используемыми для обнаружения точки прерывания. Двухбитные
точки прерывания используют бит 0 линейного адреса, в результате
имеем выравненную по границе слова зону прерывания.Четырехбитные
точки прерывания игнорируют биты 0 и 1 линейного адреса, в ре-
зультате имеем выравненную по границе двойного слова зону преры-
вания.
2. RW (чтение запись) определяет тип доступа, который может
инициализировать зону прерывания. Область RW определена в табли-
це 17.2.
3. G и L, глобальные возможности или локальные возможности,
два бита разрешения для каждого прерывания. Если по крайней мере
один из битов разрешения установлен в 1, соответствующее преры-
вание возможно. Нет совершенно никаких различий в функциях бит,
различные наименования только намекают на принятые наименования
в мультизадачных системах, где один из бит разрешения может быть
установлен глобальной отладочной программой, а другой - ло-
кальной отладочной подпрограммой.
4. GE и LE, глобальная точность или локальная точность, два
бита точности, затрачивающие прерывания по адресу данных. Если
по крайней мере один из обоих бит установлен в 1, о любом преры-
вании по адресу данных будет сообщено точно после завершения ко-
манды, которая послужила причиной пересылки (0 прерывании коман-
ды всегда сообщается точно, независимо от GE и LE бит). Если не
выбрано точное совпадение прерывания по адресу данных, о преры-
вании по адресу данных не может быть сообщено до времени выпол-
нения нескольких последующих команд - или может даже вообще не
быть сообщения. Если вы хотите несомненно отловить все прерыва-
ния по адресу данных, вы должны установить один из этих бит точ-
ности, пока идет отладка. Точность сообщения обеспечивается тем,
что исполняющее устройство 80386 вынуждено ждать завершения лю-
бой передачи операнда данных перед началом выполнения следующей
команды. Это будет немного замедлять выполнение программы
80386.
Таблица 17.2
Расшифровка области RW
RW расшифровка Тип доступа, который может инициализировать
прерывание
00 Только выполнение команды
01 Только запись данных
10 Неопределено, не используется
11 Только чтение или только запись
DR6, отладочный регистр состояния, содержит несколько облас-
тей, обнаруживающих причину отладочной исключительной ситуации,
когда она возникает. Каждая область - однобитный флаг, соот-
ветствующий одной из возможностей отладки, каждый из которых мо-
жет быть автоматически установлен 80386 как вектор подпрограммы
исключительной ситуации 1. Эти биты никогда не сбрасываются авто-
матически, однако подпрограмма исключительной ситуации 1 несет
ответственность за сброс этих флагов.
1. BO, B1, B2 и B3, точки прерываний 0, 1, 2 и 3, если уста-
новлены в 1, указывают, что связанное с этими точками прерывание
было инициализировано.
2. BD, отладочные регистры 1, используемые ICE-386, если ус-
тановлены в 1, указывают, что попытка чтения или записи получает
отказ, т.к. ICE 386 внутрисхемный эмулятор использует эти
средства. Таким образом, во время операций ICE-386 для отладки,
программные отладчики не могут быть использованы одновременно.
3. BS, отладочная ситуация благодаря пошаговому режиму, если
установлен в 1, указывает, что исключительная ситуация 1 была вы-
работана, поскольку TF (флаг одношаговый работы) был установлен в
регистре EFLAG. Когда отладчик находится в пошаговом режиме через
целевую программу, ожидается, что BS установлен.
4. BT, отладочная ситуация благодаря ловушке переключения -
задач, если установлен в 1, указывает, что была выработана исклю-
чительная ситуация 1, поскольку переключения задач активизировала
задачу, в которой бит T (ловушка) 32-битного TSS установлен в 1.
Если команда, начинающаяся с адреса точки прерывания близка к
выполнению, возникает условие прерывания и, если прерывание воз-
можно, немедленно возникает ситуации 1 как ошибка перед тем, как
команда выполнится.
Заметим, что только предвыборка команды не инициализирует
прерывание: команда может действительно быть близка к выполнению
во время того, когда происходит прерывание.
Прерывание по адресу данных может быть установлено записью
линейного адреса точки прерывания в отладочный регистр. Для пре-
рывания по адресу данных RW область должна быть 01 (только запись
данных) или 11 (запись или чтение данных). LEN область может за-
давать любую определенную величину: (00, 10 или 11 (для 1-, 2-,
или 4 байтной зоны прерывания).
Если выборка данных полностью или частично попадает внутрь
зоны прерывания по адресу данных, возникает условие прерывания по
адресу данных, и, если прерывание возможно, исключительная ситу-
ация 1 возникает как ловушка после того, как происходит выборка.
Тонкой чертой, которая усовершенствует действие средств от-
ладки 80386, является RF (флаг перезапуска) бит в EFLAG. RF бит в
EFLAG, когда он установлен в 1, может запретить прерывание ко-
манд, когда обработчик исключительной ситуации 1 возвращается к
той же самой команде, которая до сих пор является точкой прерыва-
ния команды.
80386 автоматически устанавливает RF в изображении EFLAG в
стеке, когда EFLAG записывается в стек, когда 80386 входит в лю-
бой обработчик ошибки. Однако команда IRET в конце обработчика
ошибки, которая выталкивает изображение EFLAG из стека, будет ус-
танавливать RF в регистре EFLAG, выполнение будет возобновлено с
адреса прерывания без выработки другого прерывания по ошибке.
Если, после ошибки отладки, RF установлен в 1 и обработчик
повторит ошибочную команду, возможно, что повторение команды вы-
зовет другие ошибки. Т.к. любой обработчик ошибки устанавливает
RF флаг, повторение команды после этих ошибок будет также выпол-
няться с RF=1, так что точка прерывания при отладке для этой од-
ной команды будет продолжать игнорироваться. Процессор автомати-
чески очищает RF только после успешного завершения команды.
Заметим, что программист не нуждается в явной установке или
сброс RF для корректных операций. Процессор автоматически уста-
навливает RF в 1, чтобы запретить повторение отладочной искючи-
тельной ситуации. Когда команда повторяется. Процессор автомати-
чески сбрасывает RF в 0 при успешном завершении команды, так что
прерывание команд не будет запрещено для будущих команд.
Содержание