ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.


Буквы светящиеся - объемные буквы www.consulmedia.ru/obemnie-bukvi.html.

 

Часть 23

Глава 22   Режим реальных адресов
----------------------------------------------------------------
В режиме реальных адресов процессор i486(TM) выполняет
программы, написанные для процессоров 8086, 8088, 80186
или 80188 или для режима реальных адресов процессоров 80286
или 386(TM).
Архитектура процессора i486 для данного режима почти идентична
архитектуре процессоров 8086, 8088, 80186, и 80188. Для
программиста процессор i486, работающий в режиме реальных
адресов, представляет собой более быстрый процессор 8086 с
некоторым расширением набора команд и регистров.
Основные особенности архитектуры описаны в Главах 2 и 3.
В этой главе представлены некоторые дополнительные аспекты
работы процессора i486 в режиме реальных адресов с точки зрения
системного программиста:
- Формирование адреса.
- Расширение команд и регистров.
- Обработка прерываний и исключений.
- Вход и выход из режима реальных адресов.
- Исключения в режиме реальных адресов.
- Отличия от процессора 8086.
- Отличия режима реальных адресов от режима процессора 80286.
- Отличия режима реальных адресов от режима процессоров 386.
- Программа определения процессора.
22.1  Преобразование адреса.
----------------------------------------------------------------
В режиме реальных адресов процессор i486 не интерпретирует
селекторы процессора 8086 обращением к дескрипторам, вместо
этого он формирует линейные адреса так же, как это сделал бы
процессор 8086. Селектор сдвигается влево на четыре бита,
формируя 20-разрядный базовый адрес. Исполнительный адрес
расширяется четырьмя нулями в старших битовых позициях и
прибавляется к базовому адресу, образуя линейный адрес, как
показано на Рисунке 22-1.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДї
і           19                                        3        0 
       і
і            ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДї
       і
і   база     і   16-ти разрядный селектор сегмента    і 0 0 0 0 і
       і
і            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДЩ
       і
і     +      19        15                                       0
       і
і            ЪДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
       і
і   смещение і 0 0 0 0 і 16-ти разрядный исполнительный адрес   і
       і
і            АДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
       і
і                                                                
       і
і             20                                                 
0      і
і   линейный ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
       і
і   адрес    і X X X X X X X X X X X X X X X X X X X X          і
       і
і            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
       і
і                                                                
       і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДЩ
         Рисунок 22-1. Преобразование адреса процессора 8086
Поскольку существует возможность переноса, результирующий
линейный адрес может иметь до 21 значащего разряда.
Программами процессора 8086 могут генерироваться линейные
адреса в диапазоне от 0 до 10FFEFH ( 1 мегабайт плюс
дополнительно 64 Кбайт) линейного адресного пространства.
Поскольку разбиение на страницы в режиме реального времени
недоступно, линейные адреса используются как физические адреса.
В отличие от процессоров 8086 и 80286, процессор i486 подобно
процессорам 386, может генерировать 32-разрядный исполнительный
адрес, используя префикс размера адреса; однако в режиме
реальных адресов значение 32-разрядного адреса не должно
превышать 65.535, в противном случае возникает исключение.
Для полной совместимости с режимом реальных адресов процессора
80286, возникает ошибка псевдо-защиты ( прерывание 12 или 13
без кода ошибки), если значение исполнительного адреса выходит
за пределы от 0 до 65.535.
22.2  Команды и регистры.
----------------------------------------------------------------
Имеющийся в режиме реальных адресов набор регистров включает
все регистры, определенные для процессора 8086 плюс новые
регистры, введенные с процессора 386 и сопроцессора 387 (TM):
FS, GS, регистры отладки, регистры управления, регистры
тестирования, и регистры модуля операций с плавающей точкой.
Новые команды, которые могут выполнять операции над регистрами
сегмента FS и GS в явном виде, и новые префиксы принудительного
задания сегмента могут использоваться для обращения команд к
регистрам FS и GS при вычислении адресов в процессе выполнения
команд.
Коды команд, которые генерируют исключение неопределенного кода
операции включают команды для защищенного режима, которые
перемещают и тестируют селекторы сегмента и дескрипторы сегмента
центрального процессора i486, т.е. команды VERR, VERW, LAR, LSL,
LTR, STR, LLDT, и SLDT. Программы, выполняемые в режиме
реального адреса, могут воспользоваться преимуществами новых
команд прикладной ориентации, добавленных в архитектуру с
введением процессоров 80186,80188,80286, 386 DX, SX и i486:
- Новые команды, введенные на процессорах 80186, 80188 и 80286.
- PUSH непосредственных данных
- Занести все и удалить все (PUSHA и POPA)
- Умножение непосредственных данных
- Сдвиг и циклический сдвиг с непосредственным счетчиком
- Ввод/вывод строки
- Команды ENTER и LEAVE
- Команда BOUND
- Новые команды, введенные на процессоре 386 DX.
- Команды LSS, LFS, LGS
- Условные переходы с длинным смещением
- Команды работы с отдельными битами
- Команды сканирования битов
- Команды двойного сдвига
- Команда установки байта по условию
- Пересылка с распространением знака/нуля
- Обобщены операции умножения
- MOV в или из регистров управления
- MOV в или из регистров тестирования
- MOV в или из регистров отладки
- Новые команды, введенные на  процессоре i486.
- Комманда BSWAP
- Команда XADD
- Команда CMPXCHG
- Команда INVD
- Команда WBINVD
- Команда INVLPG
22.3    Обработка прерываний и исключений.
----------------------------------------------------------------
Прерывания и исключения процессора i486 в режиме реальных
адресов работают в основном так же, как у процессора 8086.
Прерывания и исключения вызывают процедуру прерывания из таблицы
прерываний. Для достижения индекса в таблице прерываний
процессор умножает идентификатор прерывания или исключения на
четыре. Входами таблицы прерываний являются длинные указатели на
точки входа в процедуры обработки прерываний или исключений. При
возникновении прерывания процессор помещает текущие значения
регистров CS и IP в стек, блокирует прерывания, очищает флаг TF
и передает управление в место, определенное таблицей прерываний.
Команда IRET в конце процедуры обработки прерывания выполняет
эти шаги в обратном порядке перед тем, как вернуть управление
прерванной процедуре. Исключения не возвращают кодов ошибок в
режиме реальных адресов.
Основное отличие обработки прерываний процессора i486 по сравнени
с процессором 8086 состоит в размещении и размере таблицы прерыва
ний
в зависимости от содержания регистра IDTR. Обычно это не затрагив
ает
программистов поскольку при инициализации после сброса регистр ID
TR
содержит базовый адрес нуля и границу 3FFH , что обеспечивает
совместимость с процессором 8086. Тем не менее, команду LIDT можн
использовать в режиме реальных адресов для изменения базовых и
граничных значений регистра IDTR. Команды LIDT и SIDT и регистр
IDTR подробно описаны в Главе 9. Если при возникновении прерывани
его вход в таблицу прерываний превышает граничное значение,
записанное в регистре IDTR, то генерируется исключение двойного
отказа.
22.4    Вход и выход из режима реальных адресов
----------------------------------------------------------------
Режим реальных адресов устанавливается автоматически после команд
перезагрузки. Даже если систему предполагается использовать в
защищенном режиме, программа инициализации выполняется
в режиме реальных адресов пока подгoтавливается переключение в
защищенный режим.
22.4.1  Переключение в защищенный режим
----------------------------------------------------------------
Единственный способ выхода из режима реальных адресов - переключе
ние
в защищенный режим. Процессор входит в защищенный режим, когда
команда MOV устанавливает в регистре CR0 бит PE (включение
защиты). (Для совместимости с процессором 80286 бит PE можно
устанавливать с помощью команды LMSW).
Смотрите Главу 10 "Инициализация" для рассмотрения других аспекто
переключения в защищенный режим.
22.5 Переключение обратно в режим реальных адресов
Процессор возвращается в режим реальных адресов, если программное
обеспечение очистит бит P E(включение защиты) в регистре
CR0 командой MOV в CR0 (для  совместимости с процессором 80286
бит PE можно устанавливать с помощью команды LMSW, но нельзя очищ
ать).
Процедура возвращения в режим реальных адресов должна сделать
нижеследующее:
1. Если включено разбиение на страницы выполняется следующее:
  - Передать управление линейным адресам, которые имеют тождестве
нное
    отображение, т.е. линейные адреса эквивалентны физическим.
  - Очистить бит PG в регистре CR0.
  - Заполнить нулями регистр CR0 для подавления TLB.
2. Передать управление сегменту с границей 64К (0FFFFH). Это загр
узит
   регистр CS с требуемой для реального режима границей.
3. Загрузить в сегментные регистры SS, DS, ES, FS, и GS селектор
   дескриптора, содержащего соответствующие реальному режиму знач
ения:
  - Граница = 64К          (0FFFFH)
  - Байтовая дробность     (G = 0)
  - Расширение вверх       (E = 0)
  - Доступ для записи      (W = 1)
  - Присутствие            (P = 1)
  - База = любое значение
   Необходимо заметить, что если регистры сегмента не будут
   перезагружены выполнение продолжится, используя дескрипторы,
   загруженные при нахождении в защищенном режиме.
4. Запретить прерывания. Командой CLI запрещаются прерывания
   INTR. Прерывания NMI можно запретить с внешней электрической
   цепи.
5. Очистить бит PE в регистре CR0.
6. Перейти на программу реального режима используя команды
   дальнего перехода (far JMP). Это очищает очередь команд и
   устанавливает правильные значения прав доступа в регистр CS.
7. Используя команду LIDT загрузить базу и границу таблицы вектор
ов
   прерывания реального режима.
8. Разрешить прерывания.
9. Загрузить сегментные регистры в соответствии с требованиями
   программы реального режима.
22.6    Исключения режима реальных адресов
----------------------------------------------------------------
В процессоре i486 сообщения некоторых исключений различаются в
зависимости от того, возникают ли исключения в защищенном режиме
или режиме реальных адресов. Таблица 22-1 уточняет исключения
для режима реальных адресов.
             Таблица 22-1.  Исключения и прерывания
ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДД
ДДДДДДДДДї
і Описание         і Вектор і       Источник        і Указывает-л
и адрес  і
і                  і        і      исключений       і возврата на
 команду,і
і                  і        і                       і которая выз
вала     і
і                  і        і                       і    исключен
ие       і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДД
ДДДДДДДДДґ
іДеление на ноль   і   0    і Команды DIV и IDIV    і        да  
         і
іОтладка           і   1    і Любой                 і        *(1)
         і
іТочка останова    і   3    і Команда INT           і        нет 
         і
іПереполнение      і   4    і Команда INTО          і        нет 
         і
іПревышение грани- і   5    і Команда BOUND         і        да  
         і
іцы индекса массиваі        і                       і            
         і
іНеразрещенный     і   6    і зарезервированные     і        да  
         і
ікод операции      і        і коды операции и непра-і            
         і
і                  і        і вильное использование і            
         і
і                  і        і префикса LOCK         і            
         і
іУстройство отсут- і   7    і Команды ESC или WAIT  і        да  
         і
іствует            і        і                       і            
         і
іДвойной отказ     і   8    і Любой                 і        да  
         і
іЗарезервириван    і   9    і                       і            
         і
іНеразрешенный     і   10   і Команды JMP,CALL,IRET,і        да  
         і
ісегмент состояния і        і прерывания и исклю-   і            
         і
ізадачи            і        і чения                 і            
         і
іСегмент отсутст-  і   11   і Любая команда, котораяі        да  
         і
івует              і        і изменяет сегменты     і            
         і
іИсключение по     і   12   і Выход операции со     і        да  
         і
істеку             і        і стеком за границу     і            
         і
і                  і        і адресов               і            
         і
іЗащита            і   13   і Операнд или команда   і        да  
         і
і                  і        і выходят за границу ад-і            
         і
і                  і        і ресов или команда     і            
         і
і                  і        і превышает 15 байт     і            
         і
іСбой страницы     і   14   і Любая команда, котораяі        да  
         і
і                  і        і обращается к памяти   і            
         і
іЗарезервирован    і   15   і                       і            
         і
іОшибка вычислений і   16   і Команды ESC или WAIT  і        да(2
)        і
іс плавающей точкойі        і                       і            
         і
іПрограммные преры-і  0-255 і Команды INT n         і        нет 
         і
івания             і        і                       і            
         і
АДДДДДДДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДД
ДДДДДДДДДЩ
(1) - Некоторые исключения отладки указывают на команду, содержащ
ую
      ошибку, другие на следующую за ней команду. Обработчик искл
ючений
      может тестировать регистр DR6 определяя, что произошло.
(2) - Ошибки вычислений с плавающей точкой выдают сообщения на пе
рвую
      команду ESC или WAIT, стоящую после команды ESC, которая
      сгенерировала ошибку.
22.7  Отличия от ЦПУ 8086.
----------------------------------------------------------------
В основном, загруженное в ROM, программное обеспечение,
разработанное для процессоров 8086, 8088, 80186, и 80188 будет
корректно работать в режиме реальных адресов процессора i486.
Ниже приведен список незначительных различий между программами
выполняемыми на процессоре 8086 и i486.
1. Подсчет числа тактов на выполнение команды.
   Процессор i486 требует для выполнения большинства команд меньш
   машинных тактов чем процессор 8086.
   Это может иметь негативное действие в случаях:
   - Управления устройствами ввода/вывода, которым необходима
     задержка между операциями ввода/вывода.
   - При отработке запланированных задержек в программах,
     использующих параллельную работу процесора 8086 и сопроцессо
ра
     8087.
2. Исключения ошибки деления указывают на команду DIV.
   Исключения ошибки деления на процессоре i486 всегда сохраняет
   значение CS:IP, указывающее на ошибочную команду. А на процесс
оре
   8086  CS:IP указывает на следующую команду.
3. Коды операций, неопределенные для процессора 8086.
   Коды операций, которые не определены для процессора 8086,
   генерируют исключение неопределенного кода операции или
   выполняют одну из новых команд, введенных на процессорах
   80286, 386 DX или i486.
4. Значения записываемые командой PUSH SP.
   При команде PUSH SP процессор i486 помещает в стек другое,
   нежели процессор 8086 значение. Процессор i486 заносит значени
   регистра SP перед его уменьшением как часть операции занесения
   процессор 8086 заносит значение регистра SP после его уменьшен
ия;
   Если занесенное значение важно, замените команду PUSH SP на
   последовательность из трех команд:
   PUSH  BP
   MOV   BP, SP
   XCHG  BP, [BP]
   Эта программа функционирует на процессоре i486 как команда PUS
H SP
   процессора 8086.
5. Сдвиг или циклический сдвиг более, чем на 31 бит.
   Процессор i486 маскирует в счетчиках всeх линейных и циклическ
их
   сдвигов все биты кроме младших пяти. Эта операция MOD 32
   ограничивает величину сдвигов 31 битом и, следовательно, огран
ичивает
   задержку отклика на прерывание, ожидающее окончания выполнения
 команды.
6. Префиксы удлинения.
   В процессоре i486 установлено ограничение в 15 байт на длину
   команды. Единственный путь преодоления этого ограничения -
   использование перед командой префиксов удлинения.   Если
   ограничение нарушено, генерируется исключение общей защиты.
   На процессоре 8086 нет ограничений на длину команд.
7. Операнд с относительным адресом 0 или превысившим 65.535.
   В процессоре 8086 попытка обращения к операнду в памяти с
   пересечением относительного адреса 65.535 ( например, пересылк
   слова командой MOV по относительному адресу 65.535) или
   относительного адреса 0 (например, занесение в стек слова
   командой PUSH, когда SP = 1) приводит к циклическому возврату
   относительного адреса по модулю 65.536. Процессор i486
   в этих случаях генерирует исключения: исключение общей защиты,
   если сегмент является сегментом данных (т.е. для адресации
   сегмента были использованы регистры CS, DS, ES, FS или GS )
   или исключение стека, если сегмент является сегментом стека
   (т.е. если был использован регистр SS).
8. Переход через относительный адрес 65.535 при последовательном
   выполнении.
   На процессоре 8086 если произошел переход через относительный
   адрес 65.535 при последовательном выполнении команд,
   произойдет выборка байта следующей команды по относительному
   адресу 0 того же сегмента. Процессор i486 в этом случае
   генерирует исключение общей защиты.
9.  Ограничения использования префикса LOCK.
   Префикс LOCK и соответствующий ему сигнал шины следует
   использовать только для предотвращения прерываний операций
   пересылки данных другими хозяевами шины. Префикс LOCK можно
   использовать только с нижеперечисленными командами процессора
   i486, когда они модифицируют память. Исключение
   неопределенного кода операции будет результатом использования
   префикса LOCK перед любыми другими командами или с
   командами, перечисляемыми ниже, когда они не выполняют
   операцию записи, изменяющую память.
- Команды проверки и изменения битов BTS, BTR и BTC.
- Команды обмена XCHG, XADD, и CMPXCHG (префикс LOCK не нужен
  для команды XCHG ).
- Oднооперандные арифметические и логические команды INC, DEC,
  NOT, NEG.
- Двухоперандные арифметические и логические команды ADD, ADC,
  SUB, SBB, AND, OR , XOR.
10.  Пошаговые программы обработки внешних прерываний.
   Приоритетность пошаговых исключений в процессоре i486
   отличается от приоритетности исключений в процессоре 8086.
   Внесенное изменение предупреждает обработку внешнего
   прерывания пошаговым образом в случае, когда прерывание
   возникло в пошаговой программе. В процессоре i486 пошаговое
   исключение имеет приоритет выше, чем любое внешнее
   прерывание. С помощью команды INT или исключения можно
   заставить идти процессор i486 пошагово по программе обработки
   прерываний.
11.  Исключения команды IDIV для частных 80H или 8000H.
   Процессор i486 генерирует максимальное отрицательное число в
   качестве частного для команды IDIV. Процессор 8086 вместо
   этого генерирует исключение ошибки деления.
12. Флаги в стеке.
   Установка сохраненых флагов командой PUSHF, прерываниями и
   исключениями отличается от их установки на процессоре 8086 в
   позициях с 12 по 15 бит. Процессор 8086 записывает в них 1.
   На процессоре i486 в режиме реальных адресов бит 15 это
   всегда 0, а в битах от 14 до 12 сохраняются предыдущие
   значения.
13. Обработка прерывания NMI.
   После получения процессором i486 информации о прерывании NMI,
   прерывание NMI маскируется на время выполнения команды IRET.
14. Ошибки вычислений с плавающей точкой вызывают исключение ошиб
ки
    вычислений с плавающей точкой.
   На процессоре i486 исключения вычислений с плавающей точкой
   вызывают программу обработки исключения ошибки вычислений с
   плавающей точкой. Если на процессоре 8086 использовалось
   другое исключение для прерывания сопроцессора 8087, то оба
   вектора исключения должны вызывать программу обработчика
   исключения ошибки вычислений с плавающей точкой. Процессор
   i486 выдает сигналы, которые, с добавлением внешней логики,
   поддерживают определенные пользователем сообщения об ошибках
   для эмуляции механизма прерываний, используемого в
   большинстве персональных компьютеров.
15. Программы обработки числовых исключений могут допускать префи
ксы.
   В процессоре i486 значения регистров CS и IP, сохраненные для
   обработки исключений вычислений с плавающей точкой, указывает
   на любые префиксы перед командой ESC. В процессоре 8086
   сохраненное значение CS:IP указывает на саму команду ESC.
16. Устройство вычислений с плавающей точкой не использует
    контроллер прерываний.
   Сигнал ошибки вычислений с плавающей точкой процессора i486
   не проходит через контроллер прерываний ( сигнал INT
   сопроцессора 8087 использует контроллер прерываний). Может
   потребоваться удаление некоторых команд в программе обработки
   исключения ошибки вычислений с плавающей точкой, если
   используется контроллер прерываний. Процессор i486 выдает
   сигналы, которые, с добавлением внешней логики, поддерживают
   определенные пользователем сообщения об ошибках для эмуляции
   механизма прерываний, используемого в большинстве
   персональных компьютеров.
17. Семь новых векторов прерываний.
   В процессоре i486 добавлено семь исключений, которые в
   процессоре 8086 генерировались только как программные ошибки.
   Должны быть добавлены программы обработки исключений, которые
   трактуют эти исключения как неправильные операции. Эти
   дополнительные программы не влияют существенным образом на
   программы процессора 8086, поскольку обычно такие прерывания
   не возникают. Имена этих программ не могли быть включены в
   программное обеспечение процессора 8086, поскольку они были
   зарезервированны фирмой Intel(R). В Таблице 22-2 описываются
   новые исключения процессора i486.
     Таблица 22-2.  Новые исключения центрального процессора i486
(TM)
ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДДДї
і Вектор           і                Описание                     
         і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДДДґ
і      5           і Команда BOUND была выполнена с регистром, зн
ачение   і
і                  і которого  превышает допустимое значение.    
         і
і                  і                                             
         і
і      6           і Встретился зарезервированный код операции ил
и        і
і                  і использование префикса LOCK.                
         і
і                  і                                             
         і
і      7           і При выполнении команды ESC был установлен би
т EM     і
і                  і в регистре CR0, или при выполнении команды W
AIT      і
і                  і был установлен бит ТS.                      
         і
і                  і                                             
         і
і      8           і Номера векторов на входе в IDT  выходят за г
раницу   і
і                  і сегмента. Это случается, когда граница,     
         і
і                  і установленная по умолчанию, была изменена.  
         і
і                  і                                             
         і
і     12           і Операции над стеком, приводящие к выходу за 
границу  і
і                  і адресов.                                    
         і
і                  і                                             
         і
і     13           і Операции (не операции со стеком), превышающи
е базу   і
і                  і или границу сегмента, команды,при выполнении
 которых,і
і                  і произошел выход за границу адресов (0FFFFH),
 или     і
і                  і команды превышающие 15 байт.                
         і
і                  і                                             
         і
і     17           і Проверка выравнивания. Не происходит без пре
дварите- і
і                  і льной установки зарезервированных битов.    
         і
АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДДДЩ
18. На процессоре i486 исключение денормализованного числа
    обрабатывается по другому, чем на математическом
    сопроцессоре 8087. Смотрите Раздел 16.2.4 для более
    детального ознакомления.
19. Циклический возврат через один мегабайт.
   Адресное пространство процессора i486 не может иметь
   циклический возврат через один мегобайт в режиме реальных
   адресов. Если циклический сдвиг запрещен, его можно провести
   с помощью внешнего сигнала A20M#. Например, при значении
   селектора 0FFFFH и смещении 0FFFFH исполнительный адрес будет
   10FFEFH (1 мегабайт + 65.519 байт). Процессор 8086, который
   формирует адреса длинной до 20 бит обрезает самый старший
   бит, который "сдвигает" этот адрес на 0FFEFH. Однако,
   процессор i486 не обрезает этот бит если A20М# не блокирован.
20.  Отклик на запрос передачи данных по шине.
   В отличие от процессоров 8086 и 80286 и аналогично
   процессорам 386 процессор i486 отвечает на запрос управления
   шиной от других возможных ее владельцев таких, как
   контроллеры DMA, между пересылками частей невыровненного
   операнда, например двух слов, образующих двойное слово. В
   отличие от процессоров 386 процессор i486 реагирует на запрос
   передачи данных по шине во время инициализации после сброса.
21.  Граница таблицы векторов прерывания.
   Команду LIDT можно использовать для установки границы размера
   таблицы векторов прерывания. Если прерывание или исключение
   попытается прочесть вектор за границей, произойдет закрытие
   системы. (У процессора 8086 нет режима закрытия системы).
22. Если операция над стеком произведет циклический сдвиг
    границы адреса, то произойдет закрытие системы. (У
    процессора 8086 нет режима закрытия системы).
22.8    Отличия от процессора 80286 в режиме реальных адресов.
----------------------------------------------------------------
Некоторые отличия, которые существуют между режимом реальных
адресов процессора i486 и режимом реальных адресов процессора
80286, вряд ли повлияют на выполнение существующих программ для
процессора 80286 кроме, возможно, процедур инициализации
системы.
22.8.1  Блокирование шины.
----------------------------------------------------------------
В процессоре 80286 функция блокирования шины реализована иначе,
чем в процессоре i486. Программы, которые используют
специфические для процессора 80286 формы блокирования памяти,
могут при переносе на процессор i486 работать неправильно.
Префикс LOCK и соответствующий ему сигнал шины следует
использовать только для предотвращения прерываний операций
пересылки данных другими хозяевами шины. Префикс LOCK можно
использовать только с нижеперечисленными командами процессора
i486, когда они модифицируют память. Исключение неопределенного
кода операции будет результатом использования префикса LOCK
перед любыми другими командами или с командами, перечисляемыми
ниже, когда они не выполняют операцию записи, изменяющую память
(т.е. операндом-приемником является регистр ).
- Команды проверки и изменения битов BTS, BTR и BTC.
- Команды обмена XCHG, XADD, и CMPXCHG (префикс LOCK не нужен
  для команды XCHG ).
- Oднооперандные арифметические и логические команды INC, DEC, NO
T, NEG.
- Двухоперандные арифметические и логические команды ADD, ADC, SU
B, SBB,
  AND, OR , XOR.
Команды блокирования гарантируют блокирование только области
памяти определенной в операнде приемнике, но может блокироваться
и большая область памяти. Например, типичные конфигурации
процессоров 8086 и 80286 блокируют все физическое пространство
памяти.
22.8.2   Расположение стартовой ячейки.
----------------------------------------------------------------
На процессоре i486 стартовая ячейка имеет адрес 0FFFFFFF0H
(отстоит на 16 байт от границы 32-разрядного адресного
пространства). На процессоре 80286 в качестве стартовой
используется ячейка с адресом 0FFFFF0H (отстоит на 16 байт от
границы 24-разрядного адресного пространства). Большинство
программ инициализации процессора 80286, записанных в ПЗУ, будет
работать правильно. В некоторых случаях придется переопределить
внешние сигналы на линиях А 31-20.
22.8.3   Начальные значения регистров общего назначения.
----------------------------------------------------------------
На процессоре i486 после перезапуска некоторые регистры общего
назначения могут содержать иные значения, чем на процессоре
80286. Проблема несовместимости, однако, не возникает, так как
значения этих регистров на процессоре 80286, после перезапуска,
не определяется. Если в процессе самотестирования процессора
i486 при перезагрузке обнаруживается ошибка, содержимое регистра
EAX принимает ненулевое значение. Регистр EDX содержит номер
модификации (component) и тип микропроцессора (revision
identifier). Для более подробной информации смотрите Главу 10.
22.8.4  Запрос передачи данных по шине.
----------------------------------------------------------------
В отличие от процессоров 8086 и 80286 и аналогично процессорам
386 процессор i486 отвечает на запрос управления шиной от других
возможных ее владельцев таких, как контроллеры DMA, между
пересылками частей невыровненного операнда, например двух слов,
образующих двойное слово.
22.8.5  Oтличия математического сопроцессора.
На процессоре i486 исключение денормализованного числа
обрабатывается иначе, чем на математическом сопроцессоре 80287.
Смотрите Раздел 16.2.4 для более детального ознакомления.
Бит MT регистра MSW всегда должен быть установлен. Добавленный в
регистр MSW бит ЕТ, так же должен быть установлен. На
микропроцессоре i486 исключение 9 не должно иметь места.
22.9   Отличия от процессора 386(TM) DX в режиме
       реальных адресов
----------------------------------------------------------------
В режиме реальных адресов могут быть доступны команды и
особенности архитектуры, появившиеся на процессоре i486. Это не
влияет на большинство программ, поскольку новые коды операций
ранее генерировали исключение неопределенного кода операции.
Новые флаги и биты регистров раннее были зарезервированны,
поэтому не должно быть программ, которые использовали бы их
неправильно.
В режиме реальных адресов было возможно кеширование. Для
максимальной производительности программы инициализации должно
использоваться кеширование.
22.10   Программа определения типа процессора.
----------------------------------------------------------------
Нижеследующий программный фрагмент (смотри Рисунок 22-2) может
быть использован для определения процессоров 8086, 80286, или
386. Этот программный фрагмент предназначен для прикладных
программ, выполняемых в режиме реальных адресов.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДї
і   is_386(TM)         proc         near                         
       і
і   ;                                                            
       і
і   ;  В регистр AX возвращается тип процессора.                 
       і
і   ;                                                            
       і
і                                                                
       і
і     pushf               ; сохранить регистр FLAG в стеке       
       і
і     pop bx              ; запомнить FLAG  в  BX                
       і
і     and bx, 0fffh       ; очистить биты 12 - 15                
       і
і     push bx             ; поместить в стек                     
       і
і     popf                ; чтение слова из стека в регистр FLAG 
       і
і     pushf               ; запомнить регистр FLAG в стеке       
       і
і     pop ax              ; получить обратно слово регистра FLAG 
       і
і                                                                
       і
і     and ax, 0f000h      ; если биты 12 - 15 установлены, то    
       і
і     cmp ax, 0f000h      ; это процессор 8086                   
       і
і     jz  is_8086         ;                                      
       і
і                                                                
       і
і     or  bx, 0fffh       ; пробуем установить биты 12-15 регистр
а FLAG і
і     push bx             ; поместить в стек                     
       і
і     popf                ; чтение слова из стека в регистр FLAG 
       і
і     pushf               ; запомнить регистр FLAG в стеке       
       і
і     pop ax              ; получить обратно слово регистра FLAG 
       і
і                                                                
       і
і     and ax, 0f000h      ; если биты 12 - 15 очищены, то это    
       і
і     jz  is_80286        ; процессор 80286                      
       і
і                                                                
       і
і is_80386:               ; иначе это процессор 386 DX           
       і
і     mov ax, 386h        ; установим признак процессора 386 DX  
       і
і     jmp done                                                   
       і
і is_80286:                                                      
       і
і     mov ax, 286h        ; установим признак процессора 80286   
       і
і     jmp done                                                   
       і
і is_8086:                                                       
       і
і     mov ax, 86h         ; установим признак процессора 8086    
       і
і                                                                
       і
і done:                                                          
       і
і     popf                ; получим обратно регистр FLAG         
       і
і     ret                                                        
       і
і                                                                
       і
і is_386     endp                                                
       і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДЩ
      Рисунок 22-2.  Определение типа процессора в режиме
                       реальных адресов


Яндекс цитирования