Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 OS
 osjournal 
 Protected Mode 
 Hardware 
 Kernels
  Dark Fiber
  BOS
  QNX
  OS Dev
  Lecture notes
  MINIX
  OS
  Solaris
  История UNIX
  История FreeBSD
  Сетунь
NEWS
Последние статьи :
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  JFS 10.06   
  B-trees 01.06   
 
TOP 20
 Go Web ...825 
 Httpd-> История Ap...517 
 2.0-> Linux IP Networking...438 
 MySQL & PosgreSQL...380 
 Trees...378 
 Secure Programming for Li...369 
 Assembler...304 
 TCP 2...279 
 Secure Programming for Li...270 
 Steve Pate 3...269 
 Mod_perl 1...263 
 Cluster 3...262 
 Ethreal 1...256 
 Максвелл 3...254 
 Advanced Bash Scripting G...244 
 Python...236 
 Daniel Bovet 5...231 
 Linux Inline Assembly...231 
 Rubni-Corbet -> Глав...230 
 Steve Pate 1...229 
 
  01.06.2017 : 2215600 посещений 

iakovlev.org

Процессор 386

                                                                                              
             Т е х н и ч е с к о е     о п и с а н и е
      
      I.  Основные цели разработки - пропорциональное улучшение всех
 технических характеристик при сохранении программной  совместимости
 в объектных кодах с МП 8086/186/286.
      
                    Основные преимущества:
      
      1. возможность   параллельной   работы  нескольких   программ,
 работающих под управлением  любой  комбинации  операционных  систем
 PC-DOS, MS-DOS, UNIX и XENIX;
      2. совместимость  снизу вверх  по  архитектуре с МП 8086, 186,
         286.
      
      
                    Основные области примеменения:
      
      1. АРМ;
      2. системы автоматизации конторских работ;
      3. САПР;
      4. робототехника;
      5. оборудование со встроенными МП.
      
                  Основные технические характеристики.
      
      Разрядность  обрабатываемых  данных  -             8;  16; 32.
                                                              32 
      Максимальный объем прямоадресуемой памяти -  4 Гбайт  (2  ). 
                                                              64 
      Максимальный объем виртуальной памяти -      64 Тбайт (2  ).
      
      Производительность         -                 3...4  млн.команд
                                                   в сек. (средняя)
                                                   при 16 МГц.
      
      Количество уровней конвейера -               6.
      
      Тактовая частота -                           12,5 и 16 МГц.
      
      Максимальный размер сегмента -               4 Гбайт.
      
      Размер страницы  -                           4 Кбайт.
      
      Количество уровней привилегированности -     4.
      
      Количество выводов корпуса -                 132.
      
      Степень интеграции-                          275 тыс.транзист. 
 
      Технология -                                 CHMOS III(1,5мкн). 
 
      Размер кристалла -                           9,75*10,4 мм.
      
                    Архитектура.
      
      МП состоит из 3 основных частей:
                    устройства обработки;
                    устройства управления ЗУ;
                    интерфейсного блока.
 
                                      -  4 -
            
            
      
      Устройство  обработки  состоит  из  исполнительного устройства
                             (операционной  части)и   блока   команд
                             (управляющей части).  Содержит  8  32-х
                             разрядных РОН, 64-х битовый циклический
                             сдвигатель.  Умножение    и     деление
                             осуществляется     на    1    бит    за
                             цикл. Алгоритм  умножения   такой,  что
                             процесс  прекращается,  когда  наиболее
                             значащий бит умножается  на  все  нули.
                             Типичное время умножения 32-х разрядных
                             чисел около 1 мкс.
      
      Устройство управления ЗУ  состоит из сегментного и страничного 
                             блоков.   Сегментный   блок   позволяет 
                             работать   с  логическими  адресами  со 
                             всеми        вытекающими         отсюда 
                             преимуществами.  Страничная организация 
                             используется    внутри    сегмента    и 
                             управляет  физическими адресами. Каждая 
                             задача может иметь до 16381 сегмента до 
                             4 Гбайт каждый, т.е. виртуальная память 
                             может быть размером 64 Тбайт. 
      
      Интерфейсный   блок  обеспечивает  взаимодействие  с  внешними
                             устройствами,  включая   автоматическое
                             управление    разрядностью    шины,   и
                             формирование сигналов активности байтов.
      
      МП может функционировать в двух основных режимах:
      
      режим  реальной  адресации-  характеризуется   тем,   что   МП
                             работает   как  очень  быстрый  8086  с
                             32-битным расширением;
      
      режим  защищенной   виртуальной   адресации-   реализует   все
                             достоинства   МП  (режим  параллельного
                             выполнения нескольких задач несколькими 
                             8086 - по одному на задачу).
      
                     Обзор регистрового файла.
      
      МП имеет 32 регистра, разбитые на следующие группы:
      
                  регистры общего назначения; 
                  сегментные регистры;
                  указатель команд и регистр признаков;
                  управляющие регистры;
                  регистры системных адресов;
                  отладочные регистры;
                  тестовые регистры.
 .
                                      -  5 -
            
            
                     Регистры общего назначения.
      31                    16 15         8 7         0
      _________________________________________________
      |                       |            |           |
      |                       |AH        A | X      AL | EAX
      |_______________________|____________|___________|
      |                       |            |           |
      |                       |BH        B | X      BL | EBX
      |_______________________|____________|___________|
      |                       |            |           |
      |                       |CH        C | X      CL | ECX
      |_______________________|____________|___________|
      |                       |            |           |
      |                       |DH        D | X      DL | EDX
      |_______________________|____________|___________|
      |                       |                        |
      |                       |           SI           | ESI
      |_______________________|________________________|
      |                       |                        |
      |                       |           DI           | EDI
      |_______________________|________________________|
      |                       |                        |
      |                       |           BP           | EBP
      |_______________________|________________________|
      |                       |                        |
      |                       |           SP           | ESP
      |_______________________|________________________|
                                 Сегментные регистры
                             15                       0
                              _________________________
                             |                         |
                             |            CS           |  Команды
                             |_________________________|
                             |                         |  
                             |            SS           |  Стек
                             |_________________________|  _
                             |                         |   |
                             |            DS           |   |
                             |_________________________|   |
                             |                         |   |
                             |            ES           |   |
                             |_________________________|   > Данные
                             |                         |   |
                             |            FS           |   |
                             |_________________________|   |
                             |                         |   |
                             |            GS           |   |
                             |_________________________|  _|
              Указатель команд и регистр признаков.
      31                   16 15                       0
      _________________________________________________
      |                      |                         |
      |                      |   Указатель             |   EIP
      |                      |   команд                |
      |______________________|_________________________|
      |                      |                         |
      |                      |   Признаки              |   EF регистр
      |______________________|_________________________|   признаков
      Рис.2-2. Регистры общего назначения, сегментные   
                       и указатель команд
 .
                                      -  6 -
                 
      Содержимое РОН, указателя команд и регистра признаков  зависит
 от   выполняемой   задачи   и   автоматически   перегружается   при
 переключении задач.
      Архитектура  МП  позволяет  непосредственно  обращаться  к   6
 сегментам  (размером  до  4  Гбайт  каждый)  при помощи специальных
 селекторов,    которые    перезагружаются    программно. Содержимое
 селекторов  также зависит от задачи и автоматически перезагружается
 при переключении задач.
      Остальные  регистры  МП  используются,  главным  образом,  для
 упрощения проектирования и отладки операционной системы.
      
                  Описание регистров МП.
      
      РОН  -  используются  для  хранения операндов и адресов. Могут
 работать с операндами, имеющими длину 1, 8, 16, 32 и 64 бита или  с
 битовыми  полями  длиной от  1 до 32 бит. Обозначения регистров при
 использовании соответствующей длины приведены на рис.2.2.
      
      Указатель   команд   -   хранит   смещение,   которое   всегда
 складывается   со   значением   кодового  сегментного  регистра   и
 определяет   адрес   следующей   команды.   Младшие   16   разрядов
 соответствуют IP предыдущих МП.
      
      Регистр  признаков  -  отражает состояние МП при использовании
 только 16- ти младших разрядов; совместим с предыдущими моделями МП.
      31                                        3 2 1 0
      _________________________________________________
      |            | | | | |   | | | | | | | | | | | | | 
      |Зарезерви-  |V|R| |N|IOP|O|D|I|T|S|Z| |A| |P| |C|
      |рованы      |M|F|O|T| L |F|F|F|F|F|F|O|F|O|F|1|F|
      |____________|_|_|_|_|___|_|_|_|_|_|_|_|_|_|_|_|_|
                    | |   |  |  | | | | | |   |   |   |
      Виртуальный   | |   |  |  | | | | | |   |   |   | Перенос
      режим         | |   |  |  | | | | | |   |   |   |__________
      ______________| |   |  |  | | | | | |   |   |
                      |   |  |  | | | | | |   |   |Четность
      Проверка        |   |  |  | | | | | |   |   |____________
      ________________|   |  |  | | | | | |   |
                          |  |  | | | | | |   |Вспомогательный
      Вложенная           |  |  | | | | | |   |перенос
      задача              |  |  | | | | | |   |_______________
      ____________________|  |  | | | | | |
                             |  | | | | | |Признак нуля
      Уровень привилег.В-В   |  | | | | | |_________________
      _______________________|  | | | | |
                                | | | | |  Знак
      Переполнение              | | | | |__________________
      __________________________| | | |
                                  | | |Трассировка
      Признак направления         | | |____________________
      ____________________________| |
                                    |
      Разрешение прерывания         |
      ______________________________|
 
                     Рис.2-3. Регистр признаков
 .
                                      -  7 -
            
            
                       Назначение признаков.
      
      VM  -  обеспечивает  режим  виртуального  8086  внутри  режима
 виртуальной  адресации.  При  VM  =  1  МП будет переключен в режим
 виртуального 8086,  при  этом  управление  перезагрузкой  сегментов
 будет   осуществляться   подобно   8086,   но   с   исключением  13
 недействительных привилегированных команд. VM может быть установлен
 в РВА  командой  IRET  (если  уровень  приоритета  =  0)  и  задача
 переключается  на  более  низший уровень. Команда POPF не влияет на
 VM. Команда PUSHF всегда сбрасывает VM в 0, если она выполняется  в
 режиме  виртуального  8086.  Содержимое  регистра  признаков  будет
 копироваться  при  прерываниях  или  сохраняться  при  переключении
 задачи,  если  прерывание  будет  выполняться в режиме виртуального
 8086.     
 
      RF - признак используется совместно с  отладочными  регистрами 
 контрольных точек (прерываний) или пошагового режима. С его помощью 
 проверяется ход выполнения  команд  в  отладочном  режиме  (процесс 
 отладки).  Если  установлен  RF (=1), то это позволяет игнорировать 
 ошибки,  возникающие  при  отладке   до   следующей   команды.   RF 
 автоматически  сбрасывается  в  0  при  успешном выполнении команды 
 (ошибки не обнаружены), за исключением команд IRET и POPF, а  также 
 JMP, CALL и INT при переключении задач.Эти команды устанавливают RF 
 в состояние  определяемое  состоянием  памяти.  Например,  в  конце 
 выполнения подпрограммы обслуживания контрольной точки команда IRET 
 может установить RF в состояние, соответствующее значению  регистра 
 признаков, хранимого в стеке без повторной установки RF в 1. 
      
      NT - признак гнездования задач используется только в РВА. NT=1
 указывает,  что  текущая  задача  является вложенной по отношению к 
 другой задаче. Этот бит устанавливается и сбрасывается  при  вызове 
 других  задач.  NT проверяется командой IRET для определения внутри 
 заданного или внешнего  по  отношению  к  данной  задаче  возврата. 
 Команды  POPF  и  IRET будут устанавливать NT в соответствии с тем, 
 что хранится в стеке для любого уровня привилегированности. 
      
      IOPL  -  признак  используется  только  в  РВА. IOPL указывает 
 максимальную   величину    текущего     приоритета,  обеспечивающую 
 выполнение  команд В-В без реакции на 13 ошибку. Этот признак также 
 обеспечивает выбор IF, когда новое значение выталкивается из  стека 
 в  регистр  признаков. POPF  и IRET могут изменять IOPL поле, когда 
 IOPL = 0 (CPL=0). При  переключении  задач  IOPL  может  изменяться 
 всегда при переписи TSS. 
      
      OF - признак переполнения.
      
      DF - указывает, как изменяются значения регистров  ESI  и  EDI
 при выполнении операций со строками. 0 - инкремент, 1 - декремент.
      
      IF - разрешает обработку внешних прерываний (IF = 1).
                               _______
      
      TF  -  при  TF  =  1  генерируется прерывание после выполнения
 каждой команды. Если TF = 0 прерывание возможно только при работе с
 отладочными регистрами DR3...DR0.
      
      SF  - отражает состояние наиболее значащего разряда при работе
 с соответствующим форматом данных.
      
      ZF - признак равенства результата операции нулю.
 
                                      -  8 -
            
            
      
      AF -  устанавливается  при  переносе  или  заеме  в  3  разряд
 независимо от формата операнда.
      
      PF  - PF = 1, если количество единиц в младшем байте четно. Не 
 зависит от формата команд. 
      
      CF  -  перенос  из  старшего   разряда. Соответствует  формату
 операнда.
      
      МП содержит 6  16-ти  битовых сегментных  регистров,  хранящих 
 значение   селектора   и  определяющих  значения  текущих  адресных 
 сегментов. В РВА каждый сегмент может  изменяться  в  диапазоне  от 
 одного   байта  до  максимального  значения  физического  адресного 
 пространства 4 Гбайта. В РРА размеры сегмента  ограничены  размером 
 64 Кбайт. 
 
            
  Сегментные                     Дескрипторные регистры
  регистры                    (загружаются автоматически)
                   База физического  Размеры     Другие атрибуты
  15      0           адреса         сегмента    дескриптора
  _________        _______________________________________________  
  |        |       |                |           | | | | | | | | | |
  |Селектор| СS -  |                |           | | | | | | | |-| |
  |________|       |________________|___________|_|_|_|_|_|_|_|_|_|
  |        |       |                |           | | | | | | | | | |
  |Селектор| SS -  |                |           | | | | | | |-| |-|
  |________|       |________________|___________|_|_|_|_|_|_|_|_|_|
  |        |       |                |           | | | | | | | | | |
  |Селектор| DS -  |                |           | | | | | | |-|-|-|
  |________|       |________________|___________|_|_|_|_|_|_|_|_|_|
  |        |       |                |           | | | | | | | | | |
  |Селектор| ES -  |                |           | | | | | | |-|-|-|
  |________|       |________________|___________|_|_|_|_|_|_|_|_|_|
  |        |       |                |           | | | | | | | | | |
  |Селектор| FS -  |                |           | | | | | | |-|-|-|
  |________|       |________________|___________|_|_|_|_|_|_|_|_|_|
  |        |       |                |           | | | | | | | | | |
  |Селектор| GS -  |                |           | | | | | | |-|-|-|
  |________|       |________________|___________|_|_|_|_|_|_|_|_|_|
 
             Рис.2-4. Сегментные регистры и соответствующие
                         дескрипторные регистры 80386
 .                
                                      -  9 -
                                      
                 
      Дескрипторные   регистры   сегментов   программно  не  видимы, 
 благодоря этому они удобны для восприятия.  С  другой  стороны  эти 
 регистры   неразрывно   связаны   с   соответствующими  сегментными 
 регистрами.  Каждый  дескрипторный  регистр  хранит  32-х   битовый 
 базовый  адрес  сегмента,  32-х  битовый  размер  сегмента и другие 
 необходимые атрибуты сегмента. 
      Когда значение селектора  загружается  в  сегментный  регистр,
 соответствующий  дескрипторный  регистр  автоматически  загружается
 правильной информацией. В РРА  непосредственно используется  только
 адрес базы  (со  сдвигом  на 4 разряда влево), а размеры сегмента и
 атрибуты постоянны  (фиксированы для  РРА). В  РВА  база, размер  и
 атрибуты   сегментного  дескриптора  определяется  селектором. 32-х
 битовый адрес базы  сегмента  становится  компонентом  формирования
 исполнительного    адреса, 32-х   битовый   размер   сегмента   для
 проверки  границ  рабочей   области, а  атрибуты   проверяются   на
 соответствие типу запрашиваемой памяти (типу обращения). 
 
                Управляющие регистры.
      
      МП содержит  3  управляющих  32-х битовых регистра: CRO, CR2 и
 CR3,  хранящие  состояние  машины  и  не   зависящие   от   текущей
 исполняемой  задачи. Доступ  к  регистрам обеспечивается  с помощью
 специальных команд.
      
      CRO   -   регистр   управления   машиной   (заменяет   регистр
 словосостояния машины 80286).
      
  31             24 23           16 15            8 7              0
  _________________________________________________________________
  |  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
  | P|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|E|T|E|M|P|
  | G| | | | | | | | | | | | | | | | | | | | | | | | | | |T|S|M|P|E|
  |__|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
  
                                   `---------------\/--------------'
                                          Словосостояния машины
                                           80286 (MSW)
                                           
                 Рис.2-5.CR0 регистр управления машиной
      
      Для  сохранения  совместимости  с 80286 в системе команд 80386
 оставлены инструкции LMSW и SMSW, работающие с младшими 16-ю битами
 CRO. Новые ОС 80386 будут использовать команду MOVCRO.
 .     
                                      - 10 -
                 
                 
                      Назначение битов
      
      PG -       при PG = 1 включен режим страничной адресации.
  (PAGING ENABLE)
      
      ET   -   указывает    на     тип     сопроцессора      (ET=1 -
  (PROCESSOR 80387,  ET = 0 - 80287). Устанавливается в соответствии
  EXTENSION    с   уровнем   сигнала   на   входе   ERROR  во  время
  TYPE)        начальной         установки.  Кроме      того,  может
               устанавливаться   и   сбрасываться   программно.  Для
               обеспечения   совместимости    с    80286    ET    не
               устанавливается командой LMSW.
     
      TS   -    автоматически   устанавливается   при   переключении 
  (TASK         задач. Если TS=0 и MP=1, то  при  получении  команды 
  SWITCHED)     для    сопроцессора    формируется    прерывание   7 
                (отсутствие сопроцессора). Подпрограмма обслуживания 
                прерывания   обычно  сохраняет  содержимое  287/387, 
                принадлежащее    предыдущей    задаче,     загружает 
                состояния,    принадлежащие    текущей   задаче,   и 
                сбрасывает  TS  бит  в  состояние,  в   котором   он 
                находился до получения команды для сопроцессора. 
 
       EM  -    EM=1 тогда, когда  все  команды   для   сопроцесcора
 (EMULTE        должны    формировать   прерывание   7   (отсутствие
 COPROCESSOR)   сопроцессора). EM=0   после   начальной   установки.
                Команда WAIT не влияет на состояние EM. 
 
      MP  -     MP используется совместно с TS. Если MP=1 и TS=1, то
 (MONITOR       при получении команды WAIT генерируется прерывание 7.
 COPROCESSOR)
 
      PE -      указывает  (PE=1)  на  режим виртуальной  адресации.
 (PROTECTION    При  PE=0 работает в РРА. PE может быть   установлен
 ENABLE)        командами LMSW и  LCRO. Заметим, что для обеспечения
                совместимости с 80286 PE  не  сбрасывается  командой
                LMSW.
 
      CR1 -     зарезервирован фирмой Intel для будущих процессоров.
      
      CR2 -      регистр   для   хранения   исполнительного   адреса 
                 отсутствующей страницы. Регистр хранит 32-х битовый 
                 исполнительный     адрес     страницы,      которая 
                 отсутствовала  (последний  промах)  в  памяти.  Это 
                 значение может быть сохранено в стеке подпрограммой 
                 обслуживания промаха для дополнительного анализа. 
                      
                       
      CR3 -      регистр хранения базового адреса  таблицы  страниц. 
                 Хранит  физический  адрес  базы определения таблицы 
                 страниц.  Так  как   размеры   страниц  фиксированы  
                 (4 Кбайт), то  двенадцать   младших   разрядов   не 
                 действительны. При  переключении  задач  содержимое 
                 CR3 должно сохраняться в кэш - памяти страниц. 
      
 .     
                                      - 11 -
                                      
                                      
  31            24|23           16|15          8|7         0
  ________________|_______________|_____________|___________
  |                                                         |
  |Регистр исполнительного адреса отсутствующей страницы    |  CR2
  |_________________________________________________________|
  |                                 | | | | | | | | | | | | |
  |Регистр базы определения таблицы | | | | | | | | | | | | |
  |страниц                          |0|0|0|0|0|0|0|0|0|0|0|0|  CR3
  |_________________________________|_|_|_|_|_|_|_|_|_|_|_|_|
  
           Рис.2-6. 2 и 3 регистры управления
                 
               Системные регистры адреса
      
      Системные  регистры  поддерживают  РВА  процессоров  286/386 и
 включают:
      GDT - таблица глобальных дескрипторов;
      IDT - таблица дескрипторов прерываний;
      LDT - таблица локальных дескрипторов;
      TSS - сегмент состояния задачи.
      
               Системные регистры адреса
      
  47   32-х битовый исполнительный адрес базы  16 15  Граница   0
  ______________________________________________________________
  |                                              |              |
  |______________________________________________|______________|GDTR
  |                                              |              |
  |______________________________________________|______________|IDTR    
     
    Системные                Дескрипторные регистры
    сегментные             (загружаются автоматически)
    регистры
      
                         32-х битовый        Граница      Атрибуты
                         исполнительный                  
                         адрес базы                       
         15         0               
         ___________     _________________________________________
        |           |    |              |                | |    | |
  TR    | Селектор  |    |              |                | |    | |
        |___________|    |______________|________________|_|____|_|
        |           |    |              |                | |    | |
  LDTR  | Селектор  |    |              |                | |    | |
        |___________|    |______________|________________|_|____|_|
      
      Рис.2-7. Системные адресные и системные сегментные регистры
      
      Регистры GDTR и IDTR являются общими для всех задач системы.
      Регистры LDTR и TR являются специфичными для каждой задачи.
 .
                                      - 12 -
            
            
     Отладочные регистры
   31                    0
   ______________________
   |                     |
   |Адрес трассировки  0 | DRO     Отладочные регистры имеют в своем 
   |                     |         составе 6 регистров
   |_____________________|
   |                     |
   |Адрес трассировки  1 | DR1
   |_____________________|
   |                     |
   |Адрес трассировки  2 | DR2
   |_____________________|
   |                     |
   |Адрес трассировки  3 | DR3
   |_____________________|
   |                     |
   |Резерв Intel         | DR4
   |_____________________|
   |                     |
   |Резерв Intel         | DR5
   |_____________________|
   |                     |
   |Состояние трассировки| DR6
   |_____________________|
   |                     |
   |Управление трассиров.| DR7
   |_____________________|
 
      
     Тестовые регистры
    (для кэш-памяти страниц)
      
   31                    0
   ______________________
   |                     |
   |Управление           |
   |тестированием        | TR6     Тестовые регистры предназначены 
   |_____________________|         для для проверки  ассоциативным
   |                     |          ЗУ буфера трансляции адресов МП.
   |Состояние при        |
   |тестировании         | TR7
   |_____________________|
 
        Рис.2-8. Отладочные и тестовые регистры
 
      Существуют  различия  в  доступности  регистров  в   различных
 режимах работы МП.
 .
                                      - 13 -
            
            
               Таблица 2-1. Использование регистров
   ________________________________________________________________
   |                    |             |              |             |
   |    Регистр         |Использование|Использование |Использование|
   |                    |в РРА        |в РВА         |в вирт.8086  |
   |                    |_____________|______________|_____________|
   |                    |      |      |      |       |      |      |
   |                    |загр. |разгр.|загр. |разгр. |загр. |разгр.|
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | РОН                |да    |да    |да    |да     |да    |да    |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | Сегментные         |      |      |      |       |      |      |
   | регистры           |да    |да    |да    |да     |да    |да    |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | Регистры           |      |      |      |       |      |      |
   | признаков          |да    |да    |да    |да     |IOPL  |IOPL  |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | Управляющие        |      |      |      |       |      |      |
   | регистры           |да    |да    |PL=0  |PL=0   |нет   |да    |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | GDTR               |да    |да    |PL=0  |да     |нет   |да    |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | IDTR               |да    |да    |PL=0  |да     |нет   |да    |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | LDTR               |нет   |нет   |PL=0  |да     |нет   |нет   |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | TR                 |нет   |нет   |PL=0  |да     |нет   |нет   |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | Управление         |      |      |      |       |      |      |
   | отладкой           |да    |да    |PL=0  |PL=0   |нет   |нет   |
   |____________________|______|______|______|_______|______|______|
   |                    |      |      |      |       |      |      |
   | Тестовые           |      |      |      |       |      |      |
   | регистры           |да    |PL=0  |PL=0  |PL=0   |нет   |нет   |
   |____________________|______|______|______|_______|______|______|
      
      PL=0     -     регистры    доступны    только    при    уровне
 привилегированности, равном 0.
      IOPL     -     команды PUSHF и POPF могут изменять IOPL.
      
      Замечания.
      
      Для  обеспечения    совместимости   с   будущими  процессорами
 необходимо:
      1)     маскировать    (исключать    влияние)    неопределенных 
 (неиспользованных  битов  в  соответствующих   регистрах   при   их 
 проверке; 
      2) обеспечить отсутствие  влияния  этих битов  при записи их в
 память и другие регистры;
      3) исключить запись информации в неопределенные биты;
      4)  обеспечивать  запись  0  в  неиспользованные  биты,  когда
 загружаются соответствующие регистры.
      
 
                                      - 14 -
            
            
                Система команд процессора
      
      Система команд включает 9 групп команд:
      
      1) передачи данных;
      2) арифметические;
      3) сдвига;
      4) обработки строк;
      5) манипуляции битами;
      6) передачи управления;
      7) поддержки языков высокого уровня;
      8) поддержки операционной системы;
      9) управления процессором.
      
      Команды  могут  содержать  от  0 до 3 операндов, размещенных в
 регистрах  памяти  или  непосредственно  в   команде.   Большинство
 безоперандных  команд - однобайтовые. Однооперандные команды обычно
 двухбайтовые. Средняя  длина  команды  -  3,2 байта. Это  позволяет
 хранить  в  среднем  5 команд в 16-ти байтовой очереди команд блока
 опережающей  выборки. При  использовании  двух  операндов  возможны
 следующие типы взаимодействия: регистр-регистр;
                                память-регистр;
                                непосредственный операнд-регистр;
                                память-память;
                                регистр-память;
                                непосредственный операнд-память.
      Операнды   могут   быть   8,   16  или  32-х разрядными. Когда
 выполняются команды, написанные для 80386, операнды имеют  длину  8
 или  32 бита, когда для 80286 и 8086-операнды 8 или 16 бит. Ко всем
 инструкциям могут  добавляться  префиксы,  которые  изменяют  длину
 операндов  (т.к.  позволяют  использовать  32-х  битовые операнды в
 16-ти битовых командах или 16-ти битовые операнды  в  32-х  битовых
 командах).
      
                        Режимы адресации
      
      МП  обеспечивает  11  режимов адресации, которые рассчитаны на
 эффективное  выполнение  программ,   написанных на  ЯВУ  типа   С и
 Фортран.  Два режима адресации: режим регистровой адресации и режим
 непосредственной   адресации - предназначены,  соответственно,  для
 адресации    одного    из    регистров   регистрового   блока   или
 непосредственного операнда с разрядностью 8, 16, 32 бита.
      Имеется  9  режимов  адресации  памяти.  Исполнительный  адрес
 включает в себя два компонента адреса базы - сегмента и эффективный
 адрес. Эффективный адрес вычисляется  суммированием  следующих  4-х
 элементов:
      1)  смещение  -  8  или 32-х битовая величина, непосредственно
 задаваемая в команде (16-ти битовые смещения  могут  использоваться
 при помощи префикса);
      2)  база  -  содержимое любых РОНов.   Базовые регистры обычно
 используются компиляторами     в качестве  точки  отсчета локальной
 области памяти;
      3)  индекс  - содержимое любых  РОНов, исключая ESP. Индексные
 регистры используются для доступа к элементам строк или массивов. 
      4) величина   -   указывает   шаг   (1,  2,  4   или  8)   для
 (шаг   индексации)  индексного  регистра. Шаг индексации  позволяет
                      успешно адресовать массивы или структуры.
      
 .                
                                      - 15 -
                 
                 
      Вычисление  эффективного  адреса   практически   не   ухудшает
 производительность   процессора  из-за  использования  конвейерного
 режима. Единственное исключение - одновременное использование базы,
 индекса и смещения, что ухудшает быстродействие на один такт.
      EA = база + индекс (с определенным шагом)+ смещение.
      
                       Режимы (см. рис.2-9).
      
      Прямой  адресации. Смещение адреса операнда содержится в 8, 16
                         или 32 разрядах команды. 
      Регистровый косвенный.  Базовый или индексный регистр содержат
                         адрес операнда. 
      Базовая адресация. Базовый регистр суммируется со смещением.
      Индексная   адресация.   Индексный   регистр   суммируется  со
                         смещением. 
      Индексная адресация с шагом. Содержимое  индексного   регистра
                         умножается   на   шаг   и   суммируется  со
                         смещением.  
      Базово-индексная адресация. ЕА = база + индекс.
      Базово-индексная адресация  с шагом. ЕА = база + индекс * шаг.
      Базово-индексная адресация  со смещением. ЕА = база + индекс +
                         + смещение.
      Базово-индексная адресация со смещением и с шагом.
                         ЕА = база + индекс * шаг + смещение.
 
          Различия между 32-х и 16-ти разрядными адресами.
      
      Для   обеспечения   совместимости  ПО  процессоров  необходимо
 программы (с 16-ти битовыми командами МП 86 и 286)   выполнять   на 
 МП  386  в  реальном  или  защищенном режимах. Процессор определяет
 размерность адреса, анализируя D бит в дескрипторе сегмента. 
 Если   D=0,   то   все   длины   операндов  и  эффективных  адресов
 составляют 16 бит. Если D=1 - 32 бита. В реальном режиме - 16 бит.
      Изменение  бита  D  для  команд  обеспечивают  два   префикса,
 выбираемые перед этими командами: 1) префикс размерности  операнда,
                                   2) префикс длины адреса.
      Префиксы автоматически добавляются ассемблером  фирмы   Intel.
      
     Таблица 2-3. Базовые и индексные регистры для 16-ти и 32-х 
                             байтовых адресов.
      ____________________________________________________________
      |                       |                |                  |
      |                       |  16-ти битовый |   32-х битовый   |
      |                       |     адрес      |       адрес      |
      |_______________________|________________|__________________|
      |                       |                |                  |
      |Базовый регистр        |  BX, BP        | Любой 32-х битный|
      |                       |                |     РОН          |
      |_______________________|________________|__________________|
      |                       |                |                  |
      |Индексный регистр      |  SI, DI        | Любой 32-х битный|
      |                       |                | РОН, исключая ESP|
      |_______________________|________________|__________________|
      |                       |                |                  |
      |Шаг                    |  нет           | 1, 2, 4, 8       |
      |_______________________|________________|__________________|
      |                       |                |                  |
      |Смещение               |  0, 8, 16 бит  | 0, 8, 32 бит     |
      |_______________________|________________|__________________|
          
      В этой таблице показана  разница  в  использовании  базовых  и
 индексных регистров. 
 
                                      - 17 -
            
            
      Префиксы могут использоваться совместно или раздельно с  любой
 инструкцией.  Префикс  длины  адреса  не  обеспечивает  размерность
                                       ----------------
 адреса более 64 Кбайт  в  режиме  реальной  адресации. Адрес  свыше
 FFFFH  будет   рассматриваться  как  ошибка. Префикс  длины  адреса
 используется только для дополнительных режимов адресации 80386.
 
                        Типы данных
 
      80386 поддерживает все типы данных, используемые ЯВУ.
      Бит -  одиночный двоичный разряд.
      Битовое поле - группа до 32-х битов.
      Цепочка  битов (строка) - набор последовательных битов, длиной
 до 4 Гбит.
      Байт - 8-ми битовая (включая знак) величина.
      Беззнаковый байт - 8-ми битовая (без знака) величина.
      Целое (слово) - 16-ти битовая (включая знак) величина.
      Длинное целое (двойное слово) - 32-х  битовая  (включая  знак)
 величина.
      Беззнаковое целое (слово) - 16-ти битовая (без знака) величина.
      Беззнаковое  длинное целое (двойное слово) - 32-х битовая (без
 знака) величина.
      Счетверенное слово со знаком - 64 бита, включая знак.
      Счетверенное слово без знака - 64 бита без знака.
      Короткий  указатель  -  16-ти  или  32-х  разрядное  смещение,
 косвенно определяющее ячейку памяти.
      Указатель  -  16-ти битовый сегмент и 16-ти или 32-х разрядное
 смещение.
      Символ    -    байтовое    представление     управляющих     и
 алфавитно-цифровых символов ASCII.
      Строка - последовательность из байтов.
      Двоично-десятичный     код    -    байтовое    (неупакованное)
 представление десятичных цифр от 0 до 9.
      Упакованный двоично-десятичный код  -  байтовое  представление
 двух десятичных цифр от 0 до 9.
      
      В тех  случаях, когда  80386  взаимодействует с арифметическим
 сопроцессором  типа   80287  или  80387,  дополнительно  используют
 формат с:
      плавающей  запятой  -  знаковое  32-х,  64-х и 80-ти разрядное
 представление (порядка и мантиссы).
      
                      См. рис.2-10.
      
                    Организация памяти
 Память  делится  на  байты,  слова  и  двойные  слова. Байты слов и 
 двойных  слов  размещаются,   образуя   последовательную   цепочку. 
 Байтовый  адрес  слова  и  двоичного  слова  соответствует младшему 
 байту.  В  дополнении  к  основным   типам   данных   80386   может 
 поддерживать еще две большие единицы памяти: страницы и сегменты. 
      Память  может  быть  поделена  на один или несколько сегментов 
 различной  длины,  которые  могут   подкачиваться   с   диска   или 
 использоваться  совместно  несколькими  программами.  Память  может 
 также  делится  на  одну  или  несколько   4   Кбайтовых   страниц. 
 Сегментация   и   страничная   организация   могут   использоваться 
 совместно,  обеспечивая  преимущества  обоих  методов.  Эти  методы 
 являются  взаимодополняющими. Сегментирование удобно для прикладных 
 программистов,  работающих  с  логическими  адресами,   тогда   как 
 страничная  адресация  -  для  системных программистов, управляющих 
 физической памятью. 
 
                                      - 19 -
            
            
      
                 Пространство адресов
 
      80386 имеет три типа адресов:
      логический (виртуальный);
      исполнительный (линеаризованный);
      физический.
      
      Логический  адрес  включает  селектор  и  смещение. Селектор -
 содержимое сегментного регистра. Смещение - сумма базы,  индекса  и
                                                               14
 смещения.   Каждая   задача   может  оперировать  с  16 К   (2  -1)
 селекторами и смещениями, каждый из которых может    быть  размером  
             32                                               46
 4  Гбайт  (2  бит),  создавая тем  самым общее пространство  2  (64
 Тбайт) для задачи. Блок сегментации транслирует логические адреса в
 исполнительные.     Блок     страничной    адресации    преобразует
 исполнительные адреса в физические. Если блок страничной  адресации
 не  используется,  то  исполнительный  адрес  является  физическим.
 Физическим  называется  адрес  на   контактах  процессора. Основное
 отличие  режима  РА  от  ВА заключается в том, как логический адрес
 преобразуется в исполнительный. В  РРА  блок  сегментации  сдвигает
 селектор на 4 бита влево и добавляет результирующее смещение. В РВА
 каждый селектор имеет  определенную  базу  исполнительного  адреса.
 База  исполнительного  адреса  хранится  в одной из двух страниц ОС
 (таблице   локальных   дескрипторов    или    таблице    глобальных
 дескрипторов).   База   исполнительного   адреса   соответствующего
 селектора складывается с  результирующим  смещением  для  получения
 исполнительного адреса. 
                       См. рис.2-11.
      
              Использование сегментных регистров
 
      Основная структура в организации памяти - сегмент.
      Сегменты  -  блоки  памяти  переменной  длины   (от 1 байта до 
 4  Гбайт),  имеющие  определенные  атрибуты.  Три   основных   типа
 сегментов - стек, команды, данные.
      Для     компактного    кодирования    команд    и    повышения
 производительности  МП  команды  не  содержат  явного  указания  на
 используемый  сегментный  регистр. Определение сегментного регистра
 производится автоматически в соответствии с табл.2-4.
                     
 
      Обычно   название   сегментного   регистра  указывает  на  тип
 информации, для адресации которой  он  используется.  Использование
 префикса   переадресации  позволяет  явно  определять  используемый
 регистр, в том числе FS и GS. Это позволяет  совмещать  сегменты  и
 работать с 4 Гбайтовым пространством исполнительных адресов.  
 
                  Пространство ввода - вывода
      
      80386 имеет  два различных  адресных  пространства:  память  и
 ввод/вывод. Обычно периферия размещается в адресах ввода/вывода, но
 могут использоваться адреса памяти.
      Размеры    пространства   адресов   ввода/вывода   -   64   К.
      Разрядность устройств ввода/вывода - 8, 16 или  32 бита. 
      Исполнительный  адрес  ввода/вывода  формируется  без  участия
                                                        --
 блоков  сегментации  и  страничной  адресации. Вывод M/IO указывает
 область, к которой  обращается  процессор.Взаимодействие  устройств
 ввода/вывода  с  МП обеспечивается командами IN и OUT через регистр
 DL, DX или EDX.
                 
 .                
                                      - 21 -
                 
      ____________________________________________________________
      |                                                           |
      | Адреса    ввода/вывода     00F8H...00FFH  зарезервированы |
      | фирмой    Intel.   Арифметические   сопроцессоры    также |
      | размещаются  в  этом  пространстве как ячейки с  адресами |
      | 800000F8H...800000FCH.                                    |
      |___________________________________________________________|
      
 
                          Прерывания
      
      Прерывания  и  особые  ситуации  используются  как  реакция на
 внешние события, ошибки или особые условия. Прерывания - реакция на
 внешние  события,  но  могут вызываться программно (INT N).  Особые
 ситуации - реакция на ошибки, возникающие  при  выполнении  команд.
 Прерывания  делятся на маскируемые и немаскируемые и принимаются на
 обслуживание после завершения выполнения текущей команды. 
      Особые ситуации классифицируются как:
      промахи  -  обнаруживаются   перед   выполнением   команды   и
 соответствуют  отсутствию  нужной  страницы  или  сегмента в памяти
 (необходимо  подкачивать  с  диска   и   перезапускать   выполнение
 команды); 
      трассировки - немедленно  выполняются    после      выполнения
 команды; 
      ошибки - возникают  при  аппаратных  ошибках  или  запрещенных
 значениях в системных таблицах.
      Таким   образом,   после  завершения  выполнения  подпрограммы
 обслуживания прерывания, программа немедленно переходит  к  команде
 следующей за прерванной.  
      В  противоположность  этому,  адрес  возврата  из подпрограммы
 будет соответствовать команде, вызвавшей особую ситуацию и включать
 некоторую предварительную префиксацию команды. 
      80386 может управлять до 256 различными прерываниями - особыми
 ситуациями (таблица содержит 256 векторов). В РРА  вектор  включает
 4  байта  (значение  регистра кодового сегмента + смещение). В  РВА
 вектор  имеет  8   байт,   соответствующих   таблице   дескрипторов
 прерываний.  Из  256  прерываний  32  зарезервировала  фирма Intel.
 Остальные свободны для системных программистов. 
      
                      См. табл.2-5.
      
                  Обработка прерываний 
      
      Когда возникает прерывание, выполняются следующие действия:
      1) адрес текущей программы и флаги сохраняются в стеке;
      2) 8-ми битовый вектор поступает в 80386 и определяет  вход  в
 таблицу  прерываний;  таблица содержит начальный адрес подпрограммы
 обслуживания прерывания;
      3) затем выполняется подпрограмма обслуживания прерывания;
      4) по команде IRET  восстанавливает  старый  вектор  состояния
 процессора.
      8-ми битовый вектор может поступать в 80386 различными путями:
      а) извне,
      б) по команде INT - внутри команды,
      в) изнутри при особых ситуациях.
      
 .                
                                      - 23 -
                 
                 
      Немаскируемый вектор соответствует вектору 2.
      Маскируемое  прерывание.  Наиболее   распространенный   способ
      -----------------------                              __
 реакции на внешние события. Условие прерывания - INTR = __| ,
                                                    IF = 1.
      Реакция  на  прерывания  -  только  между выполнением соседних 
 команд (при  выполнении  команд,  работающих  со  строками,  в  них 
 предусмотрены  окна  между  обращениями  к  памяти  для  реакции на 
 прерывание).  При  получении  запроса  процессор   считывает   8-ми 
 байтовый  вектор,  указывающий  на  наличие прерывания (один из 224 
 пользовательских)   и   выполняет   последовательность    действий, 
 описанных  в  главе  5. Разряд IF в регистре признаков сбрасывается 
 при переходе к обработке запроса. Подпрограмма обработки прерывания 
 может установить IF в 1 и разрешить чередование прерываний. Команда 
 IRET устанавливает IF  в  состояние,  соответствующее  хранимому  в 
 стеке. 
      Немаскируемое  прерывание.   Используется   для   обслуживания
      -------------------------
 запросов  с  очень  высоким  приоритетом.  Типичное использование -
                                                                  __
 прерывание  при  пропадании  напряжения  питания.  При   NMI =__|
 возникает  прерывание  уровня  2  без  подачи  вектора  извне. Если
 выполняется подпрограмма обслуживания NMI, то МП на другие  запросы
 не  воспринимаются  до  тех  пор, пока не поступит команда IRET или
 сигнал начальной установки. Если во время обработки  NMI  поступает
 еще  один  NMI,  то  он  запоминается  и будет обрабатываться после
 получения команды IRET. При обработке NMI IF сбрасывается в 0.
      
      Программные прерывания. Соответствуют получению команды INT n.
      ----------------------
 Особым  случием  двухбайтных  команд  INT  n  является однобайтовая
 команда INT 3 (прерывание по контрольной точке),  используемое  для
 отладки программ. 
 
                Таблица 2-6. Приоритеты прерываний
 
  _________________________________________________________________
  |                 |                                              |  
  | Приоритет       |           Прерывания/особые ситуации         | 
  |_________________|______________________________________________|
  |                 |                                              |
  | 1  (наивысший)  |Ошибки                                        |
  | 2               |Команды трассировки                           |
  | 3               |Трассировка при отладке текущей команды       |
  | 4               |Трассировка при ошибках в последующих командах|
  | 5               |NMI                                           |
  | 6               |Аппаратурные прерывания по входу INTR         |
  |_________________|______________________________________________|    
 
      
                           Перезапуск команд
 
      80386  поддерживает перезапуск любой команды при возникновении
 промаха. От ОС не  требуется  перезапуска  всего  процесса,  т.  к.
 некорректность  обращения будет устранена внутри выполнения текущей
 команды с  помощью  вызова  соответствующей  подпрограммы,  которая
 подключает  требуемую  страницу.  Перезапуск  команд  гарантируется
 всегда, за исключением двух случаев:
      1)  команда   вызывает   переключение   задач   в   TSS,   что
 соответствует отсутствию страницы;
 
                                      - 24 -
            
            
      2)   один   из  операндов  размещается  ниже  любого  текущего
 указателя стека (т. е. адрес памяти ниже вершины стека) или операнд
 с плавающей точкой размещается в любом месте памяти.
      
                          Двойные ошибки
      
      Двойными   ошибками  называются  случаи  возникновения  особой
 ситуации во время  выполнения  процессором  подпрограммы  обработки
 особой  ситуации,  возникшей  ранее.  Такие  ситуации соответствуют
 прерыванию уровня 8. Большинство прерываний не  может  приводить  к
 двойным  ошибкам  (типы  1,  2,  3, 4, 5, 6, 7, 9, 14 и 16). Только
 деление на нуль (тип 0) и сегментные ошибки  (10,11,12,13)    могут
 приводить к двойным ошибкам.
      Отсутствие страницы в памяти не приводит  к  двойным  ошибкам.
 Например,  отсутствие  сегмента  и страницы в ЗУ одновременно может
 обслуживаться как последовательность из двух особых ситуаций  и  не
 является двойной ошибкой.
      
                      Сброс и инициализация
      
      При сбросе регистры МП устанавливаются в следующих состояниях.
 Выбор первой команды происходит  из  ячейки  с  физическим  адресом
 FFFFFFF0.  При первой же команде межсегментного перехода или вызове
 (CALL) адресные линии А20...А31 устанавливаются в  0,   тем   самым
 обеспечивая  работу  МП  в младшем мегабайте физической памяти. Это
 позволяет  разработчику  памяти   использовать   ПЗУ   на   вершине
 физической памяти.
      Импульс  на входе СБРОС должен быть не менее 78 периодов серии
 CLK 2. Сигнал СБРОС прерывает все операции на локальной шине МП.  В
 системе  команд  МП  отсутствуют  инструкции,  которые  выполняются
 дольше, чем действует сигнал СБРОС. Между 350 и 450 импульсами  CLK
 2 после окончания сигнала СБРОС начинается выполнение 1-ой команды.
      
            Таблица 2-7. Состояния регистров после сброса
 
   ________________________________________________________________
  |                                          |                     |
  | Регистр признаков                        |  U U U U 0 0 0 2    |
  | Регистр ССП                              |  U U U U U U U 0    |
  | Указатель команд                         |  0 0 0 0 F F F 0    |
  | Командный сегмент                        |      F 0 0 0        |
  | Сегмент данных                           |      0 0 0 0        |
  | Сегмент стека                            |      0 0 0 0        |
  | Сегмент экстракодов                      |      0 0 0 0        |
  |       FS                                 |      0 0 0 0        |
  |       GS                                 |      0 0 0 0        |
  | Другие регистры                          |     не определ.     |
  |__________________________________________|_____________________|    
 
                    Примечания
      
      1.  Бит  14  регистра  признаков  не  определен,  биты 16 и 17
 устанавливаются  в  0  как  и  все  остальные   признаки   (которые
 определяются).
      2.  В  регистре  ССП все определяемые поля устанавливаются в 0
 (биты 0, 1, 2, 3, 31). Бит  4  устанавливается  во  время  действия
 сигнала СБРОС в соответствии с типом сопроцессора. Если сопроцессор
 - 80386, бит 4 =1, в других случаях (80287  или  отсутствия)  -  0.
 Остальные биты не определены.
      3. Регистр кодового сегмента будет иметь адрес базы FFF00000 и
 размер  0FFFF. Все  неустанавливаемые  биты  зарезервированы фирмой
 Intel и не должны использоваться.
      
 .                
                                      - 25 -
                 
                  Тест пригодность
      
      МП  имеет  возможность  самодиагностирования.  Самодиагностика
 охватывает все управляющие  ПЗУ  и  большинство  регулярных  узлов.
 Приблизительно  половина  оборудования  охвачена  самодиагностикой.
                                             __        ----
 Самодиагностика  запускается  при  RESET  =   |__  и  BUSV   =   0.
 
 Самодиагностирование  занимает приблизительно 30 мСек (т. е. 500000 
 периодов  CLK  2  16  МГц  МП).   После   самодиагностирования   МП 
 осуществляет  сброс  и  переходит  к  нормальной  работе.  Проверка 
 считается успешной, если содержимое регистров EAX и EDX равно 0.  В 
 противном случае МП не исправлен. 
      80386 также обеспечивает механизм для тестирования  устройства
 преобразования  (TLB)  адресов.  Это  свойство,  в  первую очередь,
 полезно для разработчика тестовых программ для 80386. Данный  метод
 тестирования  уникален  для  80386 и в последующих моделях может не
 использоваться.  Тестирование TLB требует подачи тестовых  наборов,
 написанных  на  языке  ассемблера. Управление страницами   при этом
 должно быть отключено.
      Два  регистра  используются для подачи на TLB тестовых наборов
 (TR6) и  считывания ответных реакций (TR7) 
     
 
     31                12  11                                0
     _____________________|___________________________________
     |                    |  |  |- |  |- |  |- | *| *| *|  |  |
     |Исполнительный адрес|V |D |D |U |U |W |W |0 |0 |0 |C |C | TR6
     |____________________|__|__|__|__|__|__|__|__|__|__|__|__|
     |                    | *| *| *| *| *| *| *|P |     | *| *|
     |Физический адрес    |0 |0 |0 |0 |0 |0 |0 |L |REP  |0 |0 | TR7
     |____________________|__|__|__|__|__|__|__|__|_____|__|__|
 
      * - зарезервмрованы фирмой Intel.
      
                 Рис.2-12. Тестовые регистры
      
               Средства поддержки отладочных режимов
      
      80386    имеет     ряд     свойств,     упрощающих     процесс
 отладки.   Большинство   этих  свойств  предназначены  для  отладки
 программного  обеспечения  (заметим,  что  Intel  будет   создавать
 эффективный набор аппаратно - программных отладочных средств, таких
 как  ICE-386  -  внутрисхемный  эмулятор  и  PTM-386  -  отладочный
 монитор, дополняющие встроенные средства. 
      
      Для осуществления отладки необходимо реализовать 3 возможности:
      1)Введение в программу контрольных точек;
      2)пошаговый режим;
      3)наличие отладочных (вспомогательных) регистров.
      
      Однобайтовое  прерывание (INT 3) позволяет вводить контрольные
 точки. 
      Пошаговый  режим  обеспечивается  установкой  TF  в   регистре
 признаков инструкциями POPF и IRET.
      После  установки  TF  после  каждой  команды будет выполняться
 прерывание.Подпрограмма  обработки  прерывания   убирает   в   стек
 содержимое регистра признаков (с установленным в 1 TF) и сбрасывает
 TF в 0, обеспечивая нормальный режим работы подпрограммы.
                 
 .                
                                      - 26 -
                 
                 
      Прерывание  при  пошаговом   режиме   использует   вектор   1,
 формируемый внутри процессора.
      После  выполнения  подпрограммы  по  команде  IRET  содержимое
 регистра  признаков  восстанавливается  (из   стека)   и   начинает
 выполняться следующая команда подпрограммы.
      
      Отладочные регистры - уникальная особенность 80386 !
 
      Имеется  6  программно  доступных регистров для обслуживания 4
 произвольных контрольных точек. В отличие от традиционного  подхода
 содержимое  регистров  может  использоваться в качестве контрольных
 точек не только для команд, но и для операндов. 
      Детальное    содержимое    отладочных    регистров    приведен
 на рис.2-13.
      
      Замечания.
      ----------
      Исполнительный адрес  может  не  соответствовать  физическому,
 если включен блок страничной адресации.
      DR6 содержит статус регистров контрольных точек.
      Биты, хранимые в этом регистре, имеют следующие значения:
      BT  установлен  в  1,  если  при переключении задач происходит
 переход на задачу, в которой TSS имеет бит DEBUG TRAP = 1.
      BS устанавливается отладочными подпрограммами для того,  чтобы
 отличить режим пошаговой трассировки от других отладочных режимов. 
      BD   устанавливается  аппаратурой,  если  последующая  команда
 обращается к отладочному регистру.
      B0...B3  устанавливаются   при   активизации   соответствующих 
 контрольных  точек.  B0  соответствует  нулевой контрольной точке и 
 т.д. 
      DR7 - регистр управления отладкой; используется для выполнения
 и определения различных контрольных точек. Его биты имеют следующее
 значение.
      LENi-это двухбитовое поле определяет длину контрольной точки i.
      Все контрольные точки должны быть выровнены:
                      двухбайтовые - по границам слов,
                      четырехбайтовые - по границам двойных слов.
                      
                      00 - байт,
                      01 - два байта,
                      10 - не использ. (не определена),
                      11 - 4 байта.
      RWEi-это  двухбитовое поле определяет тип доступа к памяти, по
 которому должна активизироваться контрольная точка.
      
                      00 - по выборке команды,
                      01 - по записи данных,
                      10 - не использ. (не определена),
                      11 - по записи или считывания данных.
      GE/LE   -   требование  глобальной  (GE)  или  локальной  (LE) 
 контрольной точки. Должны всегда устанавливаться в 1 при  работе  с 
 соответствующими контрольными точками. 
      Gi/Li  -  включение глобальных или локальных контрольных точек 
 (Gi=1 или Li=1 для i-той точки). Li-соответствует i-той контрольной 
 точке для одной задачи, Gi-для всех задач. 
      При  загрузке  значений  контрольных  точек  процессор  должен 
 работать с нулевым уровнем привилегированности или в режиме  PA.  В 
 этом  случае  загрузка  обеспечивается командами MOV DRi, REG/MEM с 
 указанием адреса соответствующего регистра. Затем загружаются  биты 
 LEN и RWE. Последними устанавливаются биты Gi и/или Li. 
      Bi  биты  в  DR6  всегда  будут  показывать   активизированные
 контпольные  точки,  но  до тех пор, пока Gi или Li не установлены,
 процессор  не  будет   выполнять   отладочную   подпрограмму   (как
 прерывание 1).
      
 .
                                      - 28 -
            
            
                    3. РЕЖИМ РЕАЛЬНОЙ АДРЕСАЦИИ
 
      При   включении   питания  и/или  подаче  сигнала  "Сброс"  МП 
 переходит в режим РА, который соответствует архитектуре МП 8086, но 
 работает   с   32-х   разрядными  регистрами.  Механизм  адресации, 
 пространство адресов памяти, управление прерываниями осуществляются 
 аналогично режиму РА МП 80286. 
      В  режиме РА используются все команды 80386. Длина операндов в 
 этом режиме - 16 бит. Для обеспечения  возможности  работы  в  этом 
 режиме  с 32-х разрядными операндами и использования дополнительных 
 режимов  адресации  необходимо  использовать  специальный   префикс 
 переадресации.  Кроме  того, в режиме РА размер сегмента может быть 
 не более 64 К байт, т.е. 32-х разрядный адрес не может быть больше, 
 чем 0000FFFF. 
 
                    Адресация памяти
      В  режиме  РА  максимальное  адресное пространство - 1 М байт,
 т.е. используются линии А2...А19,  BE0...BE3.  При  этом  А20...А31
 установлены в 1 до тех пор, пока не будет выполняться межсегментный
 переход или вызов подпрограммы. Т.к. в режиме  РА  не  используется
 страничная   адресация,   то   исполнительный  адрес  соответствует
 физическому. Схема формирования адреса в  режиме  РА  приведена  на
 рис.3-1.
           15          0
           _____________
           | Смещение  |
           |___________|
                 |
                 |_____________
                               |
      19        4  3   0       |
      _________________        |      _____________  Граница
      |          |     |       |      |            | ______________
      |Сегментный|0000 |       |      |____________|/сегмента
      |cелектор  |     |       |      |            |\
      |__________|_____|       |      |____________| |
          |                   \|/     |            | |
          |                   ___     | Операнд    | |
          |_________________\|   |___\|            | | Выбранный
          |                 /| + |   /|____________| |
          |                  |___|    |            | | сегмент
          |                           |            | >
          |                           |            | | ( 64 К )
          |                           |            | |
          |                           |            | |
          |                           |            | |
          |_ _ _ _ _ _ _ _ _ _ _ _ _ _|____________|/
                                      |            | 
                                      | База       |
                                      | сегмента   |
                                      |____________|
 
            Рис.3-1. Схема формирования адреса в режиме РА
 
      Все  сегменты в режиме РА могут находиться в состоянии записи,
 считывания  или  выполнения. 80386 формирует  прерывание  13,  если
 операнд или команда располагаются за границами сегмента, т. е. если
 операнд имеет смещение больше FFFF, например, при адресации слова с
 младшим байтом по адресу FFFF и старшим по адресу 0000.
                 
 .
                                      - 29 -
            
                 
                 
      Сегменты  могут перекрываться в режиме РА. Если данный сегмент
 не использует все 64  к  байт  адресов,  то  другой  сегмент  может
 начинаться  с адреса 1-й ячейки неиспользуемой зоны адресов данного
 сегмента.  Это   позволяет   программисту   минимизировать   размер
 физической памяти, требуемой для хранения программы.
      
      
                    Зарезервированные зоны адресов
 
      Имеются две зоны адресов,  зарезервированные в режиме РА: зона
 системной инициализации и зона таблицы прерываний.
      Таблица  векторов  прерываний  размещается в адресах 003FF ... 
 00000 (256 4-х байтовых векторов).  Адреса  FFFFFFFF  ...  FFFFFFF0 
 зарезервированы для системной инициализации. 
 
            
                      Прерывания
      Многие   из   особых   ситуаций,   приведенних   в    табл.2-5 
  (обсуждавшиеся в 2.9) не используются в режиме РА. К ним относятся 
  особые ситуации 10, 11, 12, 14. Некоторые  особые  ситуации  имеют
  несколько иной смысл (см. табл.3-1). 
      
                             Таблица 3-1
      ______________________________________________________________
     |                |          |                       |          |
     |Функция         |Номер     | Причина               |Адрес     |
     |                |          |                       |          |
     |                |прерывания|                       | возврата |
     |                |          |                       |          |
     |________________|__________|_______________________|__________|
     |                |          |                       |          |
     |Малы  размеры   |    8     | Вектор INT не  соот-  |Предыдущая| 
     |                |          |                       |          |
     |таблицы прерыва-|          | ветствует размерам    |команда   |
     |                |          |                       |          |
     |ния             |          | таблицы               |          |
     |________________|__________|_______________________|__________|
     |                |          |                       |          |
     |Прерывание при  |    13    | Адресуемое слово      |Предыдущая|
     |                |          |                       |          |
     |превышении      |          | имеет смещение FFFF   |команда   |
     |                |          |                       |          |
     |размера сегмента|          | или выполняемая ко-   |          |
     |                |          |                       |          |
     |                |          | манда находится за    |          |
     |                |          |                       |          |
     |                |          | границей сегмнета     |          |
     |________________|__________|_______________________|__________|
 .
                                      - 30 -
            
            
      
                   Зависания и остановы
      При получении  команды  HLT  процессор  прекращает  выполнение
 программы  и  освобождает  локальную  шину. Сигналы NMI, INTR  (при
 IF=1)  и RESET выводят процессор из состояния  останова.  При  этом
 сигналы  на  входах  прерываний  "толкают"  процессор на выполнение
 следующей команды.
      В режиме РА зависания возникают в двух случаях:
      1) прерывание (особые ситуации 8 и 13) имеет  вектор  больше,
 чем   размеры   таблицы  векторов  прерываний,  т.  е.  отсутствует
 подпрограмма обработки данного прерывания;
      2) команды CALL,  INT  или  PUSH  пытаются  выйти  за  пределы
 стекового  сегмента,  где указатель  стека не определен  (например,
 имеется попытка записать в  стек,  если  SP=0001  и  результирующее
 значение стекового сегмента больше, чем FFFF).
      NMI  вход  позволяет  вывести  процессор  из  зависания,  если
 таблица дескрипторов прерываний достаточно  велика,  чтобы  хранить
 вектор  прерывания  NMI  (не  меньше 000F) и стек имеет достаточные
 размеры для хранения векторов и признаков (т.  е.  SP  больше,  чем
 0005).  В  противном  случае  из  зависания  можно выйти только с
 помощью сигнала RESET.
      
 .
                                      - 31 -
            
            
                                      
            
                  4.РЕЖИМ ВИРТУАЛЬНОЙ АДРЕСАЦИИ (РЕЖИМ РМ)
      
                  4.1.Введение
      
      Возможности 80386 используются полностью, если он  работает  в
 режиме  РМ.  В  этом  режиме  пространство  исполнительных  адресов
                            32
 расширяется до  4  Гбайт (2  байт), а  область виртуальных  адресов
                     46 
 -  до  64  Тбайт  (2  байт), т.е. практически  не ограничена. Кроме
 того,  в  режиме  РМ  имеется  возможность   выполнения   программ,
 разработанных   для  8086  и  80286  с  использованием  специальных
 механизмов управления  памятью  и  аппаратно  поддержанных  средств
 защиты  памяти.  Режим  РМ  позволяет  использовать  дополнительные
 команды, специально  оптимизированные для  поддержки  многозадачных
 операционных систем. Основное  отличие  режима РМ от режима РА (RM)
 cостоит в расширении адресного пространства и использовании  других
 механизмов адресации.
      
                  4.2.Механизм (схема) адресации
      
      Подобно  режиму  RM в режиме РМ в формировании исполнительного
 адреса участвуют два компонента:
      16-ти  битовый  селектор,  используемый для определения адреса 
 базы сегмента и 32-х битовый эффективный адрес. 
      Сформированный   исполнительный   адрес   является  физическим 
 адресом, если не  используется  механизм  страничной  адресации.  В 
 противном  случае,  он  преобразуется  в  физический. Разница между 
 режимами РМ и RM заключается в вычислении  сегмента.  В  режиме  РМ 
 селектор используется, как индекс, указывающий операционной системе 
 на определенный элемент  специальной  таблицы,  в  которую  помещен 
 32-х битовый   адрес   базы   данного  сегмента.  Физический  адрес 
 формируется сложением базового адреса с 32-х битовым смещением. 
                           Рис.4-1.
      Страничная адресация памяти является дополнительным механизмом
 управления  памятью, используемым только в режиме РМ. Этот механизм
 позволяет преобразовывать исполнительные адреса в физические.
                           Рис.4-2.
      
                  4.3.Сегментация
 
                  4.3.1.Введение
 
      Сегментация - это  один  из  методов  управления  памятью.  Он 
 является  основой защиты памяти. Сегменты - самостоятельные области 
 памяти, имеющие собственные атрибуты. Например,  в  сегменте  могут 
 размещаться  коды  программ  или  таблицы операционной системы. Вся 
 информация о  сегменте  запоминается  в  8-ми  байтовой  структуре, 
 называемой  дескриптором.  Все  дескрипторы  храняться  в аппаратно 
 реализуемых таблицах.      ----------------------------------------
 --------------------
 
                  4.3.2.Термины,    используемые     при    описании 
                        дескрипторов, уровней привилегированности  и 
                        защиты. 
      
      PL.  Уровень  привилегированности  -  один  из   4-х   уровней 
 привилегированности. Наиболее привилегированный уровень 0, наименее 
 - 3. 
      
      RPL. Запрашиваемый   уровень   привилегированности  -  уровень
 привилегированности  конкретного   подключаемого   селектора.   RPL
 определяется двумя младшими битами селектора.
 
                                      - 34 -
            
           
                 
      DPL. Уровень  привилегированности дескриптора  -  это  младший
 уровень  привилегированности, который  имеет  задача,  обращающаяся
 к  дескриптору  (и к связанному с ним сегменту).  DPL  определяется
 битами 6 и 5 байта. 
     
      CPL.    Текущий    уровень   привилегированности   -   уровень 
 привилегированности, который имеет текущая выполняемая  задача.  Он 
 равен  уровню  привилегированности  выполняемого кодового сегмента. 
 CPL может быть также определен  проверкой  двух  младших  битов  CS 
 регистра, получаемых для соответствующих кодовых сегментов. 
      
      EPL. Эффективный  привилегированный   уровень   -   наименьший
 уровень из RPL и DPL, т.е. цифровой максимум из RPL и DPL.
      
      Задача (процесс) - совокупность выполняемых программ.
      
      
                  4.3.3.Таблицы дескрипторов
 
      ВВедение.  Таблицы  дескрипторов  определяют   все   сегменты,
 которые используются в системе на базе 80386.
      Имеется три типа таблиц:
      1) таблица глобальных дескрипторов;
      2) таблица локальных дескрипторов;
      3) таблица дескрипторов прерываний.
      Каждая  из  таблиц  храниться  в  своей области памяти и имеет
 размер от 8 байт до 64 кбайт. Каждая таблица может содержать до  8к
 8-ми  байтных дескрипторов. Старшие 13 бит селектора используются в
 качестве индекса дескрипторной таблицы. Для  обращения  к  таблицам
 имеются    специальные    регистры,    хранящие    32-х     битовый
 исполнительный адрес и 16 битовую границу данной таблицы.
                         Рис.4-3.
      
      Эти регистры GDTR, LDTR и  IDTR  загружаются  командами  LGDT,
 LLDT,  LIDT и сохраняются. SGDT, SLDT и SIDT. Манипуляция таблицами
 осуществляется операционной системой при  помощи  привилегированных
 команд.
                  4.3.3.2.Таблица глобальных дескрипторов
      Эта  таблица  (GDT)  содержит  дескрипторы, доступные для всех
 задач системы. GDT может содержать любые дескрипторы  сегментов  за
 исключением дескрипторов, используемых для обслуживания прерываний.
 Обычно GDT содержит сегменты  команд и данных,  используемые  ОС  и
 дескрипторы    таблиц   LDT. Первому  элементу  GDT   соответствует
 несуществующий селектор, который не используется.
      
                  4.3.3.3.Таблица локальных дескрипторов
      Таблица  LDT   содержит  дескрипторы,  используемые  в  данной
 задаче.  Обычно  ОС  разрабатываются  таким  образом,  чтобы каждая
 задача имела отдельную LDT. LDT может содержать только  дескрипторы
 команд,  данных,  стека, номера задачи и вызова номера. Таблицы LDT
 служат механизмом для изоляции сегментов команд и данных  отдельных
 задач  от  ОС,  в  то время, как  GDT хранит дескрипторы сегментов,
 являющихся общими для всех задач. Сегмент не  может  быть  доступен
 задаче,  если  его  дескриптор отсутствует внутри текущей  LDT  или
 GTR. Это обеспечивает защиту сегментов  задач  и  в  то  же  время,
 
                                      - 36 -
            
            
 совместное  использование  глобальных данных различными задачами. В
 отличие от 6-ти  байтовых  GDT  и  IDT  регистров,  которые  хранят
 базовый  адрес  и  ограничитель,  видимая часть регистра LDT хранит
 только 16 битовый селектор. Этот селектор определяет дескриптор LDT
 в GDT.
      
                  4.3.3.4.Таблица дескрипторов прерываний
      
      IDT    содержит   дескрипторы   указывают   расположение   256
 подпрограмм  обслуживания  прерываний.  IDT  может  хранить  только
 вектора задач, вектора прерываний и вектора трассировок. IDT должна
 быть не менее, чем  256  байтовой,  чтобы  хранить  дескрипторы  32
 прерываний,   зарезервированных   ф.   Intel.   Каждое  прерывание,
 используемое в системе, должно быть описано в IDT. IDT используется
 при  выполнении  команд  INT,  внешних запросов прерываний в особых
 ситуациях.
      
                      
      
                  4.3.4.Дескрипторы
                  
                  4.3.4.1. Биты атрибутов дескриптора
 
      Объект, на  который указывает  селектор  сегмента,  называется
 дескриптором. Дескриптором   называется  8-ми   байтная   величина,
 определяющая атрибуты данной области исполнительных  адресов,  т.е.
 сегмента.  Эти  атрибуты включают 32-х битовую базу исполнительного
 адреса сегмента, 20-ти  битовую длину, а также единицу,  в  которых
 задается  длина  сегмента  (страница  или  байт),  уровень  защиты,
 уровни чтения, записи и выполнения, тип сегмента и длина  операндов
 (16  или  32). Вся  информация об атрибутах сегмента заключена в 12
 битах дескриптора сегмента.
                   
      
      Все сегменты 80386 имеют 3 единых поля:
      P, DPL, S (см. надписи под рис.4-5).
      
                  4.3.4.2.Дескрипторы команд и данных (S=1)
                 ___________________________________________
 
      Формат  такого  дескриптора  и  байт прав доступа приведены на
 рис.4-6 и табл.4-1 соответственно.
      
                      
      Дескрипторы сегментов команд и данных  имеют  несколько  общих
 полей: A, G.
      А  - бит используется ОС для получения статистики по обращению
 к данному сегменту. 
      G - бит  указывает  величину,  в  которых  указывается  размер
 сегмента.  Длина  сегмента может  быть 1 Мбайт (G=0, т. е. задан  в
                                                       20
 байтах) или 4 Гбайт (G=1, т.е. задан  в  страницах - 2  страниц  по
 4 Кбайт каждая).
      Система  на  базе  80386  может включать сегменты как байтовой
 размерностью, так и со страничной размерностью, если  включен  блок
 страничной адресации. 
      Бит  Е  указывает, какой из сегментов  выполняется:  командный 
 (E=1, S=1) или данных (E=0, S=1).
      Кодовый  сегмент  может  находится в стадии только  выполнения  
 (бит  R=0) или  выполнения/чтения (R=1). Запись  в кодовый  сегмент
 не возможна.
 
                                      - 40 -
            
            
      Замечания.
      Кодовые  сегменты  могут  изменяться,через  вымышленные  имена 
 (метки).   Метки   приписываются    сегментам    данных,    которые 
 располагаются  в некотором пространстве исполнительных адресов, как 
 сегменты команд. 
      Бит D указывает размерность операндов  и  эффективных  адресов  
 (32  бита  при  D=1,  16  бит  при D=0).  Это  позволяет   выполнять
 команды для 80286.
      Другим атрибутом сегментов команд является бит согласования С.
 При   С=1   согласованные   сегменты  могут  выполняться  в  режиме
 разделения     программами,     имеющими      различные      уровни
 привилегированности.
      Сегменты,   определяемые   как   сегменты   данных (E=0, S=1),
 могут быть двух  типов:  сегменты  стека  и  сегменты  данных.  Бит
 направления расширения  (ED)  определяет тип сегмента. Если сегмент
 стековый, то смещение должно быть больше, чем граница сегмента. Для
 сегмента  данных  смещение  должно  быть  меньше  или равно границе
 сегмента.  Другими словами,  сегменты   стека  начинаются  от  базы
 исполнительного   адреса   +   максимального   размера  сегмента  и
 размещаются в сторону уменьшения до базы исполнительного  адреса  +
 граница.  Сегмент данных начинается с базы исполнительного адреса и
 кончается границей сегмента. 
      Бит записи W управляет записью в сегменте.  При  W=0  сегменты
 данных  работают  только  на чтение. Стековые сегменты должны иметь
 W=1.
      Бит B указывает размерность регистра - указателя  стека.  Если
 В=1,  то  ESP работает  как  32-х битовый регистр и верхняя граница
 стека FFFFFFFF. Если В=0 - все команды работы со стеком  используют
 SP (16 битовый) и верхняя граница стека FFFF.
      
                  
                  4.3.4.3.Форматы системных дескрипторов
      
      Эти  дескрипторы  содержат  информацию  о  системных таблицах,
 задачах и паролях. Системный дескриптор 80386  имеет  32  разрядную
 базу и 20 битовую границу, системный дескриптор 80286 соответствует
 24 и 16 бит (старшие 16 бит равны 0).
                          Рис.4-7.
      
                  4.3.4.4.Дескрипторы LDT (S=0, TYPE=2) 
                _______________________________________
      
      Дескрипторы  LDT  содержат  информацию  о  таблицах  локальных
 дескрипторов.  Таблица  локальных дескрипторов содержит дескрипторы
 сегментов,  используемых  конкретной  задачей.   Команда   загрузки
 регистра  LDT  должна  иметь  нулевой  уровень  привилегированности 
 (поле DPL игнорируется).
      
                  4.3.4.5.Дескрипторы TSS (S=0, TYPE = 1, 3, 9, B)
                 __________________________________________________
 
      Дескриптор сегмента состояния  задачи  содержит  информацию  о
 местонахождении,  размере  и  уровне  привилегированности  сегмента
 состояния   задачи (TSS).  TSS  -  сегмент   специального  формата,
 который  содержит  всю  необходимую  информацию  о  задаче и  поле,
 обеспечивающее связь задач между  собой.  Поле  TYPE  указывает  на
 текущую   исполняемую   задачу  (из  цепочки  активных  задач)  или
 доступный TSS. Поле TYPE также указывает, используется ли  TSS  для
 МП  286  или  386.  Регистр  задач  (TR) хранит  селектор,  который
 указывает текущий TSS.
                 
 
                                      - 42 -
            
            
                  4.3.4.6.Дескрипторы шлюзов (S=0, TYPE=4-7, C, F)
                 __________________________________________________
      
      Шлюзы используются  для  управления  доступом  к  определенным
 точкам внутри управляющего кодового сегмента.
      Различают:
      1) шлюзы вызовов;
      2) шлюзы задач;
      3) шлюзы прерываний;
      4) шлюзы трассировок.
      Шлюзы  реализуют дисциплину   взаимодействия  при   управлении 
 передачей   между   источником  и  приемником.  При  взаимодействии 
 процессор  автоматически  проверяет  защиту.  Это  также  позволяет 
 проектировщикам  системы  управлять точками внутри ОС. Шлюзы вызова 
 используются для изменения уровней привилегированности. Шлюзы задач 
 используются   для   переключения   задач,  а  шлюзы  прерываний  и 
 трассировок  используются  для  определения  специальных   программ 
 обслуживания   прерываний.  Рис.4-8  показывает  формат  4-х  типов 
 дескрипторов шлюзов. 
                      Рис.4-8.
 
 Шлюз вызова, главным  образом, используются для передачи управления
 программам с более высоким уровнем привилегированности.  Дескриптор
 шлюза вызова содержит 3 поля:
      1) байт доступа;
      2) указатель  длины (селектор  и  смещение), который указывает
 начало программы;
      3) счетчик   слов,   определяющий    количество    параметров,
 передаваемых  из  стека  вызывающей  программы  в  стек  вызываемой
 программы.
      Поле  счетчика  слов  используется  только  в  шлюзах  вызыва,
 которые  изменяют  уровень  привилегированности, в остальных  типах
 это поле игнорируется.
      Шлюзы  прерываний  и  трассировок  используют  поля  селектора
 назначения  и  смещения  назначения дескриптора для указания начала
 программ управления прерыванием или  трассировкой.  Различия  между
 шлюзами  прерываний  и  шлюзами трассировок  заключается в том, что
 шлюз прерывание выключает  прерывания  (сбрасывает  бит  IF)  в  то
 время, как шлюз трассировки нет.
      Шлюзы задач используются при переключении задач.  Шлюзы  задач 
 могут  обращаться  только к сегменту состояния задач (TSS), поэтому 
 используется только селекторная часть а смещение игнорируется. 
      Прерывание 13 формируется, когда селектор назначения указывает
 на некорректный тип дескриптора.
      Формат байта  прав  доступа  одинаков  для  дескрипторов  всех 
 шлюзов.  Р=1 - указывает на то, что шлюз открыт. Р=0 - шлюз закрыт, 
 при этом, если необходимо, формируется прерывание 11. DPL указывает 
 уровень  привилегированности  и  указывает,  в каких случаях данный 
 дескриптор может использоваться задачей (см. 4.4).  Бит  4  поля  S 
 должен  быть  равен  0  и  тем  самым указывать, что это дескриптор 
 управления системой. 
      
                  4.3.4.7.Р азличия между дескрипторами 386 и 286
      
      Для   обеспечения   совместимости   ОС  386  поддерживает  все
 дескрипторы сегментов 286. Рис.4-9  показывает  формат  дескриптора
 системного сегмента 80286.
 
                                      - 44 -
            
            
 
      Различия заключаются только:
      1)в размерности поля TYPE,
      2)в  размерности базы и границы (80286 - 24 и 16; 80386 - 32 и
 20).
                          
      
      Благодаря установке в 0 разрядов  старшего  слова  дескриптора
 ОС  автоматически  определяет, что делать  с программами (различает
 тип процессора).
      Другое различие  между  286  и  386  заключается  в  различной 
 интерпретации  поля  счетчика слов в шлюзах вызова и бита B. В поле 
 счетчика слов указывается количество 16-ти битовых слов для  286  и 
 32-х  битовых  для  386.  Бит  B  указывает  аналогичным образом на 
 размерность информации при выполнении команды PUSH. 
      
                  4.3.4.8.Поле селектора
      Селектор в режиме РМ имеет 3 поля:
      1)индикатор LDT или GDT (TI);
      2)смещение (индекс) внутри таблицы дескрипторов;
      3)уровень привилегированности (RPL).
                      Рис.4-10.
      
      Бит TI указывает на одну из двух таблиц. Поле индекса выбирает
 один из 8к дескрипторов из таблицы дескрипторов.
      Биты  RPL  обеспечивают  высокоскоростную  проверку  атрибутов
 привилегированности селектора.
      
      
                  4.3.4.9.КЭШ -  ЗУ дескрипторов сегментов
      В дополнение к величине селектора  каждый  сегментный  регистр 
 имеет  связанный с ним регистр (КЭШ ЗУ) дескриптора сегмента. Когда 
 происходит изменение содержимого сегментного регистра, 8-ми байтный 
 дескриптор,    связанный    с    этим   селектором,   автоматически 
 переписывается в процессор. Эта информация используется до тех пор, 
 пока   не   потребуется   доступ  к  другому  сегменту.  Содержимое 
 дескрипторных  регистров  программно   недоступно   (невидимо   для 
 программистов).  При  программном  изменении  дескрипторных таблиц, 
 хранящихся в ЗУ, необходимо осуществлять перезагрузку дескрипторных 
 регистров. 
      
                  4.3.4.10.Форматы регистров дескрипторов
      
      Содержимое  этих регистров зависит от режима работы МП. Формат
 регистров  для  режима  RM  приведен  на  рис.4-11.
      Для  обеспечения  совместимости  с  архитектурой   8086   база 
 устанавливается  в течение 16-ти тактов в соответствии со значением 
 селектора,  граница  фиксирована  и  равна  0000FFFF,  а   атрибуты 
 соответствуют   наличию   и   полной  доступности  сегмента.  В  РМ 
 внутренний уровень привилегированности  всегда  максимальный  (=0), 
 поэтому  команды  ввода - вывода и другие привилегированные команды 
 могут выполняться. 
      Формат регистров в режиме РМ представлен на рис.4-12.
      В РМ значения   полей  определяется   содержимым   дескриптора
 сегмента индексированного селектором.
      Формат  регистра для режима    виртуального  8086 приведен  на 
 рис.4-13.
      В  отличие  от   режима   RM   виртуальная   программа   имеет
 минимальный    уровень    привилегированности   (=3),   обеспечивая
 трассировку  всех  команд  IOPL  и   команд   с   нулевым   уровнем
 привилегированности.
 
                                      - 49 -
            
            
                           4.4. ЗАЩИТА
      
                          Принципы защиты
      
      80386 имеет 4  уровня защиты, обеспечивая тем самым требования
 многозадачной ОС,  изолируя и  защищая  пользовательские  программы
 друг  от  друга  и  от  ОС. Управление уровнями привилегированности
 осуществляется  привилегированными  командами,  командами  ввода  -
 вывода и доступом к сегментам и сегментным дескрипторам. 
      В   отличие   от   традиционных   МП    систем,   где   защита
 обеспечивается с помощью внешних аппаратных и программных  средств,
 80386  обеспечивает  защиту  с помощью [внутреннего]  общего  блока
 управления памятью. 80386 обеспечивает дополнительный  тип  защиты,
 если включен режим страничной адресации.       
 
                    4.4.3.Уровни привилегированности
      
                    4.4.3.1.Привилегированность задач
      
      В любой момент времени задача в 80386 выполняется на одном  из 
 4-х      уровней      привилегированности.      Текущий     уровень 
 привилегированности (CPL) задачи  может  быть  изменен  только  при 
 управлении   передачей  кодовых  сегментов  с  различными  уровнями 
 привилегированности  через   дескрипторы шлюзов.
      Таким образом, прикладная программа, выполняемая на уровне  3,
 может вызываться программой ОС с  уровнем  1 (через шлюз),  которая
 присвоит  задаче  уровень  CPL = 1 до тех пор, пока программа ОС не
 кончит свою работу.
      
      
                  4.4.3.2.Привилегированность селектора (RPL)
      
       Уровень привилегированности селектора определяется полем RPL. 
 RPL - два младших значащих бита селектора. RPL используется  только 
 для  задания  менее  доверительного уровня привилегированности, чем 
 CPL используемого сегмента.  Этот  уровень  называется  эффективным 
 (действующим)   уровнем   привилегированности   задачи  (EPL).  EPL 
 определяет,  каково  будет  наименьшее   значение   (арифметическое 
 увеличенное)  уровня  привилегированности  из  уровня  задачи и RPL 
 селектора. Таким образом, если RPL селектора =  0,  то  CPL  всегда 
 определяет  уровень  привилегированности для предоставления доступа 
 используемому селектору.  С  другой  стороны,  если  RPL  =  3,  то 
 селектор   может  получать  доступ  только  к  сегментам  уровня  3 
 независимо от CPL задачи. 
      В  общем  случае  RPL  используется  в качестве указателей для
 процедур  ОС  о  недоступности  данных  с  более  высоким   уровнем
 привилегированности, чем уровень процедуры.
      Таким образом, при формировании селектора можно задавать любые
 значения RPL с помощью команды Adjust RPL (ARPL).
      
                 4.4.3.3.Привилегированность ввода - вывода
      
      Уровню привилегированности ввода - вывода (IOPL) соответствует 
 CPL=0, задаваемый ОС. Прерывание 13 возникает в тех случаях,  когда 
 CPL задачи менее привилегирован, чем IOPL. 
      IOPL  запоминается   (хранится)  в  битах  13  и  14  регистра
 признаков.
      Команды, вызывающие прерывание 13 (если CPL больше, чем IOPL): 
      IN, INS, OUT, OUTS, STI, CLI, префикс LOCK.
 .
                                      - 50 -
            
      
                 4.4.3.4.Достоверность привилегированности
      
      80386 имеет несколько команд для быстрого контроля  указателей
 и  помощи  системным  средствам  в  определении значения селектора,
 соответствующего требуемому сегменту.
      В табл.4-2 приведены процедуры, удостоверяющие селекторы.
 
      Команды проверки указателей                       Табл.4-2
      
 __________________________________________________________________
          |         |                                              |
  Команда |Операнды |Выполняемое действие                          |
 _________|_________|______________________________________________|     
          |         |                                              |
  ARPL    |Селектор,|Установка требуемого уровня привилегирован-   |     
          |регистр  |ности: устанавливает RPL селектора в макси-   |
          |         |мальное значение из RPL текущего селектора и  |
          |         |RPL регистра. Устанавливает флаг нуля, если   |
          |         |RPL изменяется.                               |
 _________|_________|______________________________________________|
          |         |                                              |
  VERR    |Селектор |Проверка на чтение: устанавливает флаг нуля,  |
          |         |если сегмент, на который указывает селектор,  |
          |         |может быть прочитан.                          |
 _________|_________|______________________________________________|
          |         |                                              |
  VERW    |Селектор |То же самое по записи                         |
 _________|_________|______________________________________________|
          |         |                                              |
  LSL     |Регистр, |Загрузка границы сегмента: читает границу сег-|
          |селектор |мента в регистр, если правила привилегирован- |
          |         |ности и типа дескриптора соблюдены. В этом    |
          |         |случае, устанавливает флаг нуля.              |
 _________|_________|______________________________________________|
          |         |                                              |
  LAR     |Регистр, |Загрузка прав доступа:читает байт прав доступа|
          |селектор |дескриптора в регистр, если правила привилеги-|
          |         |рованности соблюдены. В этом случае устанавли-|
          |         |вает флаг нуля.                               |
 _________|_________|______________________________________________|
 
      
      Такая  проверка  указателя  решает  общую   проблему   -   как 
 пользователю с PL = 3 вызвать программу операционной системы с PL=0 
 и  не  позволит  плохому  указателю  исказить   структуру   данных, 
 принадлежащих  операционной  системе.  Если программа ОС использует 
 ARPL команду, то гарантируется, что RPL селектора имеет не  больший 
 уровень  привилегированности,  чем  то,  что  вызывается и проблема 
 преодолевается. 
      
                 4.4.3.5.Доступ с помощью дескрипторов
      
      Существуют два основных вида доступа к  сегментам:  к  кодовым 
 сегментам   (при   передаче   управления)  и  к  сегментам  данных. 
 Доступность сегмента определяется его типом используемой  командой, 
 типом дескриптора и CPL, RPL и DPL (см. выше). 
 
 
                                      - 52 -
            
      При  выполнении  команд  загрузки  регистров  сегментов данных 
 (DS,ES, FS, GS) 80386 проверяет достоверность  защиты  в  следующей 
 последовательности:  
      1)является ли вызываемый сегмент отсутствующим (в этом случае- 
 прерывание 11); 
      2)правильно ли селектор указывает тип сегмента.
      
      Селекторы, загружаемые в DS,  ES,  FS  и  GS  регистры  должны
 ссылаться  только  на  сегменты  данных  или разрешенные для чтения
 сегменты кодов (команд). Правила доступа к данным приведены в 4.3.2.
      Единственное  исключение  из  этих   правил   -   согласование
 разрешенные  для  чтения  кодовые  сегменты,  доступные  для любого
 уровня привилегированности. 
      В    заключение   проводится      проверка       достоверности
 привилегированности. CPL сравнивается  с  EPL  и,  если  EPL  более
 привилегирован, чем CPL, генерируется прерывание 13  (ошибка  общей
 зашиты).
      Правила,    касающиеся   стекового   сегмента,   незначительно 
 отличаются  от  правил,  касающихся  сегментов   данных.   Команды, 
 загружающие  селекторы  в  SS,  должны соответствовать дескрипторам 
 сегментов  данных,  разрешенных  для  записи.  DPL  и  RPL   должны 
 равняться  CPL.  Все  другие типы дескрипторов или нарушение уровня 
 привилегированности вызывают прерывание 13. 
      Отсутствие стека (стекового сегмента) вызывает прерывание  12. 
 Заметим,  что  прерывание  11  используется  при отсутствии кодовых 
 сегментов и сегментов данных. 
      
                  4.4.4.Обмены с учетом уровня привилегированности
      
      Межсегментные  передачи  управления  происходят  тогда,  когда
 селектор   загружается  в  CS  регистр.  В  обычной  системе  такие
 переключения являются простым результатом  вызова  или  перехода  к
 другой  программе.  Имеется  5  типов  передачи управления, которые
 приведены в табл.4-3.
      Многие из этих передач  осуществляются  внутри  одного  уровня 
 привилегированности.  Изменение уровня привилегированности возможно 
 только для  передач  управления,  использующих  шлюзы  переключения 
 задач,    прерываний    или    трассировки.   Передачи   управления 
 осуществляются только  в  том  случае,  если  загружаемый  селектор 
 ссылается (указывает) на правильный тип дескриптора. Любая ошибка в 
 правилах использования дескриптора  будет  вызывать  прерывание  13 
 (например,  JMP  из  шлюза  вызова или IRET из обычной подпрограммы 
 вызова). 
                                                       
 
      Для обеспечения полной  секретности  в  системе  все  передачи
 управления должны выполняться по следующим правилам:
      передачи  (переходы)   между  уровнями   могут  осуществляться
 только через шлюзы;
      команды JMP должны выполняться в кодовом сегменте с  таким  же
 уровнем привилегированности;
      команды  CALL  должны выполняться в кодовый сегмент с таким же
 уровнем   привилегированности    или    через    шлюз    к    более
 привилегированному уровню;
      прерывания,     обрабатываемые     внутри    задачи,    должны
 соответствовать правилам привилегированности, аналагичным  командам
 CALL;
      вызываемые кодовые сегменты доступны привилегированным уровням
 с таким же или ниже уровнем, чем DPL вызываемого сегмента;
      RPL селектора входа в указывающего на шлюз и CPL задачи должны
 быть равны или более привилегированны, чем DPL шлюза;
 
                                      - 54 -
            
            
      кодовый  сегмент,  выбираемый  в шлюзе, должен быть с таким же
 или более привилегированным, чем CPL задачи;
      команды возврата, не связанные с  переключением  задач,  могут
 только  управлять  возвратом  к  кодовому   сегменту с таким же или
 менее приоритетным  уровнем;
      переключение задач может реализоваться при помощи команд CALL,
 JMP  или INT, которые указывают либо на шлюз задач, либо на сегмент
 состояния задачи, DPL которых менее привилегирован или имеет тот же
 уровень привилегированности, что и CPL старой задачи.
      Любая  передача  управления,  изменяющая  CPL  внутри  задачи, 
 вызывает    изменение   стеков   -   следствие   изменения   уровня 
 привилегированности. Первоначальные значения SS:  ESP  для  уровней 
 привилегированности  0, 1 и 2 храняться в сегменте состояния задачи 
 (см. 4.4.6). При передачах управления JMP или CALL новый  указатель 
 стека загружается в SS и ESP регистры, а предыдущий указатель стека 
 убирается в новый стек. 
      При   возврате   к    первоначальному    (исходному)    уровню 
 привилегированности   происходит  перезапоминание  стека  на  менее 
 привилегированном уровне, как часть выполнения команд RET или IRET. 
      При  вызовах  подпрограмм  между  предыдущим  и  новым  стеком
 происходит  передача  параметров  фиксированным  количеством   слов
 (указываемых в поле счетчика слов шлюза). 
      Команды   межсегментного   возврата   (RET)   с  установленной
 (фиксированной)  величиной  стека  будут  правильно  перезапоминать 
 предыдущий указатель стека до полного возврата.
      
                   4.4.5. Шлюзы вызовов
      
      Шлюзы  обеспечивают  защиту  при  помощи  косвенных   вызовов. 
 Основное   назначение   шлюзов  -  обеспечить  безопасный  механизм 
 изменения  уровней  привилегированности  внутри  задачи.  Т.к.   ОС 
 определяет  все  шлюзы в системе, то это гарантирует, что все шлюзы 
 обеспечат вход только в количество определенных (заданных) процедур 
 (таких как управление памятью или вводом/выводом). 
      Дескрипторы  следят  за  соблюдением правил привилегированного
 доступа к данным; шлюзы могут быть доступны задаче, если EPL  равен
 или  более  привилегирован,  чем DPL дескриптора шлюза. Шлюзы также
 следят   за   соблюдением   правил   привилегированности   передачи
 управления  и  позволяют  передавать  управление  только  на  более
 привилегированный уровень. 
      Шлюзы  вызова  вызываются  командами  CALL   и   синтаксически
 аналогичны вызову обычной подпрограммы. 
      Когда активизируется  шлюз  вызова  для  межуровнего  перехода
 в МП, выполняются следующие действия:
      1)загружаемые из шлюза CS: ESP проверяются на правильность;
      2)SS дополняется нулями до 32-х бит и убирается в стек;
      3)ESP убирается в стек;
      4)32-х битовые параметры ( WORD COUNT -  штук)  копируются  из 
 старого стека в новый; 
      5)убирается в стек адреса возврата.
      Процедура идентификации  (реализации)  шлюзов  вызова  для  МП 
 80286  отличается от описанной выше тем, что работа происходит с 16 
 битовыми параметрами. 
      Шлюзы прерываний и трассировки работают примерно также, но при
 этом  не  копируются  параметры. Разница между шлюзами прерываний и
 трассировок заключается в том, что при  передаче  управления  через
 шлюз  прерываний  происходит  сброс  в  0  триггера  IF  в регистре
 признаков, а для шлюза трассировки - нет.
      
 
                                      - 55 -
            
                 
                     4.4.6. Переключение задач
            
      Очень            важным            атрибутом             любых 
 многозадачных/многопользовательских    ОС    является   возможность 
 быстрого  переключения  между  задачами   или   процессами.   80386 
 непосредственно  поддерживает  такую работу, обеспечивая аппаратную 
 реализацию  команд   переключения   задач.   Переключение   задачи, 
 включающее  запоминание  текущего  состояния  машины (все регистры, 
 адресное пространство  и  связи  с  предыдущей  задачей),  загрузку 
 нового  состояния, проверку защиты и начало выполнения новой задачи 
 осуществляется за 17 мкс. Подобно передаче управления через  шлюзы, 
 операция   переключения   задач   вызывается   выполнением   команд 
 межсегментных переходов JMP и CALL, которые  указывают  на  сегмент 
 состояния  задачи  (TSS) или дескриптор шлюза задачи в GDT или LDT. 
 Команды INT n, особые ситуации, трассировка или запросы  прерывания 
 могут  также  вызывать  переключение  задач,  если дескриптор шлюза 
 задачи соответствует IDT дескриптору. 
      
                                                       Рис.4-15
                                                       Рис.4-16
 
      TSS дескриптор указывает на сегмент (см. рис.4-15), содержащий 
 текущее состояние 80386, тогда как дескриптор шлюза задачи содержит 
 селектор TSS. 
      80386 поддерживает TSS как для 80386 так и 80286 (на  рис.4-16 
 приведен  TSS  286).  Граница TSS 386 должна быть больше, чем 0064H 
 (002BH для 286 TSS), но  в  пределах  4  Гбайт.  В  дополнении  TSS 
 пространству  ОС  освобождает  место  для  хранения  дополнительной 
 информации, такой как причина выключения задачи, время,  выделенное 
 задаче, и открытия файлов требуемых задаче. 
      Каждая  задача  должна  иметь  TSS.  Текущее  TSS   определяет 
 специальный регистр, называемый "Регистр сегмента состояния задачи" 
 (TR).  Этот  регистр  хранит  селектор,   указывающий   дескриптор, 
 соответствующий текущему TSS. 
      Скрытые база и граница, связанные с  TR,  перезагружаются  при
 перезагрузке TR.
      Возврат  из  задачи  осуществляется  командой  IRET,  при этом 
 передается управление ранее прерванной  задаче.  Состояние  текущей 
 выполняемой  задачи  заносится в TSS, а состояние предыдущей задачи 
 восстанавливается из TSS. 
      Несколько бит регистра  признаков  и  слова  состояния  машины 
 (CRO)  используются  ОС  в  качестве  дополнительной  информации  о 
 состоянии  задачи.  "Гнездование  задачи"  (бит   14   в   регистре 
 признаков)  управляет  выполнением  команды IRET. Если NT = 0, IRET 
 обеспечивает нормальный возврат к предыдущей задаче (переключение с 
 задачи на задачу). 
      Бит NT устанавливается и сбрасывается следующим образом:
      Когда команда CALL или INT инициализирует переключение задачи,
 новый TSS будет заполняться и в поле возврата нового TSS  заносится
 селектор  старого  TSS.  NT  бит  новой  задачи устанавливается в 1
 командами CALL и INT, переключающими задачи.
      Прерывание,   не   осуществляющее  переключение  задач,  будет 
 сбрасывать NT в 0 (NT бит будет восстанавливаться после  выполнения 
 подпрограммы  обработки прерывания). NT может также быть установлен 
 или сброшен командами POPF или IRET. 
      TSS в 386 запоминается при изменении поля типа дескриптора  от 
 9H  до  BH  (для  286  -  от  1  до  3).  Использование  селектора, 
 ссылающегося на занятый TSS, вызывает прерывание 13. 
      Бит 17 (VM)  используется  для  указания  о  том,  что  задача 
 выполняется  в  режиме  виртуального  8086.  Если VM = 1, то задачи 
 используют механизм адресации RM. Среда виртуального 8086 создается 
      
  
                                      - 58 -
            
            
 или  разрушается  только  при переключении задачи (см. раздел 4.6). 
 Состояние   сопроцессоров   автоматически   не   сохраняется    при 
 переключении задач, так как вызываемая задача может не использовать 
 сопроцессор. 
      Бит переключения задачи TS (бит 3  в  регистре  CRO)  помогает 
 решать  вопрос  с  состоянием  сопроцессора  в многозадачной среде. 
 Переключая  задачу  386  устанавливает  TS  бит.  386   определяет 
 вначале, используются ли во включенной задаче команды сопроцессоров 
 и укажет на их недопустимость прерыванием 7. Подпрограмма обработки 
 прерывания  7  затем  решает,  каким  образом  сохранить  состояние 
 сопроцессора. 
      Прерывание 7 не  будет  формироваться  при  выполнении  команд 
 ESCAPE   или  WAIT,  если  биты  TS  и  MP  (наличия  сопроцессора) 
 установлены в 1. 
      T  бит  в  TSS  указывает  на  то,  что 386 должен формировать
 прерывание в режиме отладки при переключении задач.
      При T = 1 при входе в новую задачу формируется прерывание 1.
      
      
                4.4.7.Инициализация и переход к режиму РМ
  
      Поскольку   386   начинает   функционировать   в   режиме   RM 
 непосредственно   после   сброса,  то  необходимо  инициализировать 
 (заполнить)   системные   таблицы   и   регистры   соответствующими
 величинами. 
      GDT и IDT регистры должны указывать правильные GDT и IDT.  IDT 
 должна  быть  длиной  не  менее  256 байтов, а GDT должна содержать 
 дескрипторы  для  начальных  сегментов  кодов  и  данных.  Рис.4-17 
 показывает  таблицы,  а  рис.4-18  -  дескрипторы,  необходимые для 
 типовой системы на 386 в режиме РМ. На рисунках показаны по  одному 
 сегменту  кодов  и данных/стека с размером 4 Гбайт каждый и уровнем 
 привилегированности PL = 0. 
      Основной метод включения РМ режима - загрузка CRO с установкой
 бита PE при помощи команд MOV CRO, R/M.
      После   включения   режима   РМ   должна   следовать   команда 
 межсегментного  перехода JMP, загружающая CS регистр и запоминающая 
 очередь дешифрируемых команд  (завершающий).  Окончательный  шаг  - 
 загрузка  всех  сегментов  регистров  данных  величинами  начальных 
 селекторов. 
      Другой  подход включения режима РМ, специально предназначенный 
 для многозадачных ОС, заключается во введении в переключатель задач 
 загрузку всех регистров. 
      В этом случае  GDT  будет  содержать  два  TSS  дескриптора  в
 дополнение  к  дескрипторам  кода  и  данных,  требуемых для первой
 задачи.
      Первая команда JMP в режиме РМ будет переходить к TSS, вызывая 
 переключение задачи и загружая все регистры величинами, хранимыми в 
 TSS.  Регистр  TSS  должен  быть  установлен   в   соответствии   с 
 дескриптором  действующего TSS, т.к. переключатель задачи сохраняет 
 состояние текущей задачи в TSS. 
      
 
                                      - 60 -
            
            
               4.4.8.Средства  для  построения   защищенных  систем 
      
      Для    того,   чтобы   упростить   проектирование   защищенных 
 многозадачных систем, фирма Intel предоставляет  средство,  которое 
 обеспечивает  разработчику  системы простой метод создания структур 
 данных, необходимых для систем на основе 80386, работающих в режиме 
 РМ.  Этот  -  BLD-386. BLD-386 позволяет разработчику ОС определить 
 все дескрипторы сегментов, обсуждавшиеся в  предыдущих  разделах  с 
 помощью языков высокого уровня. 
      
      
                     4.5.СТРАНИЧНАЯ АДРЕСАЦИЯ
  
           4.5.1. Принципы страничной адресации
      
      Страничная адресация - альтернативный тип управления  памятью,
 полезный для виртуальной памяти многозадачных ОС.
      В отличие от сегментации, которая разделяет программы и данные 
 на  сегменты  произвольной  длины,   страничная   адресация   делит 
 программы на множество страниц одинакового размера. 
      Страницы   не  имеют  прямой  связи  с  логической  структурой 
 программ.   В   то   время,   как   сегментные   селекторы    могут 
 рассматриваться   как   логические  "имена" программных  модулей  и 
 стркутур  данных,  страница  указывает  только  часть  модуля   или 
 структуры  данных.  Преимуществом  страничной  организации является 
 возможность хранения в основной памяти только небольшого количества 
 страниц, требуемых для каждой активизируемой задачи. 
      
           4.5.2.Страничная организация
      
           4.5.2.1.Страничный механизм
      
      80386    использует    два    уровня   таблиц,   преобразующих 
 исполнительный адрес (с  выхода  блока  сегментации)  в  физический 
 адрес. В 80386 используются три компонента страничного механизма: 
      страничная директория;
      таблицы страниц;
      собственно страница (страничный кадр).
      
      Страницы  имеют  единый  размер  -  4  Кбайта.  Единый  размер 
 страницы  упрощает   управление   памятью   и   устраняет   явление 
 фрагментации.
      На   рис.4-19   показано,  как  работает  механизм  страничной
      адресации. 
      
                  4.5.2.2.Регистр базы дескриптора страниц
      
      CR2 -  регистр  ошибки  исполнительного  адреса  страницы.   
      CR3  -  регистр базы физического адреса директории страниц. Он 
 хранит начальный физический адрес директории  страниц.  Младшие  12 
 бит  CR3  всегда  в 0, что для директории страниц всегда определяет 
 размер страниц. 
      При помощи команды MOV CR3, reg можно заполнять КЭШ  входов  в 
 таблицу  страниц при переключении задач через TSS, которая изменяет 
 величину CRO (см. 4.5.4). 
      
 
                                      - 62 -
                 
            
                  4.5.2.3.Страничная директория
 
      Страничная директория размером 4 Кбайта позволяет  иметь  1024 
 входа  в  директорию  страниц.  Каждый  вход  страничной директории 
 содержит  адрес  таблиц  следующего  уровня,  таблицы   страниц   и 
 информацию   о   таблице   страниц.   Содержимое  входа  (элемента) 
 директории показано на рис.4-20. 
      
      Старшие   10   бит   исполнительного   адреса   (А   22...А31) 
 используются   как   индекс  для  определения  требуемого  элемента 
 директории страниц. 
      
                     4.5.2.4.Таблицы страниц
      
      Каждая  таблица  страниц  объемом 4 Кбайт хранит 1024 элемента
 таблицы.  Элементы  таблицы  страниц   содержат   начальный   адрес
 страничного кадра  и  статистическую  информацию  о  странице  (см.
 рис.4-21).
      
      Адресные биты А 12...А21 являются индексом,  указывающим  один 
 из  1024  элементов  таблицы  страниц.  Старшие  20 разрядов адреса 
 страничного   кадра   объединяются   с   младшими   12    разрядами 
 исполнительного адреса и образуют физический адрес. Таблицы страниц 
 могут быть  использованы  несколькими  задачами  и  обмениваться  с 
 дисками. 
      
                4.5.2.5.Элементы страничных директорий/таблиц
      
      Младшие   12  бит  элементов  страничных  таблиц  и  элементов
 директорий  содержат  статистическую  информацию  о   страницах   и
 страничных таблицах соответственно.
      Если бит представлен P=0, то элемент таблицы или директории не 
 может быть  использован  для  преобразования  адреса  (если  P=1  - 
 наоборот).  "Р"  и  все  другие  биты  доступны  для  использования 
 программным  обеспечением.  Например,  оставшиеся  31   бит   могут 
 использоваться для указания, где на диске храниться страница. 
      Бит доступа  (А)  устанавливается  80386  для  всех  типов
 элементов  перед  доступом  по  записи  или  считыванию  по адресу,
 сопряженному с этим элементом. Бит занятости (D)  устанавливается
 в  1  перед  записью  по  адресу  соответствующему элементу таблицы
 страниц.                          --------------------------------
      D  бит не определяется для элементов директории страниц. Когда 
 биты P, A, D модифицируются (изменяются) 80386, процессор формирует 
 цикл  "чтение  -  модификация  -  запись", который блокирует шину и 
 устраняет конфликты с другими активными абонентами шины. 
      Программное обеспечение, которое модифицирует эти биты, должно 
 использовать префикс LOCK для гарантирования целостности страничных 
 таблиц  в  многопользовательских  системах.  3  бита, помеченные OS 
 RESERVED на рис.4-20 и  4-21  (биты  9...11)  определяются  ПО.  ОС 
 свободно   используют   для  различных  целей  по  своему  желанию. 
 Например, использовать OS RES биты для  запоминания  информации  об 
 использовании  (устаревании)  страниц.  Имея  информацию о том, как 
 долго страница находится в памяти, ОС может  использовать  алгоритм 
 перемещения страниц подобно алгоритму " Замена наименее использ.". 
                 
 
                                      - 64 -
            
            
      Бит    2   U/S   (пользователь/супервизор)   и   бит   1   R/W 
 (чтение/запись)  используются  как   атрибуты   защиты   конкретных 
 страниц. 
      
 
              4.5.3.Защита на страничном уровне
                    (Биты R/W и U/S)
 
      80386  обеспечивает  атрибуты  защиты для систем со страничной 
 организацией. Механизм страничной адресации  различает  два  уровня 
 защиты:   пользователь,  который  соответствует  уровню  3  защиты, 
 основанной на сегментировании, и супервизор, который  включает  все 
 остальные  уровни  защиты  (0,  1,  2).  Программы,  выполняемые на 
 уровнях 0, 1. 2, обходят защиту страниц, хотя защита, основанная на 
 сегментировании, все - таки поддерживается аппаратурно. 
      Биты   U/S   и   R/W   используется   для  обеспечения  защиты
 пользователь/супервизор и чтение/запись для конкретных страниц  или
 всех страниц, указываемых элементом директории таблиц страниц.
      Биты  U/S  и  R/W на втором уровне элемента страничной таблицы
 используются для описания страниц, относящихся к данному элементу.
      На первом уровне таблицы директорий страниц  биты  U/S  и  R/W
 описывают   все   страничные  таблицы,   соответствующие   элементу
 директории. 
      Биты  U/S  и  R/S  данной  страницы,  полученные  из элементов 
 директории страничных таблиц, используются в  качестве  ограничений 
 при адресации к странице. 
      Например, если U/S и R/W биты для элемента директории  страниц
 -  10,  а  эти  же биты для элемента таблицы страниц - 01, то права
 доступа к страницы будут 01, т. е. наименьшее из двух.
      Таблица.4-4  показывает  влияние битов U/S и R/W на адресуемую
 память.
      Однако  данный  сегмент  может  быть  легко  переведен в режим 
 только считывания (запрет записи) для уровней 0,  1,  2,  благодаря 
 использованию механизмов защиты сегментации (см. табл.4-4). 
      
            4.5.4.Буфер предварительного преобразования TLB
      
      Аппаратура  страничной адресации 80386 спроектирована с учетом 
 требований систем  виртуальной  памяти  со  страничной  адресацией. 
 Однако,  производительность будет сильно снижаться, если процессору 
 будет требоваться доступ к двум уровням таблиц при каждом обращении 
 к  памяти.  Решение этой проблемы заключается в ведении в процессор 
 КЭШ - ЗУ для наиболее часто используемых страниц (TLB). 
      TLB - это  4-х  входовой  набор  ассоциативных  регистров  для 
 хранения  32-х  элементных  страниц.  TLB автоматически подкачивает 
 большинство требуемых элементов страничных таблиц в процессор. 
      32-х элементная TLB может одновременно  адресовать  128  Кбайт 
 памяти   (страница   размером  4  Кбайт  на  каждый  элемент).  Для 
 большинства  многозадачных  систем  коэффициент  попадания  98   %. 
 Рис.4-22   иллюстрирует,  как  TLB  реализует  механизм  страничной 
 адресации в 80386. 
 
                                      - 66 -
                 
            
                 4.5.5.Работа блока страничной адресации
            
      
      Работа   осуществляется  следующим  образом.  Блок  страничной 
 адресации принимает  32-х битовый  исполнительный  адрес  из  блока 
 сегментации.    Старшие    20   разрядов   исполнительного   адреса 
 сравнивается  со  всеми  32-мя  элементами  TLB.  Если  наблюдается 
 попадание   в   TLB  (имеется  соответствующий  элемент),  то  32-х 
 разрядный физический адрес формируется и выдается на адресную шину. 
      Если элемент таблицы  страниц  отсутствует  в  TLB,  то  80386 
 предварительно обращается к элементу директории страниц. Если Р=1 в 
 элементе страничной директории, что указывает  на  наличие  таблицы 
 страниц в памяти, то 80386 предварительно считывает элемент таблицы 
 страниц и устанавливает бит доступа (A). Если в элементе страничной 
 таблицы  Р=1,  что указывает на наличие страницы в памяти, то 80386 
 устанавливает биты A и D так, как требуется, и  производит  выборку 
 операнда. 
      Старшие  20  бит исполнительного адреса считываются из таблицы 
 страниц и запоминаются в TLB для  постоянного  использования.  Если 
 для  элемента страничной директории или элемента страничной таблицы 
 Р=0,  то  процессор  формирует  ошибку  страницы  (Прерывание  14). 
 Процессор также будет формировать прерывание 14, если при обращении 
 к памяти нарушаются атрибуты защиты U/S и R/W (например,  запись  в 
 страницу,   разрешенную   только   для   считывания).   CR2  хранит 
 исполнительный адрес, который вызывает ошибку страничной адресации. 
 При  возникновении  прерывания  14 CS: EIP будет указывать команду,
 вызвающую ошибку страничной адресации.
      16-ти   битовый   код   ошибки    сохраняется  в    стеке  для
 подпрограммы обслуживания ошибки и включает  биты,  указывающие  на
 причину, вызвавшую ошибку. 
      16-ти битовый код ошибки используется ОС для определения путей 
 исправления  ошибки.  Рис.4-23  А   показывает формат кода ошибки и 
 интерпретацию его битов. 
 
                     Замечание
      Каждый   из   бит   кода  ошибки  U/S,  W/R,  P  имеют  имена, 
 соответствующие   названиям    аналогичным    бит    в    элементах 
 директории/таблицы  страниц,  но  интерпретируются биты кода ошибки 
 по-разному. Рис.4-23 В показывает, какой  тип  доступа  [к  памяти] 
 вызывает ошибку страничной адресации. 
 
      U/S. Этот бит указывает, в каком режиме находился процессор: в 
 пользовательском  (U/S=1)  или  в  режиме  супервизора  (U/S=0) при 
 возникновении ошибки. 
      W/R. Этот бит указывает, возникла ли ошибка при чтении (W/R=0)
 или записи (W/R=1).
      P. Этот  бит  указывает,  возникла  ли  ошибка  по  отсутствию
 страницы  (Р=0)  или нарушены правила защиты (Р=1).U не определены.
      
      4.5.6.Обязанности операционной системы
      
      80386  заботится  о   процессе   трансляции   адресов   блоком
 страничной  адресации,  разгружая  ОС  от  этого. ОС вызывается при
      
 
                                      - 68 -
            
            
 начальной загрузке таблицы страниц и  управляет  обработкой  ошибок 
 страничной  адресации.  ОС  также  требуется при недействительности 
 (очистке) TLB, когда делаются  любые  изменения  в  любом  элементе 
 страничной таблицы. 
      ОС  должна  перезагружать CR3 при очистке TLB. Переопределение 
 таблиц  -  просто  процесс  перезагрузки  CR3  адресом   страничной 
 директории   и   перемещение   пространства   (области)  страничной 
 директории и страничных таблиц. 
      Основная ответственность ОС - реализация стратегии подкачки  и 
 управление   обработкой   всех   сбойных  ситуаций  при  страничной 
 адресации. Главная забота ОС - гарантировать, что информация в КЭШе 
 TLB  соответствует  информации  в страничных таблицах. В частности, 
 установка бита представления Р в ноль в любой момент времени должна 
 указывать  ОС на необходимость обновления. ОС может использовать то 
 преимущество,  что  CR3  запоминается  (хранится)  как  часть   TSS 
 конкретной  задачи  или  группы  задач,  имеющих  собственный набор 
 страничных таблиц. 
      
               4.6. ВИРТУАЛЬНАЯ СРЕДА 8086
      
             4.6.1.Выполнение программ 8086
      
      80386 обеспечивает выполнение прикладных программ 8086  как  в 
 режиме  реальной  адресации  (RM),  так и в виртуальном режиме 8086 
 (VM). Из этих двух методов - VM - обеспечивает разработчику системы 
 большую гибкость. 
      В частности, 80386 обеспечивает непосредственное выполнение ОС 
 и  пользовательских  программ  для  8086,  ОС  и   пользовательских 
 программ для 80286 и 80386. 
      Таким  образом,  в  многопользовательском компьютере на основе
 80386, один  пользователь  может  работать  с  MS-DOS  spreadsheet,
 другой - с MS-DOS, а третий - с утилитами и прикладными программами
 UNIX.
      При   этом,   у   каждого   пользователя   создается   иллюзия
 монопольного владения ЭВМ.
      Рис.4-24 иллюстрирует этот принцип.
      
             4.6.2 Механизм адресации режима VM 8086.
   
      Одно   из   главных  отличий  RM  и  PM  режимов  8086  -  как
 интерпретируются адресные селекторы.
      Когда процессор  работает  в  режиме  VM  8086, его сегментные
 регистры используются идентично режиму RM.
      Содержимое  сегментного  регистра  сдвигается  влево  на  4  и
 складывается со смещением, образуя исполнительный адрес.
      80386 позволяет самой ОС определить какие программы используют
 механизм адресации как у 8086, а какие - адресацию режима PM.
      При  помощи  (благодаря)  страничной  адресации,  пространство
 адресов в 1 Мбайт задачи,  исполняемой  в  VM  режиме,  может  быть
 размещено  в  любом месте 4-х Гбайтного пространства исполнительных
 адресов 80386.
      Подобно RM режиму, в VM  режиме  адреса  превышающие  1  Мбайт
 будут вызывать прерывание 13.
      Однако  эти  ограничения  не  должны  быть очень важными, т.к.
 большинство задач решаемых в VM 8086 режиме задач проще этого - они
 преемницы пользовательских программ 8086.
      
 
                                      - 70 -
            
            
      
              4.6.3 Страничная адресация в VM режиме.
 
      Аппаратура  страничной адресации разрешает параллельную работу
 нескольких задач в VM режиме и обеспечивает защиту и  независимость
 их операционных систем.
      Хотя   нет   обязательной   необходимости   использовать   эту
 аппаратуру  в   режиме   VM,   это   необходимо   для   обеспечения
 одновременного  выполнения  нескольких  задач  или  для перемещения
 пространства адресов задачи в физическом пространстве адресов свыше
 1 Мбайта.
      Аппаратура   страничной   адресации  позволяет  20-ти  битовые
 исполнительные адреса VM программ разделить на 256 страниц.  Каждая
 из  этих страниц может быть произвольно размещена в любом месте 4-х
 Гбайтного пространства физических адресов 80386.
      Кроме того, т.к.  CR3  (регистр  базы  страничной  директории)
 загружается  при  переключении  задач, то каждая задача в VM режиме
 может  использовать  свою  схему  размещения  страниц  в  различных
 пространствах физической памяти.
      В   довершение   ко  всему,  аппаратура  страничной  адресации
 позволяет  разделять  коды   (программы)   ОС   между   несколькими
 прикладными программами 8086.
      Рис.4-24  показывает как аппаратура страничной адресации 80386
 подключает  несколько  программ  8086   под   управлением   системы
 страничной адресации виртуальной памяти.
      
      
                            4.6.4 Защита
 
      Все  программы  в  режиме  VM выполняются на привилигированном
 уровне 3. Для VM режима выполняются все проверки,  характерные  для
 PM режима.
      В этом заключается отличие от RM режима, который безоговорочно
 выполняется на  привилегированном  уровне  0.  Поэтому,  стремление
 выполнить  привилегированную  команду в VM режиме будем приводить к
 возникновению ошибки защиты (прерывание 13).
      Несколько команд чувствительны к IOPL, поэтому ОС может решать
 выполнять  ли команды ввода-вывода (I/O), устанавливая IOPL=0, либо
 выполнять эти команды обычным образом при IOPL=3.
      Т.К.   в   RM   режиме   программы   всегда   выполняются   на
 привилегированном   уровне   0,   то   ошибок  при  получении  IOPL
 чувствительных команд не формируется.
      Некоторые команды  используемые  только  в  режиме  PM,  будут
 неопределенными (с точки зрения КОПа) в режимах RM и VM.
      В  режимах  RM  и  VM  прерывание  6  будет вызывать следующие
 команды:
      ARPL, LAR, LSL, VERR, VERW, STR, LTR, SLDT и LLDT.
      
      Ниже следуют привилегированные команды. Они могут  выполняться
 в  RM режиме, но будут вызывать прерывание 13 (ошибка общей защиты)
 в VM режиме или, если CPL>0.
      LIDT, LGDT, LMSW, CTS, HLT, MOV, DRn, REG;
      MOV REG, DRn; MOV CRn, REG; MOV REG, CRn;
      MOV TRn, REG; MOV REG, TRn.
      
      Ниже приведенные команды формируют прерывание 13 (ошибка общей
 защиты), когда CPL>IOPL.
      INS, IN, OUTS, OUT, STI, CLI, LOCK.
      
 
                                      - 71 -
                 
            
      Команды  INTn,  PUSH F, POP F, IRET становятся чувствительными
 IOPL только, когда процессор работает в  режиме  VM  (заметим,  что
 клманды INT3 и INT0 являются исключением из этого правила).
      
      
                   4.6.5 Управление прерываниями
      
      Для  обеспечения  полной  совместимости  с  машинами на основе
 8086, прерывания в VM режиме обслуживаются своеобразно. При  работе
 МП в режиме VM все прерывания и особые ситуации вызывают главную ОС
 80386. ОС 80386 определяет поступило ли прерывание из PM режима или
 из VM режима, анализируя бит VM в копии регистра признаков (EFLAG),
 хранимой в стеке.
      Когда прерывается программа в режиме VM, происходит переход  к
 программе обработки прерывания уровня 0 и VM бит сбрасывается. В то
 же время, этот бит остается равным 1 в копии  содержимого  регистра
 признаков, хранимой в стеке.
      ОС  80386  управляет обработкой прерываний и особых ситуаций и
 возвращает управление программе 8086. 
      ОС  80386  может  выбрать:  передать  ли управление обработкой
 прерывания ОС 8086 или эмулировать  эту  обработку  самостоятельно.
 Например, многие ОС для 8086 вызывают командой PUSH ввод параметров
 в стек и затем выполняют команду INTn.
      Если IOPL=0, то команды INTn будут обращаться к ОС 80386.
      ОС 80386 может эмулировать системные вызрвы ОС 8086.  Рис.4-25
 показывает, как ОС 80386 может воспринимать вызов "открыть файл" ОС
 8086.
      ОС  80386  может  обеспечивать  окружение  виртуального  8086,
 благодаря, восприятию и последующей интерпретации вызовов ОС 8086 и
 восприятия команд IN и OUT.
      
      
            4.6.6 Инициализация и прекращение режима VM 8086
      
      Задача  режима VM инициализируется формированием крманд CALL и 
 JUMP к TSS, который  имеет  VM  бит  установленным  в  1  (в  копии 
 EFLAGS). 
      При выходе из  подпрограммы  обработки  прерывания  на  уровне
 [привилегированность]  0 установка VM бита также вызывает возврат к
 VM режиму.
      Первый метод используется для начала выполнения  задачи  в  VM
 режиме,   тогда   как   второй   -  для  возврата  из  подпрограммы
 обслуживания прерывания в режиме VM.
      Переходы в и из VM  режима  сопровождаются  изменением  уровня
 [привилегированного]  и  переключением  стека. Кроме того, значения
 сегментных регистров убираются в стек и затем загружаются  нулевыми
 селекторами.
      Это позволяет подпрограммам обработки прерываний обслуживать и
 перезапоминать сегментные регистры,  как  селекторы  80286,  взамен
 вида сегментных регистров 8086.
      Прерывающие  программы, которым необходимы значения сегментных
 регистров будут иметь доступ к значениям (для их  просмотра)  через
 стек.
      Прекращение   (выход  из)  режима  VM  соответствует  простому
 переходу JUMP к TSS (на уровне 0), который не имеет  VM=1.  В  этом
 случае происходит переключение задачи. 
      
                 
                                      - 73 -
                                
                 
                 5. СВЕДЕНИЯ О ФУНКЦИОНИРОВАНИИ 
 
      
                          5.1 Введение
 
      Характерной    чертой    80386   является   наличие   простого
 функционального интерфейса для взаимосвязи с внешними модулями.
      В 80386 имеются  две  раздельные  шины:  шина  адреса  и  шина
 данных. Шина данных - 32-разрядная и двунаправленная. В большинстве
 применяемых модулей для высококоростной локальной шины используются
 32 разряда адреса, передаваемого по адресной шине, из них 2 младших
 разряда дешифрируются в 4 сигнала строба  данных  (каждый  из  этих
 сигналов  разрешает  или  запрещает передачу соответствующего байта
 данных), а остальные 30 разрядов представляют  собой  двоичный  код
 адреса.  Для  управления  обменом  по  шине  адреса  и  шине данных
 используются соответствующие управляющие сигналы.
      Изменяемая  ширина   (разрядность)   шины   данных   позволяет
 процессору  взаимодействовать  как  с  32-х,  так и с 16-разрядными
 внешними шинами в синхронном режиме (см. 5.3.4).
      Если передача информации состоит из нескольких циклов  обмена,
 каждый  из  которых требует 16-разрядной ширины шины данных, то все
 равно 80386  в  каждом  цикле  автоматически  выполнит  необходимую
 процедуру  установления  разрдности  шины. *-разрядные периферийные
 устройства могут быть подключены к 32-х или 16-разрядным шинам, при
 этом  их производительность не снижается. В 80386 применяется новый
 режим конвейерной адресации, который обеспечивает в случае  32-х  и
 16-разрядной   шин   наиболее  рациональное  использование  памяти,
 особенно это  проявляется  в  очень  напряженном  режиме  работы  с
 ресурсами  памяти  (когда  доступ к памяти требуется большому числу
 абонентов). 
      Режим  конвейерной  адресации по сравнению с другими способами
 адресации значительно сокращает время нахождения интерфейса  памяти
 в   состоянии   ожидания   (см.   5.4.2).   Конвейерную   адресацию
 целесообразно применять в системах, имеющих в своем составе  память
 с  расслоением.  В системах с рабочей частотой 16 МГц, включающих в
 себя  память  с  расслоением   со   временем   обращения   100   Нс
 (динамические  ОЗУ),  можно  совсем  исключить  состояние ожидания,
 применяя конвейерную  адресацию.  Когда  внешние  модули  потребуют
 режим  конвейерной  адресации,  80386  сформирует адрес и определит
 длительность цикла шины для предстоящего цикла шины (если позволяют
 внутренние ресурсы), даже если в настоящий момент процессор ожидает
 подтверждение в текущем цикле.
      Однако,   неконвейеризированный   способ   адресации  идеально 
 подходит для устройств, в состав которых входит кэш-память, так как 
 высокое    быстродействие    кэш-памяти    позволяет   работать   в 
 неконвейеризированном режиме. Для обеспечения максимальной гибкости 
 системы  на  основе  совмещения циклов конвейерный способ адресации 
 применяется в синхронных системах. 
      Цикл  шины  процессора  является  основным  средством передачи
 информации из системы в процессор или из процессора в систему.
      Минимальная длительность цикла передачи данных по шине в 80386
 состовляет  два периода тактовой частоты. Поскольку процессор 80386
 имеет 32-разрядную  шину  данных  и  рабочую  частоту  16  МГц,  то
 следовательно  максимальная пропускная способность 80386 составляет
 32 Мбайт/сек. Однако, длительность любого  цикла  шины  может  быть
 увеличена,  если  в  этом  цикле задерживается выдача подтверждения
 обмена  от  внешнего  модуля.  В  соответствующий  момент   времени
 подтверждение  выдается  путем  формирования сигнала на входе READY
 (ГОТОВ) процессора 80386.
      80386 может терять доступ к своим локальным  шинам,  передавая
 
                                      - 76 -
            
            
 управление   ими  другим  устройствам,  например,  каналам  прямого
 доступа к памяти. При этом,  за  исключением  единственного  выхода
 HLDA,  формируемого  80386,  обеспечивается  почти  полная изоляция
 процессора от системы. Изолязия процессора необходима при  передаче
 управления    тестовому   оборудованию   или   в   отказоустойчивых
 применениях  (в многопроцессорных системах для изоляции отказавшего
 процессора и замены его другим).
      В   данном   разделе   представлены   сведения  об  интерфейсе
 процессора.  Во-первых,  описано  назначение  и   функции   выводов
 процессора   (см.  5.2  Описание  сигналов).  Кроме  того,  описаны
 изменения сигналов в течение циклов шины (см. 5.3  Механизм  обмена
 по  шине,  5.4 Описание функционирования шины и 5.5 Другие сведения
 по функционированию). 
      
      
                     5.2 Описание сигналов
 
                         5.2.1 Введение
 
      Подраздел  начинается  с  краткого описания входных и выходных
 сигналов 80386, объединенных в функциональные группы. Отметим,  что
 наличие  символа  #  после  названия сигнала означает, что активное
 состояние сигнала - состояние низкого  уровня.  И  наоборот,  когда
 такого  символа # нет после названия сигнала, то сигнал активен при
 высоком уровне.
      Пример обозначения сигнала: M/IO#
              - Высокий уровень означает обращение к памяти.
              - Низкий  уровень  означает  обращение  к  устройствам
                ввода/вывода.   
      В  описаниях сигналов встречаются иногда обозначения временных
 параметров, таких как "t25  Reset/Setup  Time"  (Время  сброса  при
 включении питания) и "t26 Reset Hold Time" (Время удержания сигнала
 сброса). Значения этих параметров приведены в табл.7-4  и табл.7-5.
      
      
                        5.2.2 Синхросигнал (CLK2)
 
      CLK2 обеспечивает основную  синхронизацию  работы  80386.  Эта 
 тактовая  частота  делится  пополам  для  того,  чтобы сформировать 
 внутреннюю  процессорную   тактовую   частоту,   используемую   при 
 выполнении   команд   внутри  процессора.  Внутренний  синхросигнал 
 состоит из двух фаз: "фазы один"  и  "  фазы  два".  Каждый  период 
 частоты.  На рис.5-2 показано соотношение двух синхросигналов. Если 
 необходимо,   фаза    внутреннего    синхросигнала    может    быть 
 синхронизирован  от  такого  отрицательного  фронта  сигнала RESET, 
 который обеспечит заданные времена установки и удержания, t25 и t26 
 (setup and hold times). 
      
      
                        5.2.3 Шина данных (D0-D31)
 
      Двунаправленные   с   тремя   состояниями  линии  шины  данных 
 обеспечивают перемещение данных  от  80386  к  другим  устройствам. 
 Наличие  высокого  уровня  напряжения на входах/выходах шины данных 
 обозначает наличие кодов логической единицы "1"  на  этих  выводах. 
 Шина   данных  может  передавать  данные  как  на  32-,  так  и  на 
 16-разрядные шины благодаря тому, что  есть  возможность  изменения 
 размера  шины  данных;  размер  шины  данных определяется значением 
 входного сигнала BS16# (см. параграф 5.2.6 Шина управления). 
      Для правильного выполнения операций считывания сигналов с шины
 данных требуется обеспечение необходимых значений времени установки
 
                                      - 77 -
            
            
 t21 и времени удержания t22 считываемых данных.
      При   любой   операции   записи   (включая  циклы  останова  и
 выключения) 80386 всегда передает все 32 разряда данных, даже  если
 в текущем цикле размер шины обмена равен 16 разрядам.
      
      
                5.2.4 Шина адреса (BE0#-BE3#, A2-A31)
 
      Эти   выходы   с  тремя  состояниями  обеспечивают  физическую 
 адресацию памяти или адресацию устройств ввода/вывода. Шина  адреса 
 обеспечивает  физическое  пространство  адресов  памяти  объемом  4 
 гигабайта  (от  00000000H  до  FFFFFFFFH)  и  пространство  адресов 
 ввода/вывода  объемом  64 килобайта (от 00000000H до 0000FFFFH) для 
 обращения  к  устройствам  ввода/вывода.   Для   передачи   сигалов 
 ввода/вывода,    автоматически    формируемых    для    обеспечения 
 взаимодействия  80386  с   сопроцессором,   используется   адресное 
 пространство  ввода/вывода  от  800000F8H до 800000FFH, так как для 
 обращения  к  сопроцессору  необходимо  совпадение  двух   условий: 
 наличие  высокого  уровня  напряжения на линии адреса А31 и наличие 
 низкого уровня на линии M/IO#. 
      Значения  сигналов   стробов   данных   BE0#-BE3#   определяют 
 соответственно те байты 32-разрядной шины данных, которые участвуют 
 в текущей  передаче.  Это  особенно  удобно  для  взаимодействия  с 
 внешней аппаратурой. 
      BE0# определяет участие в обмене разрядов D0-D7,
      BE1#                 -"-                  D8-D15,
      BE2#                 -"-                  D16-D23,
      BE3#                 -"-                  D24-D31.
      Количество  стробов  данных  BE0#-BE3#, находящихся в активном
 состоянии, определяет размер операнда обмена (1,2,3  или  4  байта)
 (см. параграф 5.3.6 Выравнивание данных).
      Когда  выполняется  цикл  записи  в  память  или  в устройство
 ввода/вывода, и передаваемый операнд  занимает  только  старшие  16
 разрядов  шины  данных (D16-D31), копия этого операнда одновременно
 передается  по  младшим  16  разрядам  шины  данных  (D0-D15).  Это
 дублирование выполняется для обеспечения оптимального режима записи
 на  16-разрядные  шины.  Процедура дублирования записываемых данных
 зависит от значений стробов данных BE0#-BE3#.
 .
                                      - 78 -
            
            
      Таблица 5-1. Зависимость дублирования записываемых данных
                            от значений BE0#-BE3#
 -------------------------------------------------------------------
 Стробы данных 80386|Записываемые данные 80386   |Есть ли автомати-
 ------------------------------------------------|ческое дублирова-
 BE3#|BE2#|BE1#|BE0#|D24-D31|D16-D23|D8-D15|D0-D7|    ние?
 -------------------------------------------------------------------
 выс.|выс.|выс.|низ.|неопр. |неопр. |неопр.|  А  |      нет
 -------------------------------------------------------------------
 выс.|выс.|низ.|выс.|неопр. |неопр. |  В   |неопр|      нет
 -------------------------------------------------------------------
 выс.|низ.|выс.|выс.|неопр. |   С   |неопр.|  С  |      да
 -------------------------------------------------------------------
 низ.|выс.|выс.|выс.|   D   |неопр. |  D   |неопр|      да
 -------------------------------------------------------------------
 выс.|выс.|низ.|низ.|неопр. |неопр. |  В   |  А  |      нет
 -------------------------------------------------------------------
 выс.|низ.|низ.|выс.|неопр. |   С   |  В   |неопр|      нет
 -------------------------------------------------------------------
 низ.|низ.|выс.|выс.|   D   |   С   |  D   |  С  |      да
 -------------------------------------------------------------------
 выс.|низ.|низ.|низ.|неопр. |   С   |  В   |  А  |      нет
 -------------------------------------------------------------------
 низ.|низ.|низ.|выс.|   D   |   С   |  В   |неопр|      нет
 -------------------------------------------------------------------
 низ.|низ.|низ.|низ.|   D   |   С   |  В   |  А  |      нет
 -------------------------------------------------------------------
                     
      Обозначения: D=логические записываемые данные в байте D24-D31;
                   C=                -"-                    D16-D23;
                   B=                -"-                    D8-D15;
                   A=                -"-                    D0-D7.
      
      
             5.2.5 Сигналы определения типа цикла шины 
                       (W/R#, D/C#, M/IO#, LOCK#)
      
      Эти выходы с тремя состояниями определяют тип  текущего  цикла
 шины.  В  зависимости  от значения W/R# все циклы подразделяются на
 циклы записи и циклы чтения. D/C#  разделяет  все  циклы  на  циклы
 обмена   данными  и  циклы  обмена  управляющими  сигналами.  M/IO#
 отличает циклы обращения к памяти от циклов обращения к устройствам
 ввода/вывода.  По  сигналу  LOCK# различаются циклы с блокированной
 шиной. 
      Основными сигналами определения типа цикла шины являются W/R#,
 D/C# и M/IO#, так как эти сиганлы принимают действительное значение
 одновременно  с  установлением активного уровня сигнала ADS# (выход
 строба   адреса).    Действительное    значение    сигнала    LOCK#
 устанавливается  тогда,  когда начинается цикл шины (причем, цикл с
 конвейерной  адресацией)  и  после  установления  активного  уровня
 сигнала ADS# (см. параграф 5.4.3.4 конвейерная адресация).
      Точное соответствие типов циклов шины значениям сигналов W/R#,
 D/C# и  M/IO#  приведено   в   табл.5-2.  Отметим  одну  комбинацию
 сигналов W/R#, D/C# и M/IO#, которая никогда не может быть получена
 при активном уровне сигнала ADS# (однако, эта  комбинация,  которая
 обозначена   как   "запрещенная"  может  иметь  место  в  нерабочих
 состояниях шины, при неактивном  уровне  сигнала  ADS#).  Поскольку
 действительные  значения  сигналов  M/IO#, D/C# и W/R# определяются
 временем действия сигнала ADS#, то в другое время для  оптимального
 использования  дешифрирующей схемы можно использовать и запрещенную
 комбинацию.
 .
                                      - 79 -
            
            
              Таблица 5-2. Определение типа цикла шины
 -------------------------------------------------------------------
  M/IO# | D/C#  | W/R#  |   Тип цикла шины            | Блокирована
        |       |       |                             | ли шина?
 -------------------------------------------------------------------
 низкий |низкий |низкий | Подтверждение прерывания    |    да
 -------------------------------------------------------------------
 низкий |низкий |высокий| Запрещенная                 |    да
 -------------------------------------------------------------------
 низкий |высокий|низкий | Чтение данных из устройства |    нет
        |       |       | ввода/вывода                |
 -------------------------------------------------------------------
 низкий |высокий|высокий| Запись данных в устройство  |    нет
        |       |       | ввода/вывода                |
 -------------------------------------------------------------------
 высокий|низкий |низкий | Чтение команды из памяти    |    нет
 -------------------------------------------------------------------
 высокий|низкий |высокий| Останов:       Выключение:  |    нет
        |       |       | Адрес=2        Адрес=0      |
        |       |       | --------       -----------  |
        |       |       | (BE0#Выс.      (BE0#Низк    |
        |       |       |  BE1#Выс.       BE1#Выс.    |
        |       |       |  BE2#Низк.      BE2#Выс.    |
        |       |       |  BE3#Выс.       BE3#Выс.    |
        |       |       |  A2-A31Низк.)   A2-A31Низк.)|
 -------------------------------------------------------------------
 высокий|высокий|низкий | Чтение данных из памяти     | Некоторые
        |       |       |                             | циклы
 -------------------------------------------------------------------
 высокий|высокий|высокий| Запись данных в память      | Некоторые
        |       |       |                             | циклы
 -------------------------------------------------------------------
      
      
                  5.2.6 Сигналы управления шиной
      
                         5.2.6.1 Введение
 
      Нижеперечисленные  сигналы  позволяют  процессору   определять
 начало  цикла  шины,  а  также  дают возможность другим устройствам
 системы управлять конвейерной адресацией, размером  шины  данных  и
 определять конец цикла шины.
      
      
                    5.2.6.2 Строб адреса (ADS#)
 
      Этот  входной сигнал с тремя состояниями на входе указывает на
 то  что  на  выводах  80386  установлены  действительные   значения
 сигналов,  определяющих  тип  цикла  шины, и сигналов адреса (W/R#,
 D/C#, M/IO#, BE0# - BE3# и A2-A31). Сигнал  ADS  устанавливается  в
 течение тактов Т1 и Т2  состояний шины (дополнительную информацию о
 состояниях  шины  см.  5.4.3.2  Неконвейеризированная  адресация  и
 5.4.3.4 Конвейерная адресация). 
      
      
               5.2.6.3 Сигнал подтверждения (READY#).
 
     Этот вход указывает на то, что текущий цикл шины завершен, и те
 байты,  участие  которых  в  цикле  обмена  определено   значениями
 BE0#-BE3#  и  BE16#,  приняты  или  переданы. Когда в течение цикла
 
                                      - 80 -
            
            
 чтения или  цикла  подтверждения  прерывания  формируется  активный
 уровень  сигнала  READY#,  80386  "защелкивает"  входные  данные  и
 завершает цикл. Когда сигнал READY#  формируется  в  цикле  записи,
 процессор завершает цикл шины.
      Сигнал  READY#  игнорируется  в первом такте всех циклов шины,
 затем в каждом такте состояние READY# опрашивается до тех пор, пока
 не  установится активный уровень сигнала READY#. READY# должен быть
 сформирован для подтверждения в каждом цикле  шины,  включая  циклы
 отображения  останова  и  отображения  выключения.  Для  правильной
 работы время установки t19 и время  удержания  t20  сформированного
 сигнала  READY# должны иметь определенные необходимые значения (См.
 все параграфы раздела 5.4 Описание функционирования шины).
      
      
               5.2.6.4 Запрос следующего адреса (NA#)
 
      Этот сигнал используется  для  запрашивания  адреса  в  режиме
 конвейерной  адресации.  Этот  вход  сообщает процессору о том, что
 система готова принять из 80386 новые значения сигналов  BE0#-BE3#,
 A2-A31,  W/R#, D/C# и M/IO#, даже если завершение текущего цикла не
 подтверждено сигналом READY#.
      Если 80386 обнаружит на входе NA# активный уровень, он  выдает
 на   шину   следующий  адрес,  обеспечив  внутреннюю  подготовку  к
 следующему запросу шины (см. параграф 5.4.2 Конвейерная адресация и
 5.4.3 Циклы чтения и записи).
      
      
             5.2.6.5 Указатель 16-разрядной шины (BS16#)
      
      Благодаря  сигналу BS16# осуществляется непосредственная связь
 80386  с  32-разрядной  и  16-разрядной  шинами  данных.  Установка
 активного уровня этого  входа  приведет к тому, что в текущем цикле
 шины обмен будет производиться  только  по  младшей  половине  шины
 данных (D0-D15) в соответствии со значениями сигналдов BE0# и BE1#.
 Дополнительное влияние сигнала  BS16#  (установленного  в  активное
 состояние) не проявится, если в текущем цикле сформированы активные
 уровни только сигналов  BE0#  или  BE3#,  действие  сиганала  BS16#
 (активного  уровня)  заставит процессор 80386 выполнить необходимые
 переключения для  правильной  передачи  старшего(их)  байта(ов)  по
 линиям D0-D15.
      Если  операнд  занимает  обе  половины  шины  данных и BS16# в
 активном  состоянии,  то  80386   автоматически   выполнит   второй
 16-разрядный цикл шины. Для правильной работы время установки t17 и
 время  удержания  t18  сигнала  BS16#  должны  иметь   определенные
 необходимые значения.
      Циклы   ввода/вывода,   автоматически  выполняемые  80386  для
 взаимосвязи с сопроцессором, не требуют  установки  сигнала  BS16#.
 Сопроцессоры  типа  80287 и 80387 анализируют входной сигнал ERROR#
 сразу после отрицательного фронта сигнала RESET. 80386 обменивается
 только  16-разрядными  посылками с 80287, а в случае взаимодействия
 80386 с сопроцессором 80387 обмен производится только 32-разрядными
 посылками. Таким образом, значение BS16# влияет на циклы с участием
 80287, а в течение циклов с  участием  80387  сигнал  BS16#  должен
 поддерживаться на неактивном уровне. 
                 
 
                                      - 81 -
      
      
                   5.2.7 Сигналы арбитража шины
      
                         5.2.7.1 Введение
           
      В   этом  разделе  описывается  механизм,  благодаря  которому
 процессор  передает  управление  своими  локальными  шинами  другим
 активным абонентам, запрашивающим урпавление шиной (см. 5.5.1).
 
                  5.2.7.2 Запросы на захват шины (HOLD)
 
      Этот  выход  указывает  на  то, что каким-то устройствам кроме
 80386 требуется управление шиной.
      Сигнал HOLD  должен  поддерживаться  в  активном  состоянии  в
 течение  всего  времени,  пока  любое  другое  устройство  является
 владельцем  локальной  шины.  Сигнал  HOLD  игнорируется  во  время
 действия  RESET.  Если  сигнал  RESET  появится  во  время действия
 сигнала HOLD, то более приоритетный сигнал RESET установит  шину  в
 нерабочее    состояние    быстрее,    чем   установится   состояние
 подтверждения захвата шины (состояние высокого сопротивления).
      Процессор срабатывает по фронту  сигнала  HOLD  и,  пока  HOLD
 поддерживается  в активном состоянии, постоянно анализирует уровень
 этого сигнала.  Вход  HOLD  -  синхронизированный.  Для  правильной
 работы  время  установки  t23  и  удержания t24 должны всегда иметь
 определенное необходимое значение.
      
              5.2.7.3 Подтверждение захвата шины (HLDA)
 
      Формирование активного уровня на выходе HLDA указывает на  то,
 что  80386  передает  управление  своей  локальной шиной в ответ на
 установление   сигнала  HOLD  и переходит в состояние подтверждения
 захвата шины.
      Состояние  подтверждения  захвата  предполагает  почти  полную
 изоляцию  процессора.  Сигнал  HLDA в этом состояние - единственный
 сигнал,  выдаваемый   80386.   Другие    выходные    сигналы    или
 двунаправленные  сигналы  (D0-D31,  BE0#-BE3#,  A2-A31, W/R#, D/C#,
 M/IO#, LOCK# и ADS#)  переключаются  в  третье  (высокоимпедансное)
 состояние,  поэтому запросившее шину устройство может захватить их.
 К некоторым сигнальным линиям желательно  подсоединить  фиксирующие
 резисторы  для  того,  чтобы  избежить  ложное срабатывание по этим
 сигналам, когда они не формируются  текущим  владельцем  шины  (см.
 7.2.3  Рекомендации по выбору и применению резисторов). Кроме того,
 один используемый фронт, который может быть  сформирован  на  входе
 NMI  во  время состояния подтверждения захвата, запоминается с тем,
 чтобы он был проанализирован и обработан после снятия сигнала HOLD.
 Кроме  обычного  использования  состояния подтверждения захвата при
 взаимодействии 80386 с контроллерами ПДП (прямого доступа к памяти)
 или  активными  периферийными  устройствами, состояние почти полной
 изоляции  процессора  особенно   удобно   использовать   в   режиме
 тестирования   системы,    когда  тестовое  оборудование  управляет
 системой, а также в отказоустойчивых системах.
 
                                      - 82 -
                 
      
               5.2.8 Сигналы интерфейса с сопроцессором
 
                            5.2.8.1 Введение
 
      В следующих параграфах этого раздела дано  описание  сигналов,
 предназначенных  для интерфейса с арифметическим сопроцессором. Эти
 сигналы, дополняя  сигналы  шины  данных,  шины  адреса  и  сигналы
 определения  типа цикла шины, управляют взаимодействием 80386 с его
 сопроцессором 80287 или 80387. 
      
      
                  5.2.8.2 Запрос сопроцессора (PEREQ)
 
      Активный   уровень   этого   сигнала   указывает  на  то,  что
 сопроцессор требует, чтобы в ответ на его  запрос  операнды  данных
 были переданы в/из памяти.
      Активный  уровень  этого  входного сигнала указывает на запрос
 сопроцессора на передачу процессором  80386  операнда  данных  в/из
 памяти,  в  ответ  на  этот  запрос 80386 передает информацию между
 сопроцессором и памятью. Поскольку в 80386 хранится  код  операции,
 выполняемой  сопроцессором, 80386 осуществляет запрошенную передачу
 данных в заданном нарпавлении и по заданному адресу  памяти.  80386
 анализирует  и  срабатывает  по  уровню сигнала PEREQ. Сигнал PEREQ
 может быть асинхронным по отношению к CLK2. 
      
      
                  5.2.8.3 Сопроцессор занят (BUSY#)
      
      Активный   уровень   этого   сигнала   указывает  на  то,  что
 сопроцессор еще выполняет заданную текущую  инструкцию  и  пока  не
 может принять другую инструкцию.
      Когда  80386  встречает любую инструкцию сопроцессора, которая
 оперирует  с  арифметическим  стеком  (стеком  сопроцессора)  (т.е.
 инструкции   загрузки,   "рор"  -  инструкции (убрать  в  стек) или
 арифметические операции), или инструкцию ожидания  WAIT,  он  сразу
 автоматически  анализирует состояние входного сигнала BUSY# и будет
 просматривать  его  до  тех  пор,  пока  BUSY#  не  переключится  в
 неактивное состояние. 
      Такой    просмотр   входного   сигнала   BUSY#   предотвращает
 преждевременную выдачу следующей  инструкции  во  время  выполнения
 сопроцессором предыдущей инструкции.
      Инструкция  сопроцессора  FNINIT и FNCLEX могут быть выполнены
 даже  при  наличии  активного  уровня  на  входе  BUSY#,  так   эти
 инструкции   используются  для  инициализации  и  прерывания-сброса
 сопроцессора.
      80386 анализирует  и  срабатывает  по  уровню  сигнала  BUSY#.
 Сигнал BUSY# может быть асинхронным по отношению к CLK2.
      Сигнал   BUSY#   служит   еще   одной   цели.  Если  во  время
 отрицательного фронта сигнала RESET на входе BUSY#  имеется  сигнал
 низкого  уровня,  то  80386 выполнит процедуру самодиагностирования
 (см. 5.5.3 Функционирование шины в течение и после действия сигнала
 RESET).  Если  же  в  этот  момент сигнал BUSY# будет иметь высокий
 уровень, то самодиагностирование выполняться не будет.
 
                                      - 83 -
      
      
                5.2.8.4 Ошибка сопроцессора (ERROR#)
      
      Этот входной  сигнал  указывает  на  то,  что  при  выполнении
 сопроцессором  предыдущей инструкции им был сформирован код ошибки,
 немаскируемый управляющим регистром  сопроцессора.  При  выполнении
 сопроцессором  инструкции процессор 80386 автоматически анализирует
 входной сигнал ERROR#, и если установится активный уровень  сигнала
 ERROR#,  то  80386  вырабатывает  прерывание  7, чтобы обратиться к
 программам обработки ошибок.
      Некоторые инструкции  сопроцессора,  в  основном  те,  которые
 сбрасывают флаги арифметических ошибок в сопроцессоре или сохраняют
 состояние сопроцессора, исполняются без выработки процессором 80386
 прерывания  7,  даже  если  установлено  активное состояние сигнала
 ERROR#.  К  таким  инструкциям  относятся  FNINIT,  FNCLEX,  FSTSW,
 FSTSWAX, FSTCW, FSTENV, FSAVE, FESTENV и FESAVE.
      80386  анализирует  и  срабатывает  по  уровню сигнала ERROR#.
 Сигнал ERROR# может быть асинхронным по отношению к CLK2.
      Сигнал ERROR# выполняет еще одну функцию. Если низкий  уровень
 сигнала ERROR# установится не позже, чем через 20 периодов тактовой
 частоты  CLK2  после  отрицательного  фронта   сигнала   RESET,   и
 сохранится  таким  по меньшей мере до тех пор, пока 80386 не начнет
 свой первый цикл шины, то  это  указывает  на  то,  что  в  системе
 используется  сопроцессор  типа  80387  (разряд  ET  в регистре CR0
 автоматически устанавливается в 1). В  обратном  случае  в  системе
 используется  сопроцессор  типа  80287  или не используется никакой
 (разряд ET в регистре CR0 автоматически устанавливается в  0).  См.
 5.5.3  Функционирование  шины  в  течение  и после действия сигнала
 RESET. Изменение сигнала  на  выходе  ERROR#  влияет  на  установку
 только  бита  ET.  Программно  устанавливаются необходимые значения
 битов EM и MP в регистре CR0. Следовательно, для различения  случая
 наличия  в  системе  сопроцессора  типа  80287  от  случая, когда в
 системе вообще нет  сопроцессора,  необходимо  программное  задание
 соответствующего   значения  бита  EM  в  регистре  CR0  (единичное
 значение бита EM устанавливается в  случае,  когда  в  системе  нет
 сопроцессора).  Если  анализ  изменения  состояния  сигнала  ERROR#
 показал наличие в системе 80387 (сигнал ERROR установлен  в  низкое
 состояние   после   сброса),   но  позднее  программно  установлено
 единичное состояние бита EM (EM=1), то 80386 ведет  себя  так,  как
 если бы в системе не было сопроцессора.
      
                      5.2.9 Сигналы прерывания
 
                           5.2.9.1 Введение
 
      В  этом  разделе  описываются  входные  сигналы, которые могут
 прерывать  или  приостанавливать  выполнение  процессором  текущего
 набора инструкций.
      
             5.2.9.2 Маскируемый запрос прерывания (INTR)
 
      Активный  уровень  этого входного сигнала обозначает запрос на
 обслуживание прерывания, которое может быть замаскировано битом  IF
 флагового  регистра  Flag Register 80386. В ответ на входной сигнал
 INTR 80386 выполняет два цикла подтверждения прерывания и  в  конце
 второго  цикла  "защелкивает" 8-битовый вектор прерывания, принятый
 по линиям D0-D7, чтобы идентифицировать источник прерывания.  80386
 анализирует  уровень  и  срабатывает по уровню сигнала INTR. Сигнал
 INTR может быть асинхронным по отношению к CLK2.  Для  того,  чтобы
 гарантировать    опознание    процессором    маскируемого   запроса
 прерывания, активный уровень сигнала INTR должен поддерживаться  до
 начала первого цикла подтверждения прерывания.
 
                                      - 84 -
      
      
            5.2.9.3 Немаскируемый запрос прерывания (NMI)
 
      Этот   входной   сигнал   определяет  запрос  на  обслуживание
 прерывания, которое не может быть программно замаскировано.  Запрос
 немаскируемого прерывания всегда обрабатывается по программе, адрес
 начала которой указан в элементе (позиции)  2  таблицы  прерываний.
 Когда  обрабатывается  NMI,  то  благодаря  фиксированному значению
 позиции   таблицы   прерываний,    соответствующей    NMI,    циклы
 подтверждения прерывания не выполняются.
      80386   анализирует и  срабатывает  по  положительному  фронту
 сигнала NMI. Сигнал NMI  может  быть  асинхронным  по  отношению  к
 сигналу  CLK2. Чтобы гарантировать опознание сигнала NMI, последний
 должен иметь неактивный уровень  по  меньшей  мере  в  течение  8-и
 периодов  CLK2,  и  затем  должен  быть установлен и поддерживаться
 активный уровень сигнала NMI по меньшей мере в течение 8-и периодов
 CLK2.
      Как только начинается обработка запроса прерывания NMI, другие
 запросы  NMI  обрабатываться  не  будут  до   появления   очередной
 инструкции  IRET,  которая  означает  конец  процедуры обслуживания
 прерывания NMI. Однако, если все-таки раньше  этого  времени  снова
 будет   сформирован   активный   уровень   сигнала   NMI,  то  один
 положительный фронт сигнала  NMI  будет  запомнен  для  последующей
 обработки после выполнения очередной инструкции IRET. 
      
      
      5.2.9.4  Сигнал сброса (установки в исходное состояние)(RESET) 
 
      Этот входной сигнал останавливает выполнение любой операции  и
 переводит  80386 в состояние, известное как состояние сброса. Сброс
 80386 производится установкой  активного  уровня  сигнала  RESET  в
 течение 15-и или более периодов CLK2 (за 78 или более периодов CLK2
 до запроса самодиагностирования). Когда установлен активный уровень
 сигнала   RESET,   сигналы   на   всех  остальных  входных  выводах
 игнорируются, а шинные выводы переводятся в нерабочее состояние как
 показано в табл.5-3. Если  одновременно установлены активные уровни
 сигналов RESET и HOLD, то более приоритетным  будет  сигнал  RESET.
 Сброс  по сигналу RESET будет произведен, даже если 80386 находился
 в состоянии подтверждения захвата до установки RESET.
      80386 анализирует  и  срабатывает  по  уровню  (активному  или
 неактивному)  сигнала RESET. Сигнал RESET может быть асинхронным по
 отношению с CLK2. Если необходимо, фаза  внутреннего  синхросигнала
 процессора,  а  также  целое  состояние  80386 могут быть полностью
 синхронизированы с внешними схемами,  если  обеспечить  необходимые
 для  этого  значения  времени установки t25 и времени удержания t26
 отрицательного фронта сигнала RESET.
 .
                                      - 85 -
            
            
         Таблица 5-3   Состояние выводов (неработающей шины)
                         в течение действия сигнала RESET
 
 -------------------------------------------------------------------
   Обозначение выводов     |  Уровни сигналов во время сброса RESET
 -------------------------------------------------------------------
            ADS#           |            Высокий
 -------------------------------------------------------------------
           D0-D31          | Третье состояние (высокий импеданс)
 -------------------------------------------------------------------
         BE0#-BE3#         |            Низкий
 -------------------------------------------------------------------
           A2-A31          |            Высокий
 -------------------------------------------------------------------
            W/R#           |            Высокий
 -------------------------------------------------------------------
            D/C#           |            Высокий
 -------------------------------------------------------------------
           M/IO#           |            Низкий
 -------------------------------------------------------------------
           LOCK#           |            Высокий
 -------------------------------------------------------------------
            HLDA           |            Низкий
 -------------------------------------------------------------------
                         
 .
                                      - 86 -
            
            
                      5.2.10   Список сигналов
     
      В табл.5-4  перечислены сигналы процессора 80386  и  приведены
 некоторые их характеристики.
      
               Таблица 5-4    Перечень сигналов 80386
      
 -------------------------------------------------------------------
  Название|   Функции   | Активный| Вход/ | Вход      | Переключает-
   сигнала|   сигнала   |  уровень| выход | синхронный| ся ли выход
          |             |         |       | или асинх-| в третье
          |             |         |       | ронный по | (высокоимпе-
          |             |         |       | отношению | дансное)
          |             |         |       | к CLK2    | состояние во
          |             |         |       |           | время дейст-
          |             |         |       |           | вия HLDA?
 -------------------------------------------------------------------
   CLK2   |Синхросигнал |    -    | Вход  |     -     |      -
 -------------------------------------------------------------------
  D0-D31  |Шина данных  | Высокий | Вход/ |     S     |     да
          |             |         | выход |           |
 -------------------------------------------------------------------
 BE0#-BE3#|Стробы данных| Низкий  | Выход |     -     |     да
 -------------------------------------------------------------------
  A2-A31  |Шина адреса  | Высокий | Выход |     -     |     да
 -------------------------------------------------------------------
   W/R#   |Указатель ре-| Высокий | Выход |     -     |     да
          |жима записи  |         |       |           |
          |или чтения   |         |       |           |
 -------------------------------------------------------------------
   D/C#   |Указатель об-| Высокий | Выход |     -     |     да
          |мена данными |         |       |           |
          |или упр. сиг-|         |       |           |
          |налами       |         |       |           |
 -------------------------------------------------------------------
  M/IO#   |Указатель об-| Высокий | Выход |     -     |     да
          |ращения к па-|         |       |           |
          |мяти или В/В |         |       |           |
 -------------------------------------------------------------------
   LOCK#  |Блокировка   | Низкий  | Выход |     -     |     да
          |шины         |         |       |           |
 -------------------------------------------------------------------
    ADS#  |Строб адреса | Низкий  | Выход |     -     |     да
 -------------------------------------------------------------------
    NA#   |Запрос сле-  | Низкий  | Вход  |     S     |     да
          |дующего адре-|         |       |           |
          |са           |         |       |           |
 -------------------------------------------------------------------
   BS16#  |16-разрядная | Низкий  | Вход  |     S     |     да
          |ширина шины  |         |       |           |
 -------------------------------------------------------------------
  READY#  |Передача     | Низкий  | Вход  |     S     |     да
          |подтверждения|         |       |           |
 -------------------------------------------------------------------
   HOLD   |Запрос на за-| Высокий | Вход  |     S     |     да
          |хват шины    |         |       |           |
 -------------------------------------------------------------------
   HLDA   |Подтверждение| Высокий | Выход |     S     |     нет
          |захвата шины |         |       |           |
 -------------------------------------------------------------------
 .
                                      - 87 -
            
            
 
                                    Продолжение таблицы 5-4
 -------------------------------------------------------------------
   PEREQ  |Запрос сопро-| Высокий | Вход  |     A     |     нет
          |цессора      |         |       |           |
 -------------------------------------------------------------------
   BUSY#  |Сопроцессор  | Низкий  | Вход  |     A     |     нет
          |занят        |         |       |           |
 -------------------------------------------------------------------
  ERROR#  |Ошибка сопро-| Низкий  | Вход  |     A     |     нет
          |цессора      |         |       |           |
 -------------------------------------------------------------------
    INTR  |Маскируемый  | Высокий | Вход  |     A     |     нет
          |запрос пре-  |         |       |           |
          |рывания      |         |       |           |
 -------------------------------------------------------------------
    NMI   |Немаскируемый| Высокий | Вход  |     A     |     нет
          |запрос преры-|         |       |           |
          |вания        |         |       |           |
 -------------------------------------------------------------------
   RESET  |Сброс        | Высокий | Вход  | A(примеча-|     нет
          |             |         |       |    ние)   |
 -------------------------------------------------------------------
      Примечание:  Если  фаза  внутреннего  синхросигнала процессора
 должна быть синхронизирована  с  внешними  схемами,  то  необходимо
 обеспечить  определенные  значения  времени установки t25 и времени
 удержания t26 отрицательного фронта сигнала RESET.
      
      
                   5.3  Механизм обмена по шине
      
                          5.3.1  Введение
 
      Все передачи данных  занимают  один  или  более  циклов  шины.
 Операнды  логических  данных  длиной  в байт, слово и двойное слово
 могут быть переданы без выравнивания физических адресов. Любой байт
 может  быть  краевым  байтом  (первым  или последним) передаваемого
 операнда, но при этом для передачи  невыровненного  операнда  может
 потребоваться  два  или  даже  три физических цикла шины. (См.5.3.4
 Изменяемый размер шины данных и 5.3.6 Невыровненные операнды.)
      Сигналы  адреса  80386  предусмотрены для упрощения аппаратуры 
 внешней системы. Старшие биты адреса  реализованы  линиями  A2-A31. 
 Младшие   биты   адреса   в  виде  BE0#-BE3#  обеспечивают  выборку 
 соответственно четырех  байтов  32-битной  шины  данных.  Благодаря 
 этому  физический  операнд представляется в каждом цикле в наиболее 
 удобной форме. 
      Активные уровни выходных  сигналов  стробов  данных  BE0#-BE3# 
 устанавливаются,  если  соответствующие  им байты шины данных будут 
 принимать участие в предстоящем цикле шины, как указано в табл.5-5. 
 Изменяя  комбинацию  установленных стробов данных можно осуществить 
 любой  вариант  выборки  смежных  байтов,  но  никакая   комбинация 
 BE0#-BE3#  не  позволит  выбрать байты, разделенные двумя или тремя 
 нефункционирующими байтами.                        
      Адресные биты A0-A1 физического  адреса  операнда  могут  быть 
 образованы,  когда необходимо (например, для интерфейсов Multibus I 
 и  Multibus  II),  как  функция   установленных   стробов   данных. 
 Соответствие  значений  A0  и  A1  сигналам  BE0#-BE3#  приведено в 
 табл.5-6. Логические  схемы  формирования  A0  и  A1  приведены  на 
 рис.5-3. 
 . 
                                      - 89 -
            
            
      Таблица 5-5.   Стробы данных и соответствующие им байты
                                данных и операндов
 -------------------------------------------------------------------
  Стробы данных   |     Соответствующие сигналы шины данных
 -------------------------------------------------------------------
     BE0#         |   D0-D7 (байт 0 - младший байт)
 -------------------------------------------------------------------
     BE1#         |   D8-D15 (байт 1)
 -------------------------------------------------------------------
     BE2#         |   D16-D23 (байт 2)
 -------------------------------------------------------------------
     BE3#         |   D24-D31 (байт 3 - старший байт)
 -------------------------------------------------------------------
      
           Таблица 5-6.  Формирование шины A0-A31 из шины
                                BE0#-BE3# и A2-A31
 -------------------------------------------------------------------
                       Адресные сигналы 80386
 -------------------------------------------------------------------
      A31 ......... A2      |  BE3#  |  BE2#   |  BE1#   |   BE0#
 -------------------------------------------------------------------
      |  Физический адрес   |        |         |         |
 ---------------------------|        |         |         |
  A31 | .....| A2 | A1 | A0 |        |         |         |
 -------------------------------------------------------------------
  A31 | .....| A2 | 0  | 0  |   X    |    X    |    X    | Низкий
 -------------------------------------------------------------------
  A31 | .....| A2 | 0  | 1  |   X    |    X    | Низкий  | Высокий
 -------------------------------------------------------------------
  A31 | .....| A2 | 1  | 0  |   X    | Низкий  | Высокий | Высокий
 -------------------------------------------------------------------
  A31 | .....| A2 | 1  | 1  | Низкий | высокий | Высокий | Высокий
 -------------------------------------------------------------------
      
      Рис.5-3   Логические схемы формирования A0, A1 как функций
                              сигналов BE0#-BE3#
 
      K - MAP for A1 Signal - карта Карно для сигнала A1.
      
      
      Каждый цикл шины включает в себя по меньшей мере два состояния
 шины.  Каждое  состояние  шины  занимает  по  времени  один  период
 тактовой  частоты  процессора.  Простейший  цикл  шины  может  быть
 дополнен состояниями шины, которые называются состояниями ожидания.
 См. 5.4  Описание функционирования шины.
      Поскольку  для выполнение цикла шины требуется как минимум два
 состояния  шины  (что  равняется  двум  периодам  тактовой  частоты
 процессора),   то   максимальная  скорость  передачи  данных  между
 внешними  устройствами  и  80386  равна одному 4-байтовому двойному 
 слову  в  каждые  два  периода  тактовой  частоты  процессора,  что
 соответствует   максимальной   пропускной   способности   шины   32
 мегабайт/сек (80386-16 работает на тактовой частоте 16 МГц).
 .
                                      - 90 -
            
            
                5.3.2  Пространства памяти и ввода/вывода
 
      В течение циклов шины возможно обращение к пространству памяти
 или к пространству ввода/вывода. Периферийные устройства в  системе
 могут быть отнесены либо к пространству памяти, либо к пространству
 ввода/вывода, или и к тому и к другому пространствам. Как  показано
 на  рис.5-4,  физические   адреса   памяти находятся в диапазоне от
 00000000H до FFFFFFFFH (4 гигабайта), а  адреса  ввода/вывода  -  в
 диапазоне от 00000000H до 0000FFFFH (64 килобайта), необходимом для
 адресации  устройств  ввода/вывода.  Отметим  адреса  ввода/вывода,
 используемые   в   автоматически   выполняемых  для  взаимосвязи  с
 сопроцессором циклах  ввода/вывода.  Эти  адреса  от  800000F8H  до
 800000FFH   не   входят   в   диапазон  вышеуказанных  адресов  для
 программной адресации  устройств  ввода/вывода  и  позволяют  легко
 сформировать  сигнал  выборки сопроцессора, используя сигналы A31 и
 M/IO#.
      
   FFFFFFFFH -------------            - - - - - - -
             |           |            |           |
             |           |           
             |           |            | неадресуе-|
             |           |                мое
             |           |            |           |
             |           |
             |           |            |           |
             |           |  800000FFH |-----------|  Сопроцессор
             | Физичес-  |  800000F8H |           |  (80387 или
             |  кая      | (Примеч.1) |-----------|    80287)
             |  память   |            |           |
             |           |              Неадресуе-
             | 4 гига-   |            |   мое     |
             |   байта   |
             |           |  0000FFFFH |-----------| Программно-
             |           |            | 64 Кбайта | -адресуемое 
             |           |            |           | пространство
   00000000H -------------  00000000H ------------- ввода-вывода
 
              Пространство             Пространство
              физической               ввода/вывода
              памяти
      
      Примечание:  Так  как  в  течение  автоматически   выполняемых
 циклов  взаимосвязи с сопроцессором устанавливается высокий уровень
 сигнала A31, то установка единичного уровня A31 и  нулевого  уровня
 строба формирования сигала выборки сопроцессора.
      
        Рис.5-4  Пространства физической памяти и ввода/вывода
 .
                                      - 91 -
            
            
      
              5.3.3  Организация памяти и ввода/вывода
 
      Ширина  магистрали  данных  от  80386 к пространствам памяти и
 ввода/вывода  может  составлять  32  бита  или  16  бит.  В  случае
 32-разрядной  ширины  магистрали пространства памяти и ввода/вывода
 организованы соответственно  как  массивы  физических  32-разрядных
 двойных  слов. Каждое двойное слово памяти или ввода/вывода состоит
 из 4-х индивидуально адресуемых (с помощью последовательных адресов
 байтов)  байтов. Самый меньший (из четырех) адрес байта относится к
 сигналам D0-D7; самый больший - к сигналам D24-D31.
      80386 имеет такой сигнал управления шиной, как BS16#,  который
 обеспечивает  правильную взаимосвязь с 16-разрядными пространствами
 памяти и ввода/вывода, организованными  в  виде  последовательности
 16-битных  слов.  Циклы  обмена  с  16-разрядными  и  32-разрядными
 устройствами памяти или  ввода/вывода  могут  встречаться  в  любой
 последовательности, так как состояние сигнала BS16# анализируется в
 течение каждого  цикла  шины.  См.  5.3.4  Изменяемый  размер  шины
 данных.  Сигналы  стробов  данных  BE0#-BE3# позволяют обращаться к
 отдельным  байтам  при  любой  структуре  памяти  или  ввода/вывода
 (32-разрядной или 16-разрядной).
      
      
                5.3.4  Изменяемый размер шины данных
 
      Изменяемый  размер  шины  данных  -  отличительная особенность
 80386,  обеспечиваютщая   непосредственную   связь   процессора   с
 32-разрядными   или   16-разрядными   шинами   данных   памяти  или
 ввода/вывода. Один процессор может  быть  соединен  с  шинами  двух
 размеров.  Передачи  в/из 32- или 16-разрядные порты сопровождаются
 определением в каждом цикле шины необходимой ширины шины. В течение
 каждого   цикла   шины  схема  дешифрации  адреса  или  подчиненное
 устройство сами могут установить активный уровень сигнала BS16# для
 16-разрядного порта, или неактивный уровень BS16# для 32-разрядного
 порта.
      Когда  установлен  активный  уровень  сигнала BS16#, процессор 
 автоматически вместо одной передачи разрядностью больше 16 бит  или 
 одной  16-разрядной  невыровненной  передачи  выполнит  две или три 
 передачи, как потребуется. При активном уровне BS16#  все  передачи 
 операндов   осуществляются   только   по   линиям  D0-D15.  Поэтому 
 16-разрядные устройства памяти или ввода/вывода обмениваются только 
 сигналами  данных  D0-D15. Специальных переключателей не требуется. 
 Действие активного уровня сигнала BS16# проявляется  только  тогда, 
 когда  в  текущем  цикле  шины установлены активные уровни сигналов 
 BE2# и/или BE3#. Если в передаче участвуют только линии D0-D15,  то 
 установка  активного  уровня BS16# не будет иметь значение, так как 
 передача  будет  производиться  все  равно  по  16-разрядной   шине 
 независимо от состояния BS16#. Другими словами, установка активного 
 уровня BS16# необязательна, когда только младшая половина  разрядов 
 шины участвует в текущем цикле. 
      Существуют  две  ситуации,  при  которых  проявляется  влияние
 активного  уровня  BS16#  на действия процессора, зависящие таже от
 значений стробов данных BE0#-BE3# в текущем цикле шины:
      - в обмене  участвует  только  старшая  половина  линий  шины:
 устанавливаются активные уровни только сигналов BE2# и/или BE3#;
      - в обмене участвуют и старшая, и младшая половины линий шины:
 устанавливаются активные уровни по меньшей  мере  сигналов  BE1#  и
 BE2# (и возможно также сигналов BE0# и/или BE3#).
      Воздействие  BS16#  на  циклы  чтения "с учетом только старшей
 половины линий шины":
 
                                      - 92 -
            
            
      Установка активного уровня BS16# в течение  циклов  чтения  "с
 участием   только   старшей  половины  линий  шины"  вынудит  80386
 считывать младшие 16 битов шины данных  и  игнорировать  данные  на
 старших 16 битах шины данных. Т.е. вместо считывания данных с линий
 D16-D31  в  соответствии  с  установленными  BE2#  и   BE3#   будут
 считываться данные с линий D0-D15.
      Взаимодействие  сигнала  BS16#  на  циклы  записи  "с участием
 только старшей половины линий шины":
      Установка активного уровня BS16# в течение  циклов  записи  "с
 участием только старшей половины" не отразится на процедуре записи.
 Когда в цикле записи  установлены  активные  уровни  сигналов  BE2#
 и/или  BE3#,  80386 всегда копирует сигналы данных D16-D31 на линии
 D0-D15  (см.  табл.  5-1).  Поэтому  не  требуется   дополнительных
 действий  80386  для  того, чтобы выполнить эти циклы записи по 32-
 или 16-разрядной шине.
      Воздействие сигнала  BS16#  на  циклы  чтения  "с  участием  и
 старшей и младшей половин шины":
      Установка  активного  уровня  сигнала  BS16#  в течение циклов
 чтения "с участием и  старшей  и  младшей  половин  шины"  заставит
 процессор  выполнить  два  16-разрядных  цикла  чтения для передачи
 всего  физического  операнда.  Байты  0  и  1  (в  соответствии   с
 установленными  BE0#  и  BE1#) будут считаны в первом цикле с линий
 D0-D15.  Байты  2 и 3 (в соответствии с установленными BE2# и BE3#)
 будут  считаны  во  втором цикле и снова с линий D0-D15. Сигналы на
 линиях D16-D31 игнорируются в течение  обоих  16-разрядных  циклов.
 BE0#  и  BE1#  всегда  находятся  в  неактивном состоянии в течение
 второго 16-разрядного цикла.
      Активный уровень сигнала BS16# необязательно устанавливать  на
 время второго 16-разрядного цикла. См. рис.5-14, циклы 2 и 2а.
      Воздействие  сигнала  BS16# (активного уровня) на циклы записи
 "с участием и старшей и младшей половин шины":
      Установка активного уровня  сигнала  BS16#  в  течение  циклов
 записи  "с  участием  и  старшей  и  младшей половин шины" заставит
 процесор 80386 выполнять два 16-разрядных цикла записи для передачи
 целого физического операнда. Наличие всех байтов операнда на линиях
 D0-D15 в течение первого цикла записи позволит внешним  устройствам
 получить  байты  0  и 1 (в соответствии с установленными значениями
 BE0# и BE1#) по линиям D0-D15.  Во  втором  цикле  80386  скопирует
 байты 2 и 3 на линии D0-D15, и запись этих байтов (в соответствии с
 установленными значениями BE2# и BE3#) будет произведена  также  по
 линиям   D0-D15.   Сигналы  BE0#  и  BE1#  всегда  переключаются  в
 неактивное  состояние  в  течение  второго   16-разрядного   цикла.
 Установка   активного   уровня  сигнала  BS16#  в  течение  второго
 16-разрядного цикла необязательна. См. рис.5-14, циклы 1 и 1а. 
      
      
         5.3.5  Связь с 32- и 16-разрядным устройствами памяти
 
      В  32-разрядных  устройствах  физической  памяти, таких как на
 рис.5-5,  каждое физическое двойное слово начинается с байта, адрес
 которого  кратен  4. Сигналы A2-A31 обычно используются для выборки
 определенного двойного слова, а сигналы  BE0#-BE3#  -  для  выборки
 определенного   байта  в  двойном  слове.  BS16#  поддерживается  в
 неактивном  состоянии  во   всех   циклах   шины,   оперирующих   с
 32-разрядным массивом.
      Когда в состав системы входят 16-разрядные физические массивы,
 как  показано  на  рис.5-6,  адрес   начала    каждого   16-битного
 физического  слова  кратен  2. Отметим, что схема дешифрации адреса
 ADDRESS DECODER при дешифрации адреса  формирует  активный  уровень
 сигнала   BS16#   только  в  течение  циклов  шины,  оперирующих  с
 
                                      - 94 -
            
            
 16-разрядными  устройствами  памяти,  то  схема  дешифрации  адреса
 анализирует   также  значения  сигналов  BE0#-BE3#  и  W/R#,  чтобы
 определить, когда должен быть установлен активный  уровень  сигнала
 BS16#.  См.  5.4.3.7  Оптимальное  использование метода конвейерной
 адресации в случае 16-разрядной ширины шины.
      Сигналы A2-A31 обычно используются для адресации  32-разрядных
 и  16-разрязных  устройств.  Для  адресации  16-разрядных устройств
 необходимы также сигнал A1 и два сигнала строба данных.
      Чтобы сформировать необходимые  значения  сигнала  A1  и  двух
 сигналов  стоба  данных  для  обращения к 16-разрядному устройству,
 сигналы BE0#-BE3# должен быть дешифрированы в соответствии с  табл.
 5-7. Отметим некоторые запрещенные комбинации BE0#-BE3#, никогда не
 вырабатываемые 80386. При наличии запрещенной комбинации  BE0#-BE3#
 на  входе  дешифратора  выходы  его не анализируются и состояние их
 обозначается  X.  Запрещенные  комбинации  BE0#-BE3#   могут   быть
 использованы при необходимости для более оптимального использования
 дешифратора.
 .
                                      - 95 -
            
            
      Таблица 5-7.  Формирование сигналов A1, BHE# и BLE# для
                         адресации 16-разрядных устройств
 -------------------------------------------------------------------
      Сигналы 80386         |  Сигналы 16-разрядной | Комментарии
                            |         шины          |
 ---------------------------|-----------------------|
  BE3# | BE2# | BE1# | BE0# | A1 | BHE# | BLE# (A0) |   
 -------------------------------------------------------------------
   H*  |  H*  |  H*  |  H*  | X  |  X   |     X     | X - нет ни 
       |      |      |      |    |      |           | одного актив-
       |      |      |      |    |      |           | ного байта
 -------------------------------------------------------------------
   H   |  H   |  H   |  L   | L  |  H   |     L     |
 -------------------------------------------------------------------
   H   |  H   |  L   |  H   | L  |  L   |     H     |
 -------------------------------------------------------------------
   H   |  H   |  L   |  L   | L  |  L   |     L     |
 -------------------------------------------------------------------
   H   |  L   |  H   |  H   | H  |  H   |     L     |
 -------------------------------------------------------------------
   H*  |  L*  |  H*  |  L*  | X  |  X   |     X     | X - несмежные
       |      |      |      |    |      |           |      байты
 -------------------------------------------------------------------
   H   |  L   |  L   |  H   | L  |  L   |     H     |
 -------------------------------------------------------------------
   H   |  L   |  L   |  L   | L  |  L   |     L     |
 -------------------------------------------------------------------
   L   |  H   |  H   |  H   | H  |  L   |     H     |
 -------------------------------------------------------------------
   L*  |  H*  |  H*  |  L*  | X  |  X   |     X     | X - несмежные
       |      |      |      |    |      |           |      байты
 -------------------------------------------------------------------
   L*  |  H*  |  L*  |  H*  | X  |  X   |     X     | X - несмежные
       |      |      |      |    |      |           |      байты
 -------------------------------------------------------------------
   L   |  L   |  H   |  H   | H  |  L   |     L     |
 -------------------------------------------------------------------
   L*  |  L*  |  H*  |  L*  | X  |  X   |     X     | X - несмежные
       |      |      |      |    |      |           |      байты
 -------------------------------------------------------------------
   L   |  L   |  L   |  H   | L  |  L   |     H     |
 -------------------------------------------------------------------
   L   |  L   |  L   |  L   | L  |  L   |     L     |
 -------------------------------------------------------------------
      BLE#  устанавливается  (активный уровень) когда активизируются
            разряды D0-D7 16-разрядной шины.
      BHE# устанавливается (активный уровень)  когда  активизируются
           разряды D8-D15 16-разрядной шины.
      A1 имеет низкий уровень для всех четных слов; A1 имеет высокий
 уровень для всех нечетных слов. 
      
      Обозначения:  X  -  допустим  и  высокий  и  низкий логический
                          уровень; 
                    H - высокий логический уровень;
                    L - низкий логический уровень;
                    * - неиспользуемые комбинации BE0#-BE3#:
      - комбинация, когда все стробы данных находятся  в  неактивном
        состоянии;
      -  комбинации стробов данных, при которых появляются несмежные
         активные байты.
 
                                      - 97 -
            
      
      
                     5.3.6  Выравнивание операндов
 
      Благодаря гибкой адресации памяти в  80386  возможна  передача
 логического   операнда,   разрядность  которого  больше  слова  или
 двойного слова  памяти  или  ввода/вывода,  например  32-разрядного
 операнда  (двойное  слово),  адрес  начала которого некратен 4, или
 16-разрядного   операнда   (слово),   разделенного   между    двумя
 физическими двойными словами массива памяти.
      Когда  передача операнда требует выполнения нескольких циклов,
 то  во  время  этих  циклов  выполняется  выравнивание   данных   и
 определение  размера  шины. Таблица 5-8 описывает определение типов
 циклов передачи для всех комбинаций таких характеристик, как  длина
 логического  операнда, выравнивание и ширина шины данных. Когда для
 передачи многобайтового логического  операнда  требуется  несколько
 циклов   шины,   то  первыми  передаются  старшие  байты  (но  если
 установлен  активный  уровень  BS16#,  то   будут   выполнены   два
 16-разрядных цикла, причем первыми будут переданы младшие байты).
      
      Таблица 5-8.  Циклы передачи байтов, слов и двойных слов
 -------------------------------------------------------------------
                 |       Длина логического операнда в байтах
                 |--------------------------------------------------
                 |  1   |           2         |          4
 -----------------------|---------------------|---------------------
  Адрес байта фи-| XX   | 00  | 01 | 10 | 11  | 00  | 01 | 10 | 11
  зической памяти|      |     |    |    |     |     |    |    |
  (младшие два   |      |     |    |    |     |     |    |    |
  байта)         |      |     |    |    |     |     |    |    |
 -------------------------------------------------------------------
  Циклы передачи |  b   |  W  | W  | W  | hb, |  d  | hb,| hw,| h3,
  по 32-разрядной|      |     |    |    | lb  |     | l3 | lw | lb
  шине данных    |      |     |    |    |     |     |    |    |
 -------------------------------------------------------------------
  Циклы передачи |  b   |  W  |lb,*| W  | hb,*| lw,*| hb,| hw,| mw,*
  по 16-разрядной|      |     |hb* |    | lb* | hw* |lb,*| lw | hb,*
  шине данных    |      |     |    |    |     |     | mw*|    | lb
 -------------------------------------------------------------------
                 
      Обозначения:  b = передача байта
                    w = передача слова
                    l = младшая часть операнда
                    m = средняя часть операнда
                    х = не используется
                    * = активный уровень BS16# вызывает выполнение
                        второго цикла шины
                    3 = передача 3-х байтов
                    d = передача двойного слова
                    h = старшая часть операнда
      
      
                 5.4  Описание функционирования шины
 
                             5.4.1 Введение
 
      80386  имеет  отдельные  параллельные шины: шину адреса и шину
 данных. Шина данных - 32-разрядная и двунаправленная.  Ширина  шины
 адреса  - 32 разряда: из них 30 старших разрядов - адрес операнда и
 2 разряда формируются из 4-х  сигналов  стробов  данных  каждый  из
 
                                      - 98 -
 
 
 которых  служит  для выборки соответствующего байта в операнде. Эти
 шины анализируются и управляются соответствующими  им  управляющими
 сигналами.
      Тип  каждого  цикла  шины определяется тремя сигналами: M/IO#,
 W/R#  и  D/C#.  Одновременно  с  этими  сигналами   устанавливается
 достоверный  адрес  на  линиях  BE0#-BE3#  и  A2-A31. Сигнал строба
 адреса указывает на выдачу процессором 80386 нового типа цикла шины 
 и адреса.
      Объединенные шина адреса, шина данных и все связанные  с  ними
 управляющие сигналы называются в тексте просто "шиной".
      В  рабочем  состоянии шина выполняет один из нижеперечисленных
 циклов шины:
      1) чтение из памяти;
      2) чтение из памяти с блокировкой шины;
      3) запись в память;
      4) запись в память с блокировкой шины;
      5) чтение из устройства ввода/вывода (или из сопроцессора);
      6) запись в устройство ввода/вывода (или в сопроцессор);
      7) подтверждение прерывания;
      8) цикл останова или цикл выключения.
      Табл.   5-2   показывает   соответствие   комбинаций  сигналов
 определения типа шины каждому типу шины. См. параграф 5.2.5 Сигналы
 определения типа цикла шины.
      Отличительной   чертой  шины  данных  является  ее  изменяемая
 ширина, которая может быть 32-разрядной и 16-разрядной. Ширина шины
 данных указывается процессору 80386 его входным сигналом BS16#. Все
 функции шины могут быть выполнены при любой ширине шины.
      Когда шина 80386 не выполняет  ни  один  из  вышеперечисленных
 циклов,  она  находится  или  в нерабочем состоянии или в состояние
 подтверждения захвата шины, последнее может  быть  вызвано  внешней
 схемой.
      Нерабочее  состояние  шины  может  иметь место, когда 80386 не
 выдает дальнейших подтверждений на свой выход строба адреса  (ADS#)
 после начала текущего цикла, и потому текущий цикл будет последним.
 Состояние подтверждения захвата  шины  идентифицируется  установкой
 процессором  80386  активного  уровня на своем выходе подтверждения
 захвата (HLDA). 
      Самой короткой временной единицей деятельности  шины  является
 состояние шины. Деятельность состояния шины составляет один  период
 тактовой частоты процессора (два периода CLK2).
      Законченная  передача  данных  осуществляется  в течение цикла
 шины, состоящего из двух или более состояний шины.
      Самый короткий цикл шины 80386 состоит из двух состояний шины.
 Состояния  шины  в  каждом  цикле обозначены как Т1 и Т2. В течение
 такого цикла шины (из 2-х состояний) может быть выполнено обращение
 по  любому  адресу памяти или ввода/вывода, если внешняя аппаратура
 обладает   достаточным    быстродействием.    Высокая    пропускная
 способность  шины  и  цикл  шины,  занимающий  два периода тактовой
 частоты, наиболее  полно  реализуют  возможности  быстрой  основной
 памяти или кэш-памяти.
      Каждый   цикл   шины   длится  до  тех  пор,  пока  не  придет
 подтверждение от внешних устройств системы, использующих  для  этой
 цели  вход  80386  READY#.  Если  подтверждение  цикла  шины  будет
 сформировано в конце первого из  состояний  Т2,  то  это  определит
 выполнение  самого  короткого  цикла шины, состоящего всего из двух
 состояний Т1 и Т2. Однако, если активный уровень сигнала READY#  не
 будет  установлен сразу (в конце первого Т2), то состояния Т2 будут
 неограничено повторятся до тех пор, пока на входе READY#  процессор
 не обнаружит активный уровень.
 
                                      - 100 -
            
      
                     5.4.2  Конвейерная адресация
      
      Режим    конвейерной   адресации   обеспечивает   определенные
 протоколы цикла шины.
      Протокол конвейерной или неконвейерной адресации выбирается на
 основе  совмещения  циклов с использованием входа следующего адреса
 (NA#).
      В режиме неконвейерной адресации текущий  адрес  и  тип  цикла
 шины остаются постоянными в течение всего цикла шины.
      В режиме конвейерной адресации адрес (BE0#-BE3#, A2-A31) и тип
 цикла для  следующего  цикла  устанавливаются  и  выдаются  еще  до
 окончания  текущего  цикла. Чтобы сигнализировать об их готовности,
 80386 устанавливает также активный уровень на выходе строба  адреса
 (ADS#).  Рис.5-9  иллюстрирует  самые быстрые циклы чтения в режиме
 конвейерной адресации. Из рис.5-9   следует,   что  самые  короткие
 циклы шины, использующие метод конвейерной адресации, состоят всего
 из  двух  состояний  шины,  обозначенных  Т1Р и Т2Р. Следовательно,
 циклы с конвейерной адресацией  обеспечивают  такую  же  пропускную
 способность  данных,  как  и  циклы  с неконвейерной адресацией, но
 время выборки адреса увеличивается по  сравнению  с  неконвейерными
 циклами.
      Из-за  увеличения  времени  выборки  адреса  режим конвейерной
 адресации  сокращает  требуемое  количество   состояний   ожидания.
 Например,  если  в  режиме  конвейерной  адресации  требуется  одно
 состояние ожидания, то в  режиме  конвейерной  адресации  может  не
 потребоваться ни одного состояния ожидания.
      Режим  конвейерной адресации используеется в системах, имеющих
 адресные "защелки". В таких системах, сразу "защелкивающих"  адрес,
 конвейерная  выдача  следующего адреса позволяет декодирующей схеме
 заранее  сформировать  сигналы  включения   микросхем   (и   другие
 необходимые   сигналы   выборки),  поэтому  обращение  к  выбранным
 устройствам осуществляется сразу, как только  начинается  следующий
 цикл.  Другими  словами,  время  декодирования для следующего цикла
 может частично перекрываться с окончанием текущего цикла.
      Если в состав системы входит память с расслоением,  имеющая  2
 или более банков, то метод конвейерной адресации возможно обеспечит
 даже большее перекрытие циклов. Вышесказанное действительно,  когда
 контроллер памяти с расслоением устроен так, чтобы позволить начать
 следующую операцию с памятью в одном банке памяти в то  время,  как
 текущий  цикл  шины еще оперирует с другим банком памяти.  Рис.5-10
 показывает основную структуру  взаимосвязи  80386  с  2-банковой  и
 4-банковой памятью с расслоением. Отметим, что каждый банк памяти с
 расслоением имеет шину данных  полной  ширины  (обычно  разрядность
 данных  составляет  32  бита,  если не задается 16-разрядная ширина
 шины).
      Дополнительные сведения о режиме крнвейерной адресации даны  в
 параграфах  5.4.3.4  Конвейерная адресация, 5.4.3.5 Инициализация и
 поддержание режима конвейерной адресации, 5.4.3.6 Конвейерный адрес
 при изменении  ширины  шины  и  5.4.3.7  Оптимальное  использование
 конвейерного адреса в случае 16-разрядной ширины шины.
      
      
                   5.4.3  Циклы чтения и записи
      
                         5.4.3.1 Введение
      
      Передачи данных осуществляется посредством  выполнения  циклов
 шины,  которые  подразделяются  на циклы чтения и циклы записи. При
 выполнении циклов чтения данные передаются от внешнего устройства в
 
                                      - 102 -
            
            
 процессор.   При  выполнении  циклов  записи  данные  передаются  в
 обратном направлении: от процессора к внешнему устройству.
      Два варианта адресации попеременно  избираются:  неконвейерная
 адресация   или   конвейерная.   После  нерабочего  состояния  шины
 процессор всегда работает в режиме неконвейерной адресации. Однако,
 может   быть  установлен  активный  уровень  входного  сигнала  NA#
 (следующий  адрес),  избирающий  режим  конвейерной  адресации  для
 следующего  цикла шины. Когда выбран режим конвейерной адресации, и
 в процессоре  имеется  ожидающий  обслуживвания  внутренний  запрос
 шины, достоверные адрес и тип цикла для следующего цикла шины будут
 выданы даже до получения подтверждения текущего цикла шины на входе
 READY#. В каждом цикле шины 80386 обязательно анализирует состояние
 сигнала  на  входе  NA#,   чтобы   определить   способ   адресации,
 необходимый для следующего цикла.
      Попеременно  избираются  два  варианта размера физической шины
 данных: 32 бита или 16 битов. Обязательно ближе к концу цикла  шины
 состояние  входного  сигнала BS16# (размер шины 16) анализируется с
 целью установления размера физической шины данных,  необходимого  в
 текущем   цикле.   Высокий   уровень  сигнала  BS16#  указывает  на
 32-разрядный размер, активный уровень (низкий) BS16#  указывает  на
 16-разрядный размер. Если указан 16-разрядный размер шины, то 80386
 автоматически  реагирует  на  это  соответствующим  образом,  чтобы
 завершить  передачу  по  16-разрядной шине данных. В зависимости от
 размера  и  расположения  операнда   может   потребоваться   второй
 16-разрядный  цикл  шины.  Подробно  об  этом  см. табл. 5-7. Когда
 необходимо, 80386 выполняет дополнительный 16-разрядный цикл  шины,
 используя линии D0-D15 для передачи разрядов D16-D31.
      Для  завершения  цикла  чтения  или  цикла записи, также как и
 любого  другого  цикла   шины,   требуется   подтверждение   цикла,
 устанавливаемое   на   входе  READY#.  До  получения  подтверждения
 процессор  вводит   в   цикл   шины   состояние   ожидания,   чтобы
 соответствовать   быстродействию   внешнего   устройства.   Внешнее
 устройство, распознавшее свой  адрес  и  декодировавшее  тип  цикла
 шины,  формирует  в соответствующий момент активный уровень сигнала
 READY#.
      Сигнал READY# анализируется во втором  состоянии  цикла  шины.
 Если  в  это  же  время  внешняя  аппаратура подтверждает цикл шины
 установкой активного уровня READY#, то цикл шины  завершается,  как
 показано на рис.5-11.
      Если  во  втором  состоянии  шины  сигнал  READY#  остается  в
 неактивном  состоянии,  как  показано   на   рис.5-12,  цикл   шины
 дополняется  еще  одним  состоянием (состоянием ожидания), и сигнал
 READY# будет снова анализироваться в конце каждого такого состояния
 ожидания.  Так  будет  продолжиться  неограниченно до тех пор, пока
 цикл не получит подтверждения по линии READY#.
      Когда процессор  получает  подтверждение  текущего  цикла,  он
 завершает    его.   Когда   подтверждается   цикл   чтения,   80386
 "защелкивает" информацию, сформированную к этому времени на выводах
 шины  данных  процессора.  Когда  подтверждается цикл записи, 80386
 поддерживает достоверное значение  записываемых  данных  в  течение
 первой  фазы  следующего  цикла  шины, чтобы обеспечить необходимое
 значение времени удержания записываемых данных.
      
      
                 5.4.3.2  Неконвейерная адресация
      
      Любой  цикл  шины  может  быть выполнен в режиме неконвейерной 
 адресации. Для примера,  на  рис.5-11  показана  последовательность 
 циклов  чтения  и  записи  в  режиме  неконвейерной  адресации.  Из 
 рис.5-11  следует,  что  самые  короткие  циклы, возможные в режиме 
  
                                      - 106 -
            
            
 неконвейерной адресации, состоят каждый  из  двух  состояний  шины.
 Состояния  обозначены  как  Т1  и  Т2.  В  первой фазе состояния Т1
 выдаются  достоверные   значения   сигналов   адреса   и   сигналов
 определения   типа   цикла  шины,  и  одновременно  устанавливается
 активный уровень сигнала строба адреса  (ADS#),  сигнализирующий  о
 готовности вышеперечисленных сигналов.
      В  течение  циклов чтения или записи шина данных фкнкционирует
 как описано ниже. В цикле чтения 80386 переключает свою шину данных
 таким  образом,  чтобы  принять  сигналы  данных  от  адресованного
 внешнего устройства.  В  цикле  записи  сигналы  данных  передаются
 процессором  80386,  начиная со второй  фазы  состояния Т1 и кончая
 первой фазой состояния шины, которое будет установлено сразу  после
 получения подтверждения цикла.
      Рис.5-12   иллюстрирует   циклы  шины  в  режиме неконвейерной
 адресации, причем циклы 2 и 3 дополнены одним состоянием  ожидания.
 В  циклах  2  и 3 сигнал READY# оказался неустановленным в активное
 состояние  Т2.  В  этих  циклах  активный  уровень  сигнала  READY#
 устанавливается в конце второго из состояний Т2. 
      Когда   не  используется  конвейерная  адресация,  достоверные
 значения адреса и  типа  цикла  шины  сохраняются  в  течение  всех
 состояний  ожидания. Когда цикл дополняется состояниями ожидания, и
 необходимо обеспечить  режим  неконвейерной  адресации,  неактивный
 (высокий)  уровень  сигнала  NA# должен устанавливаться  в  течение
 каждого из состояний Т2,  исключая  самое  последнее  состояние  Т2
 цикла, как показано  на  рис.5-12  в  циклах  2 и 3.  Если активный
 уровень  NA#  окажется  установленным  в  состояние  Т2  (но  не  в
 последнем  Т2),  то  следующим состоянием, вместо состояния Т2 (для
 неконвейерной адресации),  будет  состояние  Т2i  (для  конвейерной
 адресации) или Т2p (для конвейерной адресации).
      Рис.5-13  наиболее полно иллюстрирует картину состояний шины и
 переходов из состояния в состояние для  случая,  когда  конвейерная
 адресация  не  используется.  Показанные  переходы  шины между 4-мя
 возможными состояниями: Т1,  Т2,  Тi  и  Тh.  Циклы  шины  содержат
 состояния   Т1   и  Т2,  причем  Т2  может  повторяться  (состояния
 ожидания).  Кроме  этого,  шина  может   находиться   в   нерабочем
 состоянии,  т.е.  в  состоянии  Тi,  или  в состоянии подтверждения
 захвата шины, т.е. в состоянии Тh. 
      Для  случая,  когда  конвейерная  адресация  не  используется,
 диаграмма  состояния  шины  такая,  как  показана  на  рис.5-13.  В
 нерабочем   состоянии  шина  находится  в  Тi.  Циклы  шины  всегда
 начинаются с Т1. Т1 всегда предшествует  состоянию  Т2.  Если  цикл
 шины не подтвержден в течение Т2 и уровень NA# при этом неактивный,
 состояние Т2 повторяется. Когда цикл подтвержден в течение  Т2,  то
 за  этим последует состояние Т1 следующего цикла шины, если имеется
 ожидающий обслуживания внутренний запрос  шины  (запрос  на  захват
 шины самим процессором), или состояние Тi, если такого запроса нет,
 или состояние Тh, если установлен активный уровень входного сигнала
 HOLD.
      Диаграмма  состояния  шины  на рис.5-13  справедлива при любом
 значении   сигнала   BS16#.   Если   80386   выполнит    внутренние
 переключения, необходимые для установки 16-разрядного размера шины,
 то эти переключения не повлияют на состояния внешней шины. Если для
 выполнения  передачи  по 16-разрядной шине требуется дополнительный
 16-разрядный цикл шины, он также будет выполняться в соответствии с
 переходами состояний, показанными на рис.5-13.
      В режиме конвейерной адресации в 80386  могут  иметь  еще  три 
 типа  состояния  шины,  не  показанные  на  рис.5-13. На рис.5-20 в 
 параграфе 5.4.3.4 "Конвейерная адресация" показана более  подробная 
 диаграмма  состояния  шины,  включающая  циклы в режиме конвейерной 
 адресации. 
  
                                      - 108 -
            
            
      Состояния шины:
      Т1  - первое состояние неконвейерного цикла шины (80386 выдает
      новый адрес и устанавливает активный уровень ADS#);
      Т2 - последующие состояния цикла  шины,  когда  при  просмотре
      сигнала  NA#  в текущем цикле шины он оказывается в неактивном
      состоянии; 
      Тi - нерабочее состояние;
      Тh - состояние подтверждения захвата шины (80386 устанавливает
      активный уровень HLDA).
      Самый короткий цикл шины состоит из двух состояний: Т1 и Т2.
      Четыре  основные  состояния  шины  описывают  функционирование
 шины, когда не используется конвейерная  адресация.  Эти  состояния
 распространяются  на  оба  размера  шины:  32  бит  и  16 бит, т.е.
 справедливы для любого значения BS16#.  Если  при  активном  уровне
 сигнала  BS16#  требуется  выполнение  второго 16-разрядного цикла,
 последний  выполняется  перед  формированием  процессором   сигнала
 подтверждения захвата шины.
      
      
         5.4.3.3  Режим неконвейерной адресации при изменении 
                           размера шины данных 
      
      Ширина физической магистрали данных для любого  неконвейерного
 цикла  шины  может  составлять  или  32 разряда, или 16 разрядов. В
 начале цикла шины процессор ведет себя так, как если бы ширина шины
 данных   составляла   32   бита.  Когда  цикл  шины  подтверждается
 установкой активного уровня сигнала READY# в конце состояния Т2, то
 анализируемый  в  этот  момент  уровень  сигнала  BS16#  окажется в
 неактивном состоянии, то размер физической шины данных  принимается
 равным  32 разрядам. Если же наблюдается активный уровень BS16#, то
 размер шины принимается равным 16 разрядам.
      Когда установлен активный  уровень  BS16#,  и  для  выполнения
 одной  передачи  требуется  два  16-разрядных  цикла,  то  активный
 уровень сигнала BS16# должен быть установлен  и  во  втором  цикле.
 Иначе  16-разрядный  размер шины не будет сохранен во втором цикле.
 Также, как и любой  другой  цикл  шины,  второй  16-разрядный  цикл
 должен быть подтвержден установкой активного уровня READY#.
      Когда  требуется второй 16-разрядный цикл для выполнения одной
 передачи по 16-разрядной шине,  то  адреса,  формируемые  для  двух
 16-разрядных циклов шины, тесно взаимосвязаны. Эти адреса идентичны
 за исключением разрядов BE0# и BE1#, которые всегда переключаются в
 неактивное  состояние  (высокий  уровень)  во втором цикле, так как
 сигналы данных D0-D15 были уже переданы в первом 16-битном цикле. 
      На рис.5-14 и 5-15 показаны передачи,  при  которых  установка 
 активного   уровня  BS16#  требует  второго  16-битного  цикла  для 
 выполнения передачи всего операнда. Рис.5-14 иллюстрирует циклы без 
 состояний  ожидания. Рис.5-15 иллюстрирует циклы с одним состоянием 
 ожидания. Отметим, что в цикле 1 на рис.5-15,  в  течение  которого 
 устанавливается  активный  уровень сигнала BS16#, сигнал NA# должен 
 быть обязательно переключен в неактивный  уровень  в  состоянии(ях) 
 Т2,  предшествующем(их) последнему состоянию Т2. Это необходимо для 
 того,  чтобы  в  финальном   состоянии   Т2   процессор   воспринял 
 установленный   активный   уровень  BS16#  в  режиме  неконвейерной 
 адресации. 
      
      
                   5.4.3.4  Конвейерная адресация
      
      В   режиме   конвейерной  адресации  адрес  и  тип  цикла  для
 следующего цикла шины, который будет обслуживать ждущий  обработки,
 
                                      - 111 -
            
            
 внутреннии  запрос процессора, запрашиваются еще до того, как будет
 получено  подтверждение  текущего  цикла  по  линии  READY#.  Когда
 следующий  адрес  подготовлен и выдан, 80386 устанавливает активный
 уровень  сигнала  ADS#.  Протокол  режима   конвейерной   адресации
 строится  на  основе совмещения циклов и с помощью входного сигнала
 NA#.
      Когда выполняется цикл  шины  и  текущий  адрес  должен  иметь
 достоверное  значение  в  течение  по  меньшей  мере одного полного
 состояния шины, значение входного сигнала NA# анализируется в конце
 каждой  первой фазы состояния до тех пор, пока цикл шины не получит
 подтверждение.  В течение неконвейерных циклов шины, следовательно,
 NA# анализируется в  конце  первой  фазы  в  каждом  состоянии  Т2.
 Примером  может служить Цикл 2 на рис.5-16, в  течение которого NA#
 анализируется в конце первой фазы каждого Т2 (NA# был установлен  в
 активный  уровень  один  раз  в  течение  первого состояния Т2 и не
 оказывает дальнейшего воздействия на выполнение этого цикла шины).
      Если процессор при просмотре NA#  обнаружит  активный  уровень
 этого  сигнала,  то  80386  освобождается, чтобы выдать адрес и тип
 цикла следующего цикла, и установить активный уровень сигнала ADS#,
 как  только в процессоре появится ожидающий обслуживания внутренний
 запрос шины. Процессор может выдать следующий адрес уже в следующем
 состоянии  шины,  независимо  от  того  получил  ли  в  этот момент
 подтверждение текущий цикл или не получил.
      Что касается режима конвейерной адресации, то  в  этом  режиме
 80386 имеет следующие особенности:
      1)  для  того,  чтобы  процессор  воспринял  активный  уровень
 сигнала NA#, сигнал  BS16#  должен  быть  переключен  в  неактивный
 уровень  на время просмотра сигнала  NA# (см. рис.5-16 Циклы 3 и 4;
 рис.5-17 Циклы 2-4);
      В том случае, если сигналы NA# и BS16# окажутся оба  активными
 в  течение  последнего  периода  Т2  цикла  шины, приоритетом будет
 обладать активный сигнал BS16#.  Следовательно,  если  оба  сигнала
 активны,  то  текущий размер шины принимается равным 16 разрядам, а
 следующий  адрес   будет    неконвейерным.    Схематично   рис.5-18
 показывает внутреннюю логику 80386, обеспечивающую эти особенности.
      2) следующий адрес может появиться в состоянии шины, следующем
 сразу после момента обнаружения активного уровня NA#  (см. рис.5-16
 или 5-17);
      В  этом  случае  сразу  шина перейдет в состояние Т2p. Однако,
 если в этот момент отсутствует  ожидающий  обслуживания  внутренний
 запрос  шины,  то  следующий  адрес не будет установлен сразу после
 активизации NA#, и вместо состояния Т2p шина перейдет  в  состояние
 Т2i  (см. рис.5-19 Цикл 3).  При условии, что текущий цикл шины еще
 не получил подтверждение по линии READY#, шина перейдет в состояние
 Т2p  как  только  80386 выдает следующий адрес. Внешние устройства,
 поэтому, должны  следить  за  состоянием  выходного  сигнала  ADS#,
 подтверждающим выдачу на шину достоверного следующего адреса.
      3)  в том случае, когда 80386 при просмотре обнаружит активный 
 уровень NA#, 80386 сам принимает  решение  на  обслуживание  самого 
 приоритетного  внутреннего  запроса  шины, ожидающего обслуживания. 
 Процессор не сможет больше выполнить другую  16-разрядную  передачу 
 по  тому  же  адресу,  даже  если BS16# будет установлен в активный 
 уровень внешним устройством, так как после  восприятия  процессором 
 активного  сигнала  NA# текущий размер шины принимается равным 32-м 
 разрядам; 
      Следовательно, если процессор опознал активный  сигнал  NA#  в
 течение цикла шины, то после этого сигнал BS16# игнорируется в этом
 цикле  шины (см. рис.5-16,  5-17,  5-19).  Таким  образом,  нельзя
 активизировать сигнал NA# в тех циклах шины, в которых 16-разрядный
 размер шины должен быть задан установкой активного  уровня  сигнала
 
                                      - 116 -
            
            
 BS16#.  См.  5.4.3.6  "Изменение  размера шины в режиме конвейерной
 адресации". 
      4)  любой  адрес,  достоверное  значение которого подтверждено
 выходным импульсным  сигналом  80386  ADS#,  будет  сохраняться  на
 адресных  выводах  в течение по меньшей мере двух периодов тактовой
 частоты процессора. 80386 не может выдавать новый адрес  чаще,  чем
 каждые  два  периода  тактовой  частоты  процессора  (см. рис.5-16,
 5-17, 5-19);
      5) из всех сигналов, необходимых для  следующего  цикла  шины,
 процессор выдает только адрес и тип цикла шины; 
      Уровень  совмещения  в  режиме конвейерной адресации не более,
 чем один цикл шины (см. рис.5-19 Цикл 1).
      Полная   диаграмма   переходов   состояний    шины,    включая
 функционирование в режиме конвейерной адресации, дана  на рис.5-20.
 Отметим, что эта диаграмма включает диаграмму, справедливую  только
 для  режима неконвейерной адресации, и дополнительные три состояния
 шины для режима конвейерной адресации.
      Самый  короткий  цикл  шины  в  режиме  конвейерной  адресации
 состоит только из двух состояний шины, Т1p и Т2p (напомним, что для
 режима  неконвейерной   адресации   такими   состояниями   являются
 состояния   Т1   и   Т2).   Т1p  является  первым  состоянием  шины
 конвейерного цикла. 
      
      
        5.4.3.5 Инициализация и поддержание режима конвейерной
                                адресации
      
      Пользуясь диаграммой состояний на рис.5-20, проследим переходы 
 шины  из  нерабочего состояния Тi, в начало конвейерного цикла шины 
 Т1p. Цикл шины, первый после нерабочего состояния шины  Тi,  должен 
 начинаться   с   состояния   Т1,   следовательно  этот  цикл  будет 
 неконвейерным. Однако, если будет установлен активный уровень  NA#, 
 и  первый  цикл  шины закончится в состоянии Т2p, то следующий цикл 
 шины будет конвейерным (адрес для следующего цикла шины выдается  в 
 состоянии   Т2p  первого  цикла).  Кратчайший  путь  от  нерабочего 
 состояния к циклу шины с конвейерной адресацией показан ниже: 
      
          Тi,Тi,Тi       Т1-Т2-Т2p           Т1p-Т2p
          нерабочее     неконвейерный       конвейерный
          состояние        цикл                цикл
      
      Т1-Т2-Т2p   -   состояние   цикла   шины,   в  течение  корого
 устанавливается адрес  (конвейерный)  для  следующего  цикла  шины,
 начинающегося  с  состояния  Т1p.  Переход  к конвейерному циклу из
 состояния подтверждения захвата шины  осуществляется  аналогично  и
 показан ниже:
      
         Тh,Тh,Тh         Т1-Т2-Т2p        Т1p*Т2p
         состояние        неконвейерный    конвейерный
         подтверждения        цикл            цикл
         захвата
      
      Переход  к  ковейерной  адресации показан на рис.5-17  Цикл 1.
 Цикл 1 используется для перехода в режим конвейерной адресации  для
 выполнения  последовательности  конвейерных  циклов  2,  3  и  4. В
 соответствующий момент устанавливается  активный  уровень  NA#  для
 того, чтобы выбрать конвейерный адрес для циклов 2, 3 и 4.
      Когда  выполняется  цикл шины, и достоверное значение текущего
 адреса удерживается в  течение  одного  состояния  шины,  состояние
 входа NA# анализируется в конце каждой первой фазы до тех пор, пока
 
                                      - 118 -
            
            
 этот цикл не получит подтверждение. Следовательно,  в  Цикле  1  на 
 рис.5-17 процессор начинает анализ NA# в состоянии Т2. Как только в 
 текущем цикле NA# оказывается  установленным  в  активный  уровень, 
 80386  освобождается,  чтобы выдать на шину новый адрес и тип цикла 
 до  начала  следующего  состояния  шины.  Например,   в   Цикле   1 
 обеспечивает  переход  в  режим  конвейерной  адресации, так как он 
 начинается  с  состояния  Т1,  но  заканчивается  состоянием   Т2p. 
 Поскольку  адрес для Цикла 2 устанавливается еще до начала Цикла 2, 
 последний  называется  конвейерным  циклом  шины  и  начинается   с 
 состояния  Т1p.  Цикл 2 начнется, как только активный сигнал READY# 
 завершит Цикл 1. Примерами переходных циклов шины являются  Цикл  1 
 на  рис.5-17  и  Цикл  2 на рис.5-16. На рис.5-17 показан переход в 
 течение цикла шины, первого после нерабочего  состояния  шины,  это 
 самый   кратчайший  из  возможных  переходов  в  режим  конвейерной 
 адресации. Цикл 2 на  рис.5-16 иллюстрирует переходной  цикл  шины, 
 имеющий  место  внутри  последовательности  рабочих  циклов шины. В 
 любом случае переходные циклы осуществляются аналогично  независимо 
 от момента их появления: переходной цикл состоит по меньшей мере из 
 состояний Т1, Т2 (в этот момент вы устанавливаете  активный  сигнал 
 NA#),  Т2p (при условии, что 80386 уже имеет ожидающий обслуживания 
 внутренний запрос шины,  это  условие  выполняется  почти  всегда). 
 Состояния   Т2p  повторяются,  если  цикл  дополняется  состояниями 
 ожидания. 
      Отметим три состояния  (Т1,  Т2  и  Т2p),  комбинация  которых 
 требуется  только  в  цикле  шины,  выполняющем  переход  из режима 
 неконвейерной адресации в режим  конвейерной  адресации,  например, 
 Цикл  1  на  рис.5-17. Циклы 2, 3 и 4 на рис.5-17 показывают, что в 
 режиме конвейерной адресации могут выполняться циклы шины  из  двух 
 состояний каждый, включающие только состояния Т1p и Т2p. 
      Когда  выполняется  конвейерный  цикл  шины, режим конвейерной 
 адресации поддерживается путем установки активного  сигнала  NA#  и 
 определением  того,  что  80386  устанавливает состояние Т2p шины в 
 текущем  цикле  шины.  Текущий  цикл  шины   должен   заканчиваться 
 состоянием  Т2p  для  того,  чтобы  режим конвейерной адресации был 
 сохранен  и  в  следующем  цикле.  Состояние  Т2p  идентифицируется 
 установкой  активного  сигнала  ADS#.  На  рис.5-16  и  5-17  ражим 
 конвейерной  адресации  заканчивается  после  Цикла  4,   так   как 
 последним  состоянием Цикла 4 является состояние Т2i. Это означает, 
 что  80386  не  имел  внутреннего  запроса  шины  перед  получением 
 подтверждения  Цикла  4.  Если цикл заканчивается состоянием Т2 или 
 Т2i, то следующий цикл будет неконвейерным. 
      В    действительности,    конвейерный   адрес   почти   всегда
 устанавливается сразу после обнаружения активного уровня  NA#.  Это
 происходит  потому,  что  при  отсутствии  любого  другого  запроса
 внутренний запрос  предварительной  выборки  команды  почти  всегда
 ожидает  обслуживания  до  тех  пор, пока занят дешифратор команд и
 полностью  заполнена  очередь  предварительно   выбранных   команд.
 Следовательно,   конвейерный   адрес  устанавливается  для  длинных
 цепочек циклов шины, если шина доступна,  и  в  каждом  цикле  шины
 оказывается установленным активный уровень сигнала NA#.
      
      
            5.4.3.6  Конвейерная адресация при изменении
                            размера шины данных
 
      Наличие   сигнала  BS16#  обеспечивает  простое  соединение  с
 16-разрядными шинами  данных.  Когда  установлен  активный  уровень
 BS16#,  схема  шинного  интерфейса  80386 выполняет соответствующие
 переключения, чтобы осуществить  передачу,  используя  16-разрядную
 шину данных, соединенную с линиями D0-D15.
 
                                      - 120 -
            
            
      Однако,  при  одновременном использовании сигналов NA# и BS16#
 имеет место некоторое взаимное влияние этих сигналов друг на друга.
 Это   взаимное   влияние   проявляется   тогда,   когда   требуются
 многократные циклы шины  для  передачи  32-разрядных  операндов  по
 16-разрядной   шине.   Если  операнду  требуются  обе  16-разрядные
 половины 32-разрядной шины, то в соответствии  с  этим  требованием
 80386  должен  выполнить второй цикл шины для того, чтобы полностью
 передать весь операнд. Именно это требование приводит к конфликтной
 ситуации при использовании сигнала NA#.
      Когда  NA# оказывается установленным в активный уровень, 80386
 дает  себе  разрешение   на   обработку   следующего   внутреннего,
 ожидающего  обслуживания  запроса  шины  и выдает на шину следующий
 подготовленный внутри адрес. Следовательно, активизация NA#  делает
 невозможным  повторную  выборку  в  следующем  цикле  шины текущего
 адреса по линиям A2-A31, как это может потребоваться, когда  сигнал
 BS16# активизирован внешним устройством.
      Для  разрешения  этого конфликта схема 80386 разработана таким
 образом, чтобы удовлетворять следующим двум условиям:
      1). Для разрешения конфликта 80386 разработан  таким  образом,
 чтобы  игнорировать сигнал BS16# в текущем цикле шины, если NA# уже
 оказался  установленным  в  текущем  цикле.   Если   NA#   оказался
 установленным,  то текущий размер шины данных принимается равным 32
 разрядам.
      2). Также для разрешения конфликта в том случае, если и NA#  и
 BS16#  оказались  установленными  в  один  и тот же момент времени,
 активный BS16# обладает более высокими по сравнению с активным  NA#
 приоритетом, и 80386 функционируется так, как если бы в этот момент
 сигнал NA# оказался неактивным. Внутренняя схема 80386,  схематично
 показанная  на  рис.5-18 работает таким образом, чтобы сигнал BS16#
 воспринимался активным и сигнал NA# воспринимался неактивным,  если
 оба  входных  сигнала активизированы внешними устройствами в один и
 тот же момент просмотра этих сигналов. 
 
 
      5.4.4 Циклы подтверждения прерывания(INTA)
 
         
 В ответ на запрос  прерывания,  поступивший  на  вход  INTR,  когда 
 прерывания   разрешены,  80386  выполнит  два  цикла  подтверждения 
 прерывания. Эти циклы шины  аналогичны  циклам  чтения,  в  которых 
 имеющий   место   вид   деятельности  шины  соответствует  сигналам 
 определения типа цикла шины, и каждый цикл продолжается до тех пор, 
 пока  процессор  не  получит  подтверждение,  наблюдая  за сигналом 
 READY#. 
      В зависимости от значения  адресного  разряда  А2  различаются 
 первый  и  второй  циклы  подтверждения  прерывания.  Адрес  байта, 
 выдаваемый в первом цикле подтверждения прерывания, равен 4 (А31-А3 
 низкие,  А2  высокий,  ВЕ3#-ВЕ1#  высокие  и  ВЕ0#  низкий). Адрес, 
 выдаваемый  во  втором  цикле  подтверждения  прерывания,  равен  0 
 (А31-А2 низкие, ВЕ3#-ВЕ1# высокие, ВЕ0# низкий). 
      Активный   уровень  сигнала  LOCK#  устанавливается  с  начала 
 первого цикла подтверждения прерывания и  до  конца  второго  цикла 
 подтверждения  прерывания.  Четыре  нерабочих  состояния  шины, Тi, 
 вставляются   процессором   между   двумя   циклами   подтверждения 
 прерывания,   чтобы   обеспечить  время  блокированного  нерабочего 
 состояния шины ("мертвое" время) по меньшей мере длительностью  160 
 нс,  что  позволит  в  будущем  ввести  модификации скорости 80386, 
 достигающие 24 МГц (при этом внешняя частота CLK2 должна  достигать 
 48  МГц),  что  в  свою очередь обеспечит совместимость с временным 
 параметром TRHRL контроллера прерываний 8259А.
  
                                      - 122 -
            
            
      В течение обоих циклов подтверждения прерывания  линии  D0-D31 
 отключены.В конце первого цикла подтверждения прерывания данных для 
 чтения не имеется. В конце второго цикла  подтверждения  прерывания 
 80386  считает  внешний  вектор  прерывания  по  линиям  D0-D7 шины 
 данных. Вектор указывает определенный номер  прерывания  (от  0  до 
 255), требующего обслуживания. 
      
      
      
      5.4.5 Цикл индикации останова
      
      
      80386 останавливается в результате выполнения инструкции HALT. 
 Для  сигнализирования  входа  процессора   в   состояние   останова 
 выполняется   цикл  индикации  останова.  Цикл  индикации  останова 
 идентифицируется определенной комбинацией сигналов типа цикла шины, 
 указанной  в  разделе 5.2.5 Сигналы определения типа цикла  шины, и 
 адресом байта, равным 2. ВЕ0# и ВЕ2# при  этом  служат  только  для 
 различения  цикла индикации останова от цикла индикации выключения, 
 в котором выдается  адрес,  равный  0.  В  течение  цикла  останова 
 данные, передаваемые по D0-D31, неопределены. 
      Остановленный  80386  возобновляет   функционирование,   когда
 устанавливается  активный  уровень  сигнала  INTR  (если прерывания
 разрешены), или сигнала NMI, или сигнала RESET.
      
      
      
      5.4.6 Цикл индикации выключения 
      
      
      80386 выключается в результате появления ошибки защиты  памяти
 при   попытке   обработать  двойную  ошибку.  Для  сигнализирования
 перехода  процессора  в  выключенное  состояние  выполняется   цикл
 индикации  выключения.  Цикл  индикации выключения идентифицируется
 определенной комбинацией  сигналов  определения  типа  цикла  шины,
 указанной  в  разделе  5.2.5 Сигналы определения типа цикла шины, и
 адресом байта, равным 0. Сигналы ВЕ0# и ВЕ2# при этом служат только
 для   отличения  цикла  индикации  выключения  от  цикла  индикации
 останова, в котором выдается  адрес,  равный  2.  В  течение  цикла
 выключения данные,  выдаваемые  на линии D0-D31, неопределены. Цикл
 индикации выключения должен быть подтвержден  установкой  активного
 уровня сигнала READY#. 
      Выключенный   80386   возобновляет   функционирование,   когда
 устанавливается активный уровень сигнала NMI или RESET.
      
      
      
      5.5 Дополнительные сведения о функционировании
      
      
      5.5.1 Вход и выход в/из состояния подтверждения захвата шины
      
      
      Состояние  подтверждения захвата шины, Тh, вводится в ответ на 
 установку активного  уровня  входного  сигнала  HOLD.  В  состоянии 
 подтверждения   захвата  шины  80386  выключает  все  выходные  или 
 двунаправленные сигналы, исключая  сигнал  HLDA.  Активный  уровень 
 сигнала HLDA поддерживается все время, пока 80386 находится в 
 
                                      - 125 -
            
            
 состоянии  подтверждения  захвата  шины.  В состоянии подтверждения 
 захвата шины все входы, за исключением HOLD и  RESET,  игнорируются 
 (исключение  составляет также один положительный фронт сигнала NMI, 
 который запоминается для последующей его  обработки,  когда  сигнал 
 HOLD перейдет в неактивное состояние). 
      Состояние  Th  может  быть  введено после нерабочего состояния
 шины, как на рис.5-25, или после подтверждения текущего физического
 цикла  шины, если при этом уровень сигнала LOCK# неактивный, как на
 рис.5-26 и 5-27. Если установка  активного  сигнала  ВS16#  требует
 выполнения второго 16-разрядного цикла шины для завершения передачи
 физического операнда, то этот  цикл  выполняется  до  подтверждения
 сигнала  HOLD,  хотя  диаграммы  состояний  на  рис.5-13  и 5-20 не
 отражают этой особенности.
      Выход  из  состояния  Th  осуществляется  в  ответ  на  снятие
 активного  уровня входного сигнала HOLD. Следующим состоянием будет
 состояние  Ti,  как  на  рис.5-25,  если  не   имеется   ожидающего
 обслуживания  внутреннего запроса шины. Если же имеется внутренний,
 ожидающий решения запрос шины, то следующим состоянием  шины  будет
 состояние Т1, как показано на рис.5-26 и 5-27. 
      Выход   из  состояния  Th  осуществляется  также  в  ответ  на
 установку активного уровня сигнала RESET. 
      Если в течение состояния Th появится  положительный  фронт  на
 чувствительном  к фронту входе NMI, то это событие запоминается как
 немаскируемое прерывание 2 и обслуживается после выхода  процессора
 из  состояния  Th  кроме  случая,  когда до выхода из Th произойдет
 сброс 80386.
      
      
      
      5.5.2 Сброс в состоянии подтверждения захвата шины
      
      
      Активный сигнал RESET обладает более  высоким  приоритетом  по
 сравнению  с  активным  сигналом  HOLD.  Следовательно,  в ответ на
 установку активного уровня на входе RESET осуществляется  выход  из
 состояния  Th.  Если  сигнал RESET активизируется во время действия
 сигнала  HOLD,  то  80386  установит  свои  выводы  в  определенные
 состояния  в  соответствии  с табл.5-3 "Состояния выводов в течение
 действия сигнала RESET" и выполнит  обычную  процедуру  внутреннего
 сброса.
      Если  активный  уровень  сигнала HOLD остается установленным и
 после снятия активного сигнала RESET, то 80386 перейдет в состояние
 подтверждения  захвата  шины до того, как выполнит свой первый цикл
 шины, но при условии, что HOLD все еще остается активным в  момент,
 когда  80386  в  другом  случае  приступил  бы  к выполнению своего
 первого цикла  шины.  Если  HOLD  остается  активным  после  снятия
 сигнала  RESET,  то  вход BUSY# все равно анализируется как обычно,
 чтобы определить требуется ли самотестирование, сигнал ERROR# также
 при  этом анализируется как обычно, чтобы определить, какой из двух
 воэможных  сопроцессоров  присутствует   в   системе   (или   когда
 сопроцессора вобще нет).    
 
                                      - 129 -
      
      
      5.5.3  Функционирование  шины  в  течение  и  после   действия
                             сигнала RESET 
 
      
   RESET   является   самым   приоритетным   входным  сигналом,  при
 установке активного уровня  RESET  прерывается  любая  деятельность
 процессора.  Выполняемый  цикл  шины может быть прерванным на любой
 стадии,  а  нерабочие состояния или состояния подтверждения захвата
 шины прекращаются при установке состояния сброса.
      RESET должен поддерживаться в активном состоянии в течение  по
 меньшей мере 15 периодов частоты CLK2, чтобы он был уверенно принят
 всеми схемами 80386, и по меньшей мере в течение 78 периодов  CLK2,
 если   выполняется   самотестирование   80386,  запрос  на  которое
 анализируется во время отрицательного фронта RESET.
      Активные импульсы RESET длительностью меньше 15 периодов  CLK2
 могут быть не восприняты.
      Активные импульсы RESET длительностью меньше 78 периодов CLK2,
 за которыми следует самотестирование, могут привести  к  тому,  что
 тест-структура   выдаст   сообщение   о   неисправности,   когда  в
 действительности  неисправности   не   существует.   Дополнительное
 расширение  импульса  RESET  необходимо  для  получения достоверных
 результатов самодиагностирования.
      При  условии,   что   отрицательный   фронт   RESET   отвечает
 требованиям,  предъявляемым  к  времени  установки  t25  и  времени
 удержания  t26,  этот  фронт  определит  фазу  внутренней  тактовой
 частоты процессора, как показано на рис.5-28 и рис.7-7.
      Самодиагностирование  80386 можно запустить, если поддерживать
 сигнал BUSY# на низком уровне в момент снятия  сигнала  RESET,  как
 показано    на    рис.5-28.    Для    выполнения   всей   процедуры
 самодиагностирования требуется [(2^20)+ приблизительно 60] периодов
 CLK2.   Результаты  тестирования  не  влияют  на  продолжительность
 самодиагностирования.
      Даже  если  после  тестирования  тест-структура  указывает  на
 наличие  неисправности,  80386  все  равно  перейдет  к  выполнению
 процедуры, которая должна была следовать за сбросом 80386.
      После  отрицательного  фронта RESET (и после самотестирования,
 если в нем была необходимость)  80386  выполнит  последовательность
 внутренней  инициализации  за  время, приблизительно равное 350-450
 периодам CLK2. Во время  инициализации,  между  двадцатым  периодом
 CLK2  и  первым  циклом шины (который последует за инициализацией),
 80386 анализирует состояние входа  ERROR#,  чтобы  отличить  случай
 присутсвия   в   системе   сопроцессора   80387  от  случая,  когда
 присутствует  80287  или  в  системе  вобще  нет   сопропроцессора.
 Различие  между  последними  двумя случаями (в системе присутствует
 80287 или в системе нет сопроцессора) задается программно. 
      
       
    
                  5.6 Сигнатура самотестирования
        
      
 По  завершению   самотестирования   (если   самотестирование   было
 запрошено  путем  поддержания низкого уровня сигнала BUSY# во время
 отрицательного  фронта  сигнала  RESET),  если  не  было обнаружено
 неисправностей 80386, то значение каждого  из  регистров  AX  и  DX
 будет  равно  0000H.  Это  справедливо  для всех модификаций 80386.
 Ненулевые значения  регистров  AX  или  DX  после  самотестирования
 указывает на то, что какой-то блок 80386 неисправен.
 
                                      - 131 -
      
 
      5.7 Идентификаторы типа и модификации
      
      Чтобы   помочь   пользователям   80386,   80386  после  сброса
 поддерживает  идентификатор  типа   и   идентификатор   модификации
 соответственно   в   регистрах   BH  и  BL.  BH  содержит  03H  для
 идентификации типа 80386. BL содержит беззнаковое  двоичное  число,
 соответствующее   версии   данного   типа   процессора.  Хронология
 изменения идентификатора модификации (версии) 80386 в BL такова: он
 начинается   с   нуля   и  изменяется  (обычно  увеличивается)  при
 изменениях   данного   типа   процессора,    предназначенных    для
 усовершенствования   данного   типа   процессора   по  сравнению  с
 предыдущими версиями.
      Эти  особенности  предназначены   для   того,   чтобы   помочь
 пользователям  80386  в  их  практической  деятельности.  Однако не
 гарантируется, что значение идентификатора версии будет  изменяться
 с  каждым  изменением  версии  или  что  изменения этого значения в
 зависимости от содержания или цели  версии  или  в  зависимости  от
 материалов,  требующих  изменения,  будут   следовать   строго   по
 непрерывной  числовой  последовательности.  Фирма Intel поступает с
 этими характеристиками данного типа  процессора  только  по  своему
 усмотрению.
      
      Табл.5-10 История идентификаторов типа и версии
      
 -------------------------------------------------------------------
 Содержа-  |Идентифи- |Идентифи- |Содержа-  |Идентифи- |Идентифи-   
 ние изме- |катор ти- |катор     |ние изме- |катор ти- |катор
 нения     |па        |версии    |нения     |па        |версии
 80386     |          |          |80386     |          |
           |          |          |          |          |
 -------------------------------------------------------------------
           |          |          |          |          |
 
               
 
 .
                                      -172 -
            
            
                   8.2  КОДИРОВАНИЕ КОМАНД
 
                      8.2.1  Общий обзор
 
      Коды  всех команд образуют подмножество общего формата команд, 
 показанного на рис.8-1. Команды состоят из 1 или  2-х  байтов  кода 
 операции,  возможно описателя адреса, состоящего из байта "mod r/m" 
 и байта "масштабного индекса ", смещения, если  требуется  и,  если 
 требуется, поля непосредственного операнда. 
      Внутри  кода  или кодов операций можно определить более мелкие
 поля кодировки.  Эти  поля  варьируются  в  зависимости  от  класса
 операций.  Эти  поля  определяют  такую информацию, как направление
 передачи  операнда,  размер  смещения,  код  номера  регистра   или
 распространение знака.
      Почти  все  команды,  относящиеся  к  операнду, находящемуся в
 памяти, имеют байт режима адресации, следующий  непосредственно  за
 первыми  байтами  кода  операции.  Этот  байт, байт поля "mod r/m",
 указывает на  режим  адресации,  который  может  быть  использован.
 Основная  кодировка  байта  "mod  r/m",  чтобы полностью определить
 режим адресации.
      Режимы адресации могут указывать на непосредственное смещение,
 которое  следует  за  байтом  "mod  r/m",  или  на  байт индексного
 смещения.  Если  смещение  присутствует,  то  его  возможная  длина
 составит 8, 16 или 32 разряда. 
      Если  в  команде  указан  непосредственный  операнд,  то  этот
 непосредственный  операнд  следует  за   любым   байтом   смещения.
 Непосредственный  операнд, если он задан, всегда является последним
 в поле команды.
      Рис.8-1  показывает несколько полей, которые могут появиться в
 команде,  такие  как поле "mod" и поле "r/m", но не показывает всех
 полей  команды.  В  команде  общего  формата  могут  присутствовать
 несколько   меньших  полей,  тогда  с  собственными  байтами  кодов
 операции. Таблица 8-2 является полным списком всех  полей,  которые
 могут  быть  использованы  в командах 80386. За табл.8-2  приведены
 детальные таблицы кодировки каждого из полей команды.
      
   -------------------------------------------
  |TTTTTTTT|TTTTTTTT|mod TTT r/m|ss index base|  ====>
   -------------------------------------------
   7      0 7      0 7 6 5 3 2 0  7 6 5 3  2 0
   --------v-------- -----v-----  ------v----- 
   код операции      "mod  r/m"      "s-i-b"   
   (один или два        байт          байт     
   байта)            ------------v------------ 
   (T битовое предс-   регисторный и адресный  
   тавление кода          вид спецификатора    
     операции
     
     ====>      d32|16|8|none data32|16|8|none 
           
                                               
                ------v------ -------v-------- 
                 отображение      прямые       
                   адреса         данные       
                 (4,2,1  байт   (4,2,1 байт    
                  или отсутс-  или отсутс-     
                    твует)        твует)       
      
              Рис.8-1. Основной формат команд
 .
                                      -173 -
            
            
         Таблица 8-2. Внутренние поля команд 80386
           
 -------------------------------------------------------------------
  Имя поля  |           Детектор (описатель)       | Число разрядов
 -------------------------------------------------------------------
     w      |  Вид числа: байт или полный формат   |       1
            | (16 или 32 разряда)                  |
     d      |  Направление изменения адреса        |       1
            | числа                                |
     s      |  Вид представления   знака в непос-  |       1
            | редственном операнде                 |
    reg     |  Код регистра                        |       3
            |                                      |
   mod r/m  |  Вид режима адресации (исполнитель-  |  2 для "mod"
            | ным адресом может быть содержание    |  3 для "r/m"
            | регистра общего назначения           |
     ss     |  Размер смещения для режима индекс-  |       2
            | ной адресации со смещением           |
   index    |  Код регистра, используемого         |       3
            | как индексный регистр                |
    base    |  Код регистра, используемого         |       3
            | как базовый регистр                  |
    sreg    |  Код сегментного регистра CS, SS,    |       2
            | DS, ES                               |
    sreg    |  Код сегментного регистра CS, SS,    |       3
            | DS, ES, FS, GS                       |
    tttn    |  Для условных команд, вид условия    |       4
            | совпадения или условия различия      |
 -------------------------------------------------------------------
      
      
             8.2.2  Расширения стека команд на 32 разряда
      
      В  80386   список   команд   86/186/286   расширяется   в   двух 
 ортогональных  направлениях:  добавляются  32-х  разрядные формы всех 
 16-х  разрядных  команд  для  того,  чтобы  отличить  работу  с  32-х 
 разрядными  типами  данных и 32-х разрядные виды адресации становятся 
 возможными для всех инструкций обращения к памяти. Это  ортогональное 
 расширение  стека  команд  достигается с помощью (D) бита в описателе 
 кода сегмента и путем наличия двух префиксов в списке команд. 
      Команда   оперирует  с  16  или  32-х  разрядными  операндами, 
 зависящими от установки D бита в описателе кода сегмента, который и 
 дает  длину операнда для обоих операндов и эффективность адресации, 
 когда исполняется этот код сегмента. При использовании  прямой  или 
 виртуальной  адресации  8086  никаких кодов описателей сегментов не 
 используется, но значение D или  O  рассматривается  внутри  80386, 
 когда  операции выполняются именно в этих видах адресации (для 16-и 
 разрядных слов сравнимых с 86/186/286). 
      Два   префикса   (префикс  длинны  операнда  и  префикс  длины 
 эффективного  адреса)  позволят  не  принимать  во  внимание  длины 
 операнда  и  эффективного адреса. Эти префиксы могут предшествовать 
 любому байту кода  операции  и  действуют  только  на  ту  команду, 
 которой  они  предшествуют.  Если  необходимо,  перед  байтами кода 
 операции  могут  быть  установлены  1 или 2 этих префикса.  Наличие 
 префиксов   длины  операнда  и  длины  эффективного  адреса  должно 
 заменить длину операнда или эффективного адреса на  противоположную 
 тому,  которая  указана установкой D-бита. Например, если установка 
 D-битом длины операнда соответствует 32-х разрядному  операнду,  то 
 наличие префикса длины операнда заставит инструкцию выполняться как 
 16-и разрядная. В другом примере, если  D-бит  эффективного  адреса 
 16-и  
                                      -174 -
            
            
 разрядный, то наличие префикса длины эффективного адреса заставляет 
 инструкцию использовать 32-х битный эффективный адрес. 
      Эти  32-х  разрядные расширения допустимы во всех видах 80386, 
 включая вид прямых адресов и виртуальных для  8086.  В  этих  видах 
 D-бит  указывает  на  16-и разрядные формы, поэтому префиксы нужны, 
 чтобы определить 32-х разрядные операнды или адреса. 
      Независимо от предшествующих описаний, инструкции с 8- и  16-и 
 разрядными  операндами  не  влияют  на  содержимое старших разрядов 
 расширенных регистров. 
      
      
                  8.2.3  Кодирование полей команд
 
      Внутри   команды   имеются  несколько  полей  указывающих  вид
 адресации, выбор регистра  и  т.д.  Такое  кодирование  этих  полей
 приведено ниже.
      
      
            8.2.3.1  Кодирование длины операнда (W) полем
 
      Для любой данной  команды,  выполняются  операции  с  данными, 
 команда выполняется как операция 32-х разрядная или 16-и разрядная. 
 Внутри  ограничений  размера  операции,  поле  W  кодирует   размер 
 операнда  как  или  1 байт или как полный размер операции в таблице 
 приведенной ниже. 
      
 -------------------------------------------------------------------
   W поле       |  Размер операнда при     |  Размер операнда при
                |  16-и разрядных операциях|  32-х разрядных 
                |  с данными               |  операциях с данными
 -------------------------------------------------------------------
       0        |        8 бит             |         8 бит
       1        |       16 бит             |        16 бит
 -------------------------------------------------------------------
 
      
       8.2.3.2  Кодирование reg поля регистров общего назначения
                                (основных)
      
      Главный регистр определяется с помощью reg поля, которое может
 появится  в первых (основных) байтах кода операции или как поле r/m
 в байте "mod r/m".
      
        Кодирование поля reg, когда поле W в команде отсутствует
 -------------------------------------------------------------------
    reg поле    |  Выбранный регистр        |  Выбранный регистр
                |  при выполнении           |  при выполнении
                |  16-и разрядных операций  |  32-х разрядных операций
                |  с данными                |  с данными
 -------------------------------------------------------------------
     000        |            Ax             |        EAX
     001        |            CX             |        ECX
     010        |            DX             |        EDX
     011        |            BX             |        EBX
     100        |            SP             |        ESP
     101        |            BP             |        EBP
     101        |            SI             |        ESI
     101        |            DI             |        EDI
 -------------------------------------------------------------------     
 .
                                      -175 -
            
            
               Кодирование reg поля, при наличие W поля
 -------------------------------------------------------------------
            Регистр определяемый reg полем во время
            выполнения операций с 16-разрядными данными
 -------------------------------------------------------------------
    reg    |                Функция W поля
           |--------------------------------------------------------
           |         (если W=0)         |        (если W=1)
 -------------------------------------------------------------------
    000    |             AL             |            AX
    001    |             CL             |            CX
    010    |             DL             |            DX
    011    |             BL             |            BX
    100    |             AH             |            SP
    101    |             CH             |            BP
    110    |             DH             |            SI
    111    |             BH             |            DI
 -------------------------------------------------------------------     
 
 -------------------------------------------------------------------
            Регистр определяемый reg полем во время
            выполнения операций с 32-х разрядными данными
 -------------------------------------------------------------------
    reg    |                Функции W поля
           |--------------------------------------------------------
           |          (если W=0)        |        (если W=1)
 -------------------------------------------------------------------
    000    |             AL             |           EAX
    001    |             CL             |           ECX
    010    |             DL             |           EDX
    011    |             BL             |           EBX
    100    |             AH             |           ESP
    101    |             CH             |           EBP
    110    |             DH             |           ESI
    111    |             BH             |           EDI
 -------------------------------------------------------------------
 .
                                      -176 -
            
            
      
        8.2.3.3  Кодирование сегментного регистра полем (sreg)
      
      Sreg-поле    в    основных   командах-это   2-разрядное  поле,
 позволяющее указывать один из четырех сигментных  регистров  80286.
 Sreg-поле  в  других  командах-это  3-разрядное  поле,  позволяющее
 указывать сигменты FS и GS для 80386.
      
                    2-разрядное sreg поле
 -------------------------------------------------------------------
     2-разрядное sreg поле        |  Выбранный сигментный регистр
 -------------------------------------------------------------------
               00                 |              ES
               01                 |              CS
               10                 |              SS
               11                 |              DS
 -------------------------------------------------------------------
 
                    3-разрядное sreg поле
 -------------------------------------------------------------------
     3-разрядное sreg поле        |  Выбранный сигментный регистр
 -------------------------------------------------------------------
               000                |              ES
               001                |              CS
               010                |              SS
               011                |              DS
               100                |              FS
               101                |              GS
               110                |         не используется
               111                |         не используется
 -------------------------------------------------------------------
 
      
                 8.2.3.4  Кодирование видов адресации
 
      За исключением специальных команд таких как PUSH или POP,  где 
 вид  операции  преопределен,  вид  адресации всех текщих инструкции 
 определяется байтами адресации, которые следуют за остальным  кодом 
 операции.  Первый  байт  адресации-байт "mod r/m", а следующий байт 
 адресации  информации,  "s-i-b"  (циклы  индикации)   байт,   может 
 присутствовать. 
      S-i-b  байт-это  (байт  базы-шкалы-индексов)  специальный байт 
 определяющий, когда используется 32-х разрядный  вид  адресации,  и 
 когда байт "mod r/m" имеет r/m=100 и mod=00,01\/10. Если S-i-b байт 
 присутствует, то 32-х разрядный  вид  адресации  является  функцией 
 mod, SS, "индекс" и полей "базы". 
      Первый  байт  адресации,  "mod  r/m" байт также состоит из 3-х
 битов (показан, как  ТТТ  на  рис.8-1)   иногда   используется  как
 расширение  первого,  основного кода операции. Однако, эти три бита
 могут быть использованы как поле регистора.
      Когда  вычисляется  эффективный  адрес  используется  или 16-и 
 разрядная или 32-х разрядная адресация.  16-и  разрядная  адресация 
 использует 16-и разрядные компоненты для вычисления 16-и разрядного 
 адреса, в то время как при 32-х  разрядной  адресации  используется 
 32-х  разрядные  компоненты  адреса  для вычисления 32-х разрядного 
 адреса. Когда используется  16-и  разрядная  адресация,  байт  "mod 
 r/m",  интерпретируется  как спецификатор 16-и разрядной адресации. 
 Когда используется 32-х разрядная  адресация,  то  байт  "mod  r/m" 
 интерпретируется как спецификатор 32-х разрядной адресации. 
      Таблицы, которые следуют далее определяют все  кодировки  всех
 
                                      -177 -
            
            
 16- и 32-х разрядных видов адресации.
      
      
       Кодирование 16-и разрядного вида адресации байтом "mod r/m"
      
 -------------------------------------------------------------------
        mod r/m          |           Эффективные адреса
 -------------------------------------------------------------------
         00 000          |          DS:[BX+SI]
         00 001          |          DS:[BX+DI]
         00 010          |          SS:[BP+SI]
         00 011          |          SS:[BP+DI]
         00 100          |          DS:[SI]
         00 101          |          DS:[DI]
         00 110          |          DS:d16
         00 111          |          DS:[BX]
                         |
         01 000          |          DS:[BX+SI+d8]
         01 001          |          DS:[BX+DI+d8]
         01 010          |          SS:[BP+SI+d8]
         01 011          |          SS:[BP+DI+d8]
         01 100          |          DS:[SI+d8]
         01 101          |          DS:[DI+d8]
         01 110          |          DS:[BX+d8]
         01 111          |          SS:[BP+d8]
                         |
         10 000          |          DS:[BX+SI+d16]
         10 001          |          DS:[BX+DI+d16]
         10 010          |          SS:[BP+SI+d16]
         10 011          |          SS:[BP+DI+d16]
         10 100          |          DS:[SI+d16]
         10 101          |          DS:[DI+d16]
         10 110          |          DS:[BX+d16]
         10 111          |          SS:[BP+d16]
                         |
         11 000          |          регистр-смотри ниже
         11 001          |                 "-"
         11 010          |                 "-"
         11 011          |                 "-"
         11 100          |                 "-"
         11 101          |                 "-"
         11 110          |                 "-"
         11 111          |                 "-"
 -------------------------------------------------------------------     
 .
                                      -178 -
            
            
 -------------------------------------------------------------------
               Регистор, который определяется r/m
             с 16-и разрядными операциями над данными
 -------------------------------------------------------------------
      mod r/m     |             Функция W поля
                  |-------------------------------------------------
                  |     (если W=0)        |    (если W=1)
 -------------------------------------------------------------------
      11 000      |          AL           |           AX
      11 001      |          CL           |           CX
      11 010      |          DL           |           DX
      11 011      |          BL           |           BX
      11 100      |          AH           |           SP
      11 101      |          CH           |           BP
      11 110      |          DH           |           SI
      11 111      |          BH           |           DI
 -------------------------------------------------------------------
      
 -------------------------------------------------------------------
               Регистр, который определяется r/m
             с 32-х разрядными операциями над данными
 -------------------------------------------------------------------
      mod r/m     |             Функция W поля
                  |-------------------------------------------------
                  |     (если W=0)        |    (если W=1)
 -------------------------------------------------------------------
      11 000      |          AL           |          EAX
      11 001      |          CL           |          ECX
      11 010      |          DL           |          EDX
      11 011      |          BL           |          EBX
      11 100      |          AH           |          ESP
      11 101      |          CH           |          EBP
      11 110      |          DH           |          ESI
      11 111      |          BH           |          EDI
 -------------------------------------------------------------------
 
      
         Кодирование 32-х разрядных видов адресов "mod r/m"
                  байтом (при отсутствии S-i-b)
      
 -------------------------------------------------------------------
        mod r/m          |           Эффективные адреса
 -------------------------------------------------------------------
           10 000                  DS:[EBX+ESI+d32]
           10 001                  DS:[EBX+EDI+d32]
           10 010                  SS:[EBP+ESI+d32]
           10 011                  SS:[EBP+EDI+d32]
           10 100                  s-i-b присутствует
           10 101                  DS:[EDI+d32]
           10 110                  DS:[EBX+d32]
           10 111                  SS:[EBP+d32]
      
           11 000                  регистр-смотри ниже
           11 001                          "-"
           11 010                          "-"
           11 011                          "-"
           11 100                          "-"
           11 101                          "-"
           11 110                          "-"
           11 111                          "-"
 
                                      -179 -
            
            
      
           00 000                  DS:[EBX+ESI]
           00 001                  DS:[EBX+EDI]
           00 010                  SS:[EBP+ESI]
           00 011                  SS:[EBP+EDI]
           00 100                  s-i-b присутствует
           00 101                  DS:[EDI]
           00 110                  DS:d32
           00 111                  DS:[EBX]
      
           01 000                  DS:[EBX+ESI+d8]
           01 001                  DS:[EBX+EDI+d8]
           01 010                  SS:[EBP+ESI+d8]
           01 011                  SS:[EBP+EDI+d8]
           01 100                  s-i-b присутствует
           01 101                  DS:[EDI+d8]
           01 110                  DS:[EBX+d8]
           01 111                  SS:[EBP+d8]
 -------------------------------------------------------------------     
 
 -------------------------------------------------------------------
               Регистр, который определяется r/m
             с 16-и разрядными операциями над данными
 -------------------------------------------------------------------
      mod r/m     |             Функция W поля
                  |-------------------------------------------------
                  |     (если W=0)        |    (если W=1)
 -------------------------------------------------------------------
      11 000      |          AL           |           AX
      11 001      |          CL           |           CX
      11 010      |          DL           |           DX
      11 011      |          BL           |           BX
      11 100      |          AH           |           SP
      11 101      |          CH           |           BP
      11 110      |          DH           |           SI
      11 111      |          BH           |           DI
 -------------------------------------------------------------------
                 
 -------------------------------------------------------------------
               Регистр, который определяется r/m
             с 32-х разрядными операциями над данными
 -------------------------------------------------------------------
      mod r/m     |             Функция W поля
                  |-------------------------------------------------
                  |     (если W=0)        |    (если W=1)
 -------------------------------------------------------------------
      11 000      |          AL           |          EAX
      11 001      |          CL           |          ECX
      11 010      |          DL           |          EDX
      11 011      |          BL           |          EBX
      11 100      |          AH           |          ESP
      11 101      |          CH           |          EBP
      11 110      |          DH           |          ESI
      11 111      |          BH           |          EDI
 -------------------------------------------------------------------
 .
                                      -180 -
            
            
            Кодирование 32-х разрядных видов адресов
                 (при mod r/m и s-i-b байтах)
      
 -------------------------------------------------------------------
        База         |           Эффективные адреса
 -------------------------------------------------------------------
      00 000         |      DS:[EAX+(масштабный индекс)]
      00 001         |      DS:[ECX+("-")]
      00 010         |      DS:[EDX+("-")]
      00 011         |      DS:[EBX+("-")]
      00 100         |      SS:[EAX+("-")]
      00 101         |      DS:[d32+("-")]
      00 110         |      DS:[ESI+("-")]
      00 111         |      DS:[EDI+("-")]
                     |
      01 000         |      DS:[EAX+(масштабный индекс)+d8]    
      01 001         |      DS:[ECX+("-")+d8]
      01 010         |      DS:[EDX+("-")+d8]
      01 011         |      DS:[EBX+("-")+d8]
      01 100         |      SS:[ESP+("-")+d8]
      01 101         |      SS:[EBP+("-")+d8]
      01 110         |      DS:[ESI+("-")+d8]
      01 111         |      DS:[EDI+("-")+d8]
                     |
      10 000         |      DS:[EAX+(масштабный индекс)+d32]
      10 001         |      DS:[ECX+("-")+d32]
      10 010         |      DS:[EDX+("-")+d32]
      10 011         |      DS:[EBX+("-")+d32]
      10 100         |      SS:[EAX+("-")+d32]
      10 101         |      SS:[EBP+("-")+d32]
      10 110         |      DS:[ESI+("-")+d32]
      10 111         |      DS:[EDI+("-")+d32]
 -------------------------------------------------------------------
 
 -------------------------------------------------------------------
              ss                |          Масштаб
 -------------------------------------------------------------------
              00                |             x1
              01                |             x2
              10                |             x4
              11                |             x8
 -------------------------------------------------------------------
 
 -------------------------------------------------------------------
            Индекс              |       Индексный регистр
 -------------------------------------------------------------------
             000                |             EAX
             001                |             ECX
             010                |             EDX
             011                |             EBX
             100                |             нет
             101                |             EBP
             110                |             ESI
             111                |             EDI
 -------------------------------------------------------------------
 .
                                      -181 -
            
            
      
         8.2.3.5  Кодирование направления операции (d) полем
      
      В  большинстве  двухоперационных  операций d поле присутствует
 для указания того, чтобы  операнд  рассматривался  ка  источник,  а
 также как приемник результата.
      
 -------------------------------------------------------------------
       d      |             Направление операции
 -------------------------------------------------------------------
       0      | Регистр/Память <-- Регистр
              | "reg" поле указывает, что операнд-источник;
              | "mod r/m" или "mod ss index base" указывают операнд,
              | куда загружается результат
 -------------|-----------------------------------------------------
       1      | Регистр <-- Регистр/Память
              | "reg" поле указывает операнд результата;
              | "mod r/m" или "mod ss index base" указывает операнд,
              | куда загружается результат
 -------------------------------------------------------------------
 
      
        8.2.3.6  Кодирование одинарного и расширенного (s) поля
      
      S    поле   сначала   встречается   в   операциях   с   полями
 непосредственных  данных.  S  поле  действует  только  если  размер
 непосредственных  данных-8  разрядов  и  они  размещаются в 16- или
 32-х разрядных полях назначения.
 
 -------------------------------------------------------------------
    s   |  Действие в режиме 8-и разряд-| Действие в режиме 16/32-х
        |  ного формата данных          | разрядного формата данных
 -------------------------------------------------------------------
    0   |              нет              |            нет
        |                               |
    1   |  Расширенный формат 8 разрядов|            нет
        |  для заполнения 16-или 32-х   |
        |  разрядных полей назначения   |
 -------------------------------------------------------------------
 .
                                      -182 -
            
            
      
          8.2.3.7  Кодирование поля (tttn) условного теста
      
      Для команд условных (условных переходов и установки состояния)
 tttn  кодируется  как  n-указывающее  на  использование   состояния
 (n=0) или его отрицание (n=1),  и  ttt  дающее  состояния,  которые
 нужно проверить.
      
 -------------------------------------------------------------------
   Мнемоника |           Состояние                   |    tttn
 -------------------------------------------------------------------
    O        |  Переполнение                         |    0000
    NO       |  Нет переполнения                     |    0001
    B/NAE    |  Ниже/Не выше или равно               |    0010
    NB/AE    |  Не ниже/выше или равно               |    0011
    E/Z      |  Равно/нуль                           |    0100
    NE/NZ    |  Не равно/Не нуль                     |    0101
    BE/NA    |  Ниже или равно/Не выше               |    0110
    NBE/A    |  Не ниже или равно/выше               |    0111
    S        |  Знак ("1")                           |    1000
    NS       |  Не знак ("0")                        |    1001
    P/PE     |  Паритет/Паритет четности             |    1010
    NP/PO    |  Не паритет/Паритет нечетности        |    1011
    L/NGE    |  Меньше чем/Не больше или равно       |    1100
    NL/GE    |  Не меньше чем/Больше или равно       |    1101
    LE/NG    |  Меньше чем или равно/Больше чем      |    1110
    NLE/G    |  Не меньше или равно/Больше чем       |    1111
 -------------------------------------------------------------------   
 
 
        8.2.3.8  Кодирование управляющего или отладочного, или
                       тестового регистра (eee) полем
      
      Для  загрузки и описания управляющего, отладочного и тестового
 регистров.
      
             Когда рассматривается управляющий регистр
 -------------------------------------------------------------------
            eee Код              |          Имя регистра
 -------------------------------------------------------------------
             000                 |               CR0
             010                 |               CR2
             011                 |               CR3
 -------------------------------------------------------------------
                Любой другой код не используется
 -------------------------------------------------------------------
      
             Когда рассматривается отладочный регистр
 -------------------------------------------------------------------
            eee Код              |          Имя регистра
 -------------------------------------------------------------------
             000                 |               DR0
             001                 |               DR1
             010                 |               DR2
             011                 |               DR3
             110                 |               DR6
             111                 |               DR7
 -------------------------------------------------------------------
                Любой другой код не используется
 -------------------------------------------------------------------     
 
                                      -183 -
            
            
 
             Когда рассматривается тестовый регистр
 -------------------------------------------------------------------
            eee Код              |          Имя регистра
 -------------------------------------------------------------------
             110                 |               TR6
             111                 |               TR7
 -------------------------------------------------------------------
                Любой другой код не используется
 -------------------------------------------------------------------     
 
 
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье