В этой главе обсуждаются команды 80386 процессора, которые
используются в защищенном режиме. Все команды 80386 имеются в
наличии в защищенном режиме.
В защищенном режиме 80386-й может обрабатывать 32-битные
кодовые сегменты (по умолчанию, бит D в код-сегментном
дескрипторе равен 1) или 16-битные кодовые сегменты (D=0).
Использование 32-битных кодовых сегментов позволяет полностью
использовать 80386-й; 16-битные кодовые сегменты дают полную
совместимость с работой 80286-го в защищенном режиме.
Имеются размеры операндов 8 бит, 16 бит, 32 бита. Когда
80386-й обрабатывает 32-битные кодовые сегменты, по умолчанию
используется 32-битный способ адресации, как описано в главе
7. Когда он обрабатывает 16-битные кодовые сегменты, по
умолчанию используется 16-битный способ адресации, как
описано в главе 4. Когда выполняется 16-битный кодовый
сегмент, тем не менее, имееется несколько новых черт 80386.
Так, строго говоря, 16-битный защищенный режим 80386 - это
режим работы с большими возможностями, чем защищенный режим
80286. Имеются отладочные регистры 80386, и программы отладки
могут использовать их для особой отладочной производительности.
Также имеются регистры постраничных тестов и контрольные регистры,
используемые при подготовке введения защищенного режима.
Два новых сегментных регистра FS и GS позволяют повысить
эффективность программ. Имеются команды работы с битами и
команды двойного сдвига.
Как замечено, все команды 80386 имеются в защищенном
режиме. По сравнению с защищенным режимом 80286 имеются 12
новых команд. Новая совершенная сдвиговая форма Jcc команды
(команды условного перехода)
и совершенно стандартная форма IMUL-команды (команды
знакового умножения) имеются в защищенном режиме 80386.
Эти дополнительные команды позволяют новые программы
80386-го выполнять более эффективно, чем программы 8086 или 80286.
Заметим, что определенные команды защищенного режима могут
также быть выполнены в реальном режиме. Эти команды позволяют
инициализировать систему для работы в защищенном режиме, как
показано в главе 11. Как только защищенный режим установлен,
многие из этих команд могут быть выполнены только на
привелегированном нулевом уровне, самом привелегированном,
из-за их значительной роли в системном программировании.
В защищенном режиме максимальный размер сегмента определяется
содержимым дескриптора. Кодовые сегменты и сегменты данных могут
быть как 16-битными сегментами, имеющими максимальное смещение
FFFFh байт, так и 32-битными сегментами, имеющими максимальное
смещение FFFFFFFFh байт. Бит D сегментного дескриптора
(устанавливаемый по умолчанию) определяет 16-битные это сегменты
(D=0) или 32-битные (D=1). Граница сегмента требует, чтобы
эффективные адреса, сгенерированные в защищенном режиме, были
меньше или равны предельному размеру сегмента. В случае
многобайтных операндов, таким образом, требуется, чтобы весь
операнд в целом был смещен меньше или равно пределу. В
защищенном режиме попытка доступа к операндам, которые лежат
целиком или частично за пределами сегмента, приводит к нарушению
и вызывает исключительную ситуацию. ( Нарушение границ сегмента
дальше описывается в главе 16.) Все операнды, таким образом,
должны лежать внутри определенной границы сегмента.
Содержание
Вперед