ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 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 блокировка чтения и записи происходит только в случае, когда данный бит еще не установлен. |