· команда CALL имеет длину от 3 до 7 байт, в то время как команда INT n – всего двухбайтная. Поэтому во многих случаях она может использоваться с той же целью, но гораздо эффективнее.
При этом, особенностью обладает команда INT3, которая, во-первых является однобайтной, а во-вторых результатом ее исполнения является останов процесса исполнения программы. Таким образом, включением этой короткой, однобайтной команды в программу, пользователь задает точку останова, которая может использоваться при отладке этой программы.
Как было уже упомянуто, микропроцессоры семейства Х86 способны обрабатывать 256 различных типов прерываний/исключений. Их перечень и основные характеристики приведены в таблице V.1. Первые 32 типа зарезервированы для внутрисистемных целей, остальные предоставлены пользователю для организации связей процессора с периферийными устройствами.
Табл. V.1
Перечень прерываний/исключений защищенного режима
Номер |
Описание |
Тип |
0 |
Ошибка переполнения при делении |
Fault |
1 |
Исключение при отладке |
Fault/Trap |
2 |
Немаскируемое прерывание (NMI) |
Interrupt |
3 |
Однобайтная команда останова (INT 3) |
Trap |
4 |
Исключение по переполнению (INTO) |
Trap |
5 |
Превышение границы массива (BOUND) |
Fault |
6 |
Недопустимый код команды |
Fault |
7 |
Сопроцессор FPU недоступен |
Fault |
8 |
Двойная ошибка |
Abort |
9 |
Нарушение границы сегмента сопроцессором (386/387) |
Fault |
10 |
Неразрешенный сегмент состояния задачи TSS |
Fault |
11 |
Отсутствие сегмента |
Fault |
12 |
Ошибка при обращении к стеку |
Fault |
13 |
Нарушение общей защиты |
Fault |
14 |
Отсутствие затребованной страницы |
Fault |
15 |
Зарезервировано |
- |
16 |
Ошибка операции FPU |
Fault |
17 |
Ошибка при выравнивании данных (486+) |
Fault |
18 |
Машинный контроль (P5+) |
Abort |
19 |
Исключение SSE |
Abort |
20…31 |
Зарезервированы |
|
32…255 |
Предоставлены пользователю |
Interrupt |
0…255 |
Двухбайтные команды прерываний INT N |
Trap |
Приведем краткую характеристику наиболее важных типов прерываний для общего представления их назначения.
Прерывание 0 - возникает привыполнении команд целочисленного деления DIV и IDIV, если делитель оказывается равным 0.
Прерывание 1 - возникает в трех случаях :
1) при работе процессора в пошаговом режиме после выполнения каждой команды;
2) при обращении к сегменту состояния задачи TSS, у которого бит Т (бит ловушки, используемый при отладке программного обеспечения) равен 1;
3) при останове в контрольных точках, которые заданы в регистрах отладки DR3…DR0.
Прерывание 2 – возникает при запросе по входу NMI, либо при выполнении команды программного прерывания INT2.
Прерывание 3 – возникает при выполнении однобайтовой команды программного прерывания INT3.
Прерывание 4 – возникает при контроле переполнения разрядной сетки после арифметических операций над числами со знаком. Оно имеет место, если микропроцессор выполняет команду INTО при установленном флаге OF=0.
Прерывание 5 - характеризует превышение границы массива. Имеет место при выполнении команды BOUND, если содержимое адресуемого регистра выходит за указанные пределы.
Прерывание 6 – это прерывание имеет место при попытке выполнения команды с неверным кодом или неправильной адресацией операнда, а также при использовании префикса LOCK с командой, для которой блокировка магистрали запрещена.
Прерывание 7 – возникает при недоступности математического сопроцессора FPU. В этом случае для выполнения поступившей команды процедура обслуживания должна реализовать программную эмуляцию FPU.
Прерывание 8 – двойная ошибка. Это прерывание имеет место, например, когда при вызове процедур обслуживания особых случаев, связанных с ошибками сегментов (прерывания типов 10…13), процессор выявляет новый особый случай, отличный от особого случая типа 14 («ошибка страницы).
Прерывание 10 – возникает при переключении задач, если вызывается неразрешённый TSS, который определяется как неразрешённым если:
1) заданный в его дескрипторе размер меньше 104 байт;
2) отсутствие, или неразрешенный селектор LDT;
3) сегмент CS не является исполняемым;
4) сегменты DS, ES, FS или GS недоступны для чтения;
5) нарушены правила защиты при обращении к SS или CS;
6) селектор сегмента (CS, SS, DS, ES, FS или GS) указывает на
дескриптор, выходящий за пределы дескрипторной таблицы.
Прерывание 11 – отсутствие сегмента в оперативной памяти (бит P его
дескриптора = 0).
Прерывание 12 – возникает при попытке загрузки сегментного регистра SS отсутствующим дескриптором (у которого его бит P = 0).
Прерывание 13 – нарушение общей защиты. Является наиболее общим типом прерывания, которое может появляться по причинам:
· нарушения правил защиты при обращении к памяти или внешним устройствам;
· нарушения границ сегмента при обращении к таблицам дескрипторов или сегментам;
· переключения на занятую задачу;
· записи в сегмент команд или данных, разрешенный только для чтения;
· передачи управления сегменту, который является сегментом данных;
· превышения максимальной допустимой длины команды 15 байт;
· и др.
Прерывание 14 – отсутствие доступа к странице при разрешенной страничной адресации (или при недостаточном уровне привилегий, или при ее отсутствии в оперативной памяти (P = 0)).
Прерывание 16 - ошибка операции FPU.
Прерывание 17 – возникает при формировании невыровненных операндов, если в регистре общего управления CR0 бит AM = 0. Данное прерывание реализуется только при выполнении программ с текущим уровнем привилегий CPL = 3.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.