|
Часть 22
Часть IV Совместимость
Глава 21 Выполнение программ процессоров
80286 и 386(ТМ) DX или SX
----------------------------------------------------------------
В основном, программы написанные для защищенного режима
процесора 80286 могут выполняться без изменений на процессоре
i486. Характерной чертой объектного кода процессора 80286,
является его совместимость с кодом i486, как его подмножества.
Бит умолчания в дескрипторах сегментов показывает, когда
процессор должен обрабатывать сегмент кода, данных или стека как
сегмент центрального процессора 80286 или 386(ТМ)/i486.
Для программного обеспечения процессоры 386 DX или SX,
являются практически тождествеными процессору i486.
Большинство различий приходится на их аппаратную реализацию.
Дескрипторы сегмента используемые процессором 80286
поддерживаются процессором i486 если Intel(R)-резервное слово
(старшее слово) дескриптора очищено. В процессоре i486 это
слово содержит старшие биты базового адреса и границу сегмента.
Дескрипторы сегмента для сегментов данных, сегментов кодов,
локальные таблицы дескрипторов ( для глобальных таблиц
дескрипторов дескрипторов нет), и шлюзы задач для процессоров
80286, 386 и i486 одинаковы. Другие дескрипторы процессора
80286 (сегмент TSS, шлюз вызова, шлюз прерывания и шлюз
ловушки) поддерживаются процессором i486. Процессор i486
также имеет дескрипторы для сегментов TSS, шлюзов вызова,
шлюзов прерывания и шлюзов ловушки, которые поддерживает
32-разрядная архитектура процессора i486. Обе разновидности
дескрипторов могут использоваться в одной системе.
Для дескрипторов сегментов, одинаковых для процессоров 80286
и i486, очищенные биты резервного слова побуждают процессор
i486 интерпретировать эти дескрипторы точно так, как это
делает процессор 80286. Например:
Базовый адрес (Base Address) - Восемь старших бит базового
32-разрядного адреса очищены, что ограничивает базовые
адреса 24 битами.
Граница (Limit) - Четыре старших бита поля границы очищены,
что ограничивает значение поля границы 64 Кбайт.
Бит детализации (Granularity bit) - Бит детализации очищен
показывая, что значение 16-разрядной границы интерпретируется
блоками по одному байту.
Большой бит (Big bit) - В дескрипторе сегмента данных бит В
очищен показывая, что в сегменте содержится не более 64
Кбайт.
Бит умолчания (Default bit) - В дескрипторе сегмента кода
бит D очищен показывая, что по умолчанию принимаются
16-разрядная адресация и операнды. В дескрипторе сегмента
стека очищенный бит D показывает, что вместо регистра ESP
будет использоваться регистр SP и 64 Кбайтная максимальная
граница сегмента.
Форматы этих дескрипторов и документация по их использованию
содержится в "Справочнике для программиста по процессору
iAPX 286" (iAPX 286 Programmer's Reference Manual).
21.1 Два пути запуска задач центрального процессора 80286
----------------------------------------------------------------
Когда программы процессора 80286 переносятся на процессор i486,
рассматриваются два подхода:
1. Перенос и запуск программных систем процессора 80286 на
процессор i486 производится вместе со старой операционной
системой, загрузчиком и компоновщиком.
В этом случае все задачи используют TSS процессора 80286.
Процессор i486 используется как более быстрая версия
процессора 80286.
2. Перенос выбранного прикладного программного обеспечения
процессора 80286 и его запуск в среде процессора i486,
с операционной системой, загрузчиком и компоновщиком
центрального процессора i486.
В этом случае TSS, используемые для представления задач
процессора 80286, должны быть изменены на TSS центрального
процессора i486. Смешение TSS центрального процессора 80286
и i486 возможно, но выгода очень мала, а проблемы очень
велики. Лучше, если все задачи в среде программного
обеспечения центрального процессора i486 будут использовать
TSS центрального процессора i486. Нет необходимости изменять
сами обьектные модули, реализованные на процессоре 80286;
ТSS обычно создаются операционной системой, загррузчиком или
компоновщиком. Смотрите Главу 24, в которой более подробно
обсуждается интерфейс между 16-разрядным и 32-разрядным
кодом.
21.2 Отличия от центрального процессора 80286.
----------------------------------------------------------------
Немногочисленные различия между процессорами 80286 и i486
затрагивают операционную систему в большей степени чем
прикладные программы.
21.2.1 Циклический возврат адреса в 24-разрядном адресном
пространстве процессора 80286
----------------------------------------------------------------
При использовании процессора 80286, комбинация базы и смещения,
приводящая к адресации за пределы 16 Мбайт, вызывает циклический
возврат адреса к первому мегабайту адресного пространства.
Поскольку процессор i486 имеет большее адресное пространство,
такие адреса попадают на 17-й мегабайт. Если в программе
используется циклический возврат, реализуемый в процессоре
80286, то того же эффекта можно добиться с помощью разбиения на
страницы. Для этого следует отобразить первые 64 Кбайт 17-го
мегабайта логических адресов на физические адреса в первом
мегабайте.
21.2.2 Резервное слово дескриптора сегмента
----------------------------------------------------------------
Так как процессор i486 использует содержащие резервное слово
дескрипторы сегмента процессора 80286, программы для процессора
80286, которые помещают в это слово значения, могут некорректно
выполнятся на процессоре i486.
21.2.3 Новые коды типа дескриптора сегмента
----------------------------------------------------------------
Фрагмент операционной системы, который управляет памятью с
помощью таблиц дескрипторов, для определения неиспользуемых
входов часто помещает запрещенные значения в поля прав-доступа
элементов таблицы дескрипторов. Значения прав-доступа 80H и 00H
неверны как для процессора 80286, так и для процессора i486.
Другие значения, неопределенные для процессора 80286, могут
быть верны для процессора i486, поскольку для него задано
определение этих битов.
21.2.4 Ограничения семантики префикса LOCK
----------------------------------------------------------------
В процессоре 80286 функция блокирования шины реализована иначе,
чем в процессоре i486. Программы, которые используют
специфические для процессора 80286 формы блокирования памяти,
возможно не будут работать на процессоре i486.
Префикс LOCK и соответствующий ему сигнал шины следует
использовать только для предотвращения прерываний операций
пересылки данных другими хозяевами шины. Префикс LOCK можно
использовать только с нижеперечисленными командами процессора
i486, когда они модифицируют память. Исключение неопределенного
кода операции будет результатом использования префикса LOCK
перед любыми другими командами или с командами, перечисляемыми
ниже, когда они не выполняют операцию записи, изменяющую память,
(т.е. операндом назначения является регистр ).
- Команды проверки и изменения битов BTS, BTR и BTC.
- Команды обмена XCHG, XADD, и CMPXCHG (префикс LOCK не нужен
для команды XCHG )
- Oднооперандные арифметические и логические команды INC, DEC,
NOT, NEG.
- Двухоперандные арифметические и логические команды ADD, ADC,
SUB, SBB, AND, OR , XOR.
Команды блокирования гарантированно блокируют только области
памяти, определенные в операнде назначения, но может
блокироваться и большая область памяти. Например, типичные
конфигурации процессоров 8086 и 80286 блокируют все физическое
пространство памяти.
На процессоре 80286 префикс LOCK чувствителен к IOPL; если CPL
имеет меньший уровень привилегированности, чем IOPL,
генерируется исключение общей защиты. На процессорах 386 DX и
i486 нет контроля против выполнения IOPL.
21.2.5 Дополнительные исключения
----------------------------------------------------------------
Процессоры 386 и i486 имеют новые исключения, которые могут
присутствовать даже в системах, разработанных для процессора
80286.
- Исключение #6 - "неопределенный код операции"
Это исключение может явиться результатом неправильного
использования префикса команды LOCK.
- Исключение #14 - "сбой страницы"
Это исключение может иметь место в программе для процессора
80286, если операционная система разрешает страничное
разбиение. Страничное разбиение может быть использовано в
задачах для систем с процессором 80286, если все задачи
используют одни и те же каталоги страниц. Поскольку в TSS
процессора 80286 нет места для хранения PDBR регистра,
переключение на задачу процессора 80286 не изменяет значение
PDBR регистра. В задачах, переданных от процессора 80286,
следует использовать TSS центрального процессора i486,
поскольку так они смогут целиком использовать страничное
разбиение.
21.3 Отличия от центрального процессора 386 (TM).
----------------------------------------------------------------
Между моделями программирования процессоров 386 DX и SX и
процессора i486 различий очень немного. Процессор i486
определяет новые биты в регистрах EFLAGS, CR0 и CR3, а также
новые входы в таблицы страниц первого и второго уровней. В 386
процессорах эти биты были зарезервированы, поэтому новые
особенности архитектуры не повлияли на совместимость.
21.3.1 Новый флаг
----------------------------------------------------------------
Флаг AC (18-ая битовая позиция) совместно с битом AM регистра
CR0 контролирует проверку выравнивания.
21.3.2 Новое исключение
----------------------------------------------------------------
Ислючение проверки выравнивания (17-й вектор исключения)
сообщает ссылку на невыровненную память при проведении проверки
выравнивания.
21.3.3 Новые команды
----------------------------------------------------------------
Появились три новые прикладные команды:
- Команда BSWAP
- Команда XADD
- Команда CMPXCHG
Появились также три новые системные команды для управления
кэшем и TLB:
- Команда INVD
- Команда WBINVD
- Команда INVLPG
Поменялась форма команды MOV, используемой для доступа к
тестовым регистрам. Для кэша определены новые тестовые регистры,
а модель TLB доступна через измененные тестовые регистры.
21.3.4 Новые биты регистра управления
----------------------------------------------------------------
В регистре CR0 определены пять новых битов:
- NE бит
- WP бит
- AM бит
- NW бит
- CD бит
В регистре CR3 определены два новых бита:
- PCD бит
- PWT бит
21.3.5 Новые биты входа таблицы страниц
----------------------------------------------------------------
Во входах таблицы страниц для контроля буфферизации страниц
определены два новых бита:
- PCD бит
- PWT бит
21.3.6 Изменение в заполнении дескриптора сегмента
----------------------------------------------------------------
На 386 процессорах заполнение дескриптора сегмента всегда
вызывает блокирование чтения и записи при установке бита
доступа дескриптора. Для процессора i486 блокировка чтения и
записи происходит только в случае, когда данный бит еще не
установлен.
|