---------------------------------------------------------------
    Корректура: Олег Мартыненко
---------------------------------------------------------------

СОДЕРЖАНИЕ

ОСНОВНЫЕ ХАРАКТЕРИСТИКИ                                          3
 1.1 32-битная архитектура                                       3
 1.2 Высокопроизводительная технология                           4
 1.3 Обеспечение работы с виртуальной памятью                    5
 1.4 Механизмы защиты                                            6
 1.5 Расширенные возможности отладки                             6
 1.6 Совместимость с микропроцессорами 8086/80286                6
 1.7 Заключение                                                  7
ПРИКЛАДНАЯ АРХИТЕКТУРА                                           7
 2.1 Регистры                                                    7
  2.1.1 Общие регистры                                           7
  2.1.2 Флаги и счетчик команд                                   8
  2.1.3 Регистры математического сопроцессора                    8
 2.2 Память и логическая адресация                               9
  2.2.1 Сегменты                                                 9
  2.2.2 Логические адреса                                       10
  2.2.3 Регистры сегментов и дескрипторов                       10
  2.2.4 Способы адресации                                       11
 2.3 Типы данных и команды                                      12
  2.3.1 Главные типы данных                                     12
  2.3.2 Типы данных математического сопроцессора                14
  2.3.3 Другие команды                                          15
  2.3.3.1 Команды операций со стеком  15
  2.3.3.2 Команды передачи управления  15
  2.3.3.3 Дополнительные команды  16
СИСТЕМНАЯ АРХИТЕКТУРА                                           16
 3.1 Системные регистры                                         16
 3.2 Обеспечение многозадачных операционных систем              17
  3.2.1 Сегмент состояния задачи                                18
  3.2.2 Смена задачи                                            18
 3.3 Адресация                                                  19
  3.3.1 Принцип трансляции адреса                               19
  3.3.2 Сегменты                                                20
  3.3.3 Страницы                                                22
  3.3.4 Виртуальная память                                      23
 3.4 Защита                                                     25
  3.4.1 Привилегии                                              25
  3.4.2 Привилегированные команды                               26
  3.4.3 Защита сегментов                                        26
  3.4.4 Защита страниц                                          27
 3.5 Системные вызовы                                           27
 3.6 Прерывания и особые ситуации                               29
  3.6.1 Таблица дескрипторов                                    29
  3.6.2 Особые случаи и регистры отладки                        30
 3.7 Ввод/вывод                                                 31
АРХИТЕКТУРНАЯ СОВМЕСТИМОСТЬ                                     32
 4.1 Совместимость с 80286                                      32
 4.2 Режимы реального и виртуального 8086                       32
АППАРАТУРНАЯ РЕАЛИЗАЦИЯ                                         34
 5.1 Внутренняя структура                                       34
 5.2 Внешний интерфейс                                          35
  5.2.1 Синхросигнал                                            36
  5.2.2 Шины данных и адреса                                    36
  5.2.3 Определение циклов шины                                 36
  5.2.4 Управление циклом шины                                  37
  5.2.5 Динамическое управление разрядность шины                37
  5.2.6 Статус процессора и управление                          38
  5.2.7 Управление сопроцессором                                38
СВЕДЕНИЯ О ФУНКЦИОНИРОВАНИИ                                     39
 6.1 Введение                                                   39
 6.2 Описание сигналов                                          40
  6.2.1 Введение                                                40
  6.2.2 Синхросигнал (CLK2)                                     40
  6.2.3 Шина данных (D0-D31)                                    40
  6.2.4 Шина адреса (BE0#-BE3#, A2-A31)                         40
  6.2.5 Сигналы определения типа цикла шины                     42
  6.2.6 Сигналы управления шиной                                43
  6.2.6.1 Введение  43
  6.2.6.2 Строб адреса (ADS#)  43
  6.2.6.3 Сигнал подтверждения (READY#)  43
  6.2.6.4 Запрос следующего адреса (NA#)  43
  6.2.6.5 Указатель 16-разрядной шины (BS16#)  43
  6.2.7 Сигналы арбитража шины                                  44
  6.2.7.1 Введение  44
  6.2.7.2 Запросы на захват шины (HOLD)  44
  6.2.7.3 Подтверждение захвата шины (HLDA)  44
  6.2.8 Сигналы интерфейса с сопроцессором                      44
  6.2.8.1 Введение  44
  6.2.8.2 Запрос сопроцессора (PEREQ)  45
  6.2.8.3 Сопроцессор занят (BUSY#)  45
  6.2.8.4 Ошибка сопроцессора (ERROR#)  45
  6.2.9 Сигналы прерывания                                      46
  6.2.9.1 Введение  46
  6.2.9.2 Маскируемый запрос прерывания (INTR)  46
  6.2.9.3 Немаскируемый запрос прерывания (NMI)  46
  6.2.9.4 Сигнал сброса (установки в исходное состояние){RESET}  46
  6.2.10 Список сигналов  47
 6.3 Механизм обмена по шине                                    49
  6.3.1 Введение                                                49
  6.3.2 Пространства памяти и ввода/вывода                      50
  6.3.3 Организация памяти и ввода/вывода                       50
  6.3.4 Изменяемый размер шины данных                           51
  6.3.5 Связь с 32 и 16 разрядным устройствами памяти           52
  6.3.6 Выравнивание операндов                                  54
 6.4 Описание функционирования шины                            54
  6.4.1 Введение                                                54
  6.4.2 Конвейерная адресация                                   55
  6.4.3 Циклы чтения и записи                                   56
  6.4.3.1 Введение  56
  6.4.3.2 Неконвейерная адресация  57
  6.4.3.3 Режим неконвейерной адресации при изменении размера шины  данных 59
  6.4.3.4 Конвейерная адресация  60
  6.4.3.5 Инициализация и поддержание режима конвейерной адресации  62
  6.4.3.6 Конвейерная адресация при изменении размера шины данных  63
  6.4.4 Циклы подтверждения прерывания(INTA)                    64
  6.4.5 Цикл индикации останова                                 65
  6.4.6 Цикл индикации выключения                               65
 6.5 Дополнительные сведения о функционировании                 65
  6.6.1 Вход и выход в/из состояния подтверждения захвата шины  65
  6.6.2 Сброс в состоянии подтверждения захвата шины            66
  6.6.3 Функционирование шины в течение и после действия сигнала RESET 66
 6.7 Идентификаторы типа и модификации                          67









ОСНОВНЫЕ ХАРАКТЕРИСТИКИ
   Микропроцессор 80386 является высокопроизводительным  32-битным
процессором,  предназначенным для построения наиболее  совершенных
вычислительных  систем  сегодняшнего и  завтрашнего  дня.  Станции
САПР,  графические  системы  с высокой  разрешающей  способностью,
издательское дело, автоматизация контроля производства  -  вот  те
области,   где  сегодня  может  быть  применен  80386.  Применения
завтрашнего дня скорее будут ограничены воображением разработчиков
систем,  чем  вычислительной  мощностью  и  возможностями   80386.
Микропроцессор 80386 дает разработчику систем большое число  новых
и  эффективных возможностей, включая производительность от 3 до  4
миллион  операций  в  секунду,  полную  32-битную  архитектуру,  4
гигабитное  (2 байт) физическое адресное пространство и внутреннее
обеспечение работы со страничной виртуальной памятью. Несмотря  на
введение  в  него последних достижений микропроцессорной  техники,
80386  сохраняет совместимость по объект ному коду  с  программным
обеспечением,   в   большом   количестве   написанным   для    его
предшественников, 8086 и 80286. Особый интерес представляет  такое
свойство  80386,  как виртуальная машина, которое позволяет  80386
переключаться   в  выполнении  программ,  управляемых   различными
операционными  системами, например, UNIX и  MS-DOS.  Это  свойство
позволяет   производителям  оригинальных  систем   непосредственно
вводить прикладное
   программное обеспечение для 16-битных машин в системе  на  базе
32-битных  микропроцессоров. Объединяя в  себе  производительность
супермини  ЭВМ  и  низкую  стоимость  и  функциональную   гибкость
микропроцессора,   80386   может   открыть   новые    рынки    для
,(*`./`.f%aa.`-ke  систем. Применения, недопустимые  прежде  из-за
невысокого  быстродействия  микропроцессоров  или  не  экономности
использования супермини ЭВМ, стали теперь практически  осуществимы
благодаря  80386. Такие новейшие применения, как машинное  зрение,
распознавание речи, интеллектуальные работы и экспертные  системы,
бывшие  до  недавнего  времени в основном на стадии  эксперимента,
теперь   могут   быть  предложены  на  рынке.  Для   того,   чтобы
удовлетворить требованиям будущих применений, мало иметь 32-битные
регистры,  команды  и  шины. Эти основные свойства  являются  лишь
отправной  точкой  для  80386. В нижеследующих  разделах  в  общих
чертах  будет рассмотрена 32-битная архитектура 80386,  обладающая
такими новыми дополнительными свойствами, как:
   - высокопроизводительная технология,
   - обеспечение работы с виртуальной памятью,
   - механизмы защиты,
   - расширенное отладочное обеспечение,
   - совместимость по объектному коду с 8086/80286
    1.1 32-битная архитектура
   32-битная  архитектура 80386 обеспечивает программные  ресурсы,
необходимые  для  поддержки  "больших  "  систем,  характеризуемых
операциями  с  большими  числами,  большими  структурами   данных,
большими  программами  (или  большим  числом  программ)   и   т.п.
Физическое  адресное пространство 80386 состоит из 2  байт  или  4
Гбайт; его логическое адресное пространство состоит из 2 байт  или
64  терабайт (Тбайт). Восемь 32-битных общих регистров 80386 могут
быть  взаимозаменяемо  использованы  как  операнды  команд  и  как
переменные  различных способов адресации. Типы данных  включают  в
себя  8,  16  или  32  битные  целые и порядковые,  упакованные  и
неупакованные  десятичные, указатели, строки бит, байтов,  слов  и
двойных слов. Микропроцессор 80386 имеет полную систему команд для
операций   над  этими  типами  данных,  а  также  для   управления
выполнением   программ.  Способы  адресации   80386   обеспечивают
эффективный  доступ  к  элементам  стандартных  структур   данных:
массивов, записей, массивов записей и записей, содержащих массивы.
    1.2 Высокопроизводительная технология
   32-битная      архитектура     не      гарантирует      высокой
производительности.  Реализация  потенциала  архитектуры   требует
новейшей микроэлектронной технологии, точного разделения функций и
внимания   к   внешним  операциям  кристалла,  в   особенности   к
взаимодействию  процессора  с  памятью.  Включение  этих   свойств
обеспечивает 80386 самую высокую производительность по сравнению с
любым другим существующим микропроцессором.
   Микропроцессор  80386  реализован с  помощью  технологии  фирмы
ИНТЕЛ CH MOSIII - технологического процесса, объединяющего в  себе
возможности  высокого  быстродействия  технологии  HMOS  с   малым
потреблением технологии КМОП. Использование геометрии  1,5  мкм  и
слоев  металлизации  дает  80386  более  275000  транзисторов   на
кристалле.  Сейчас выпускаются оба варианта 80386,  работающих  на
частоте  I2 и I6 МГц без состояний ожидания, причем вариант  80386
на  16  МГц  обеспечивает скорость работы 3-4 миллиона операций  в
секунду.
   Микропроцессор  80386  разделен  внутри  на   6   автономно   и
параллельно  работающих  блоков с соответствующей  синхронизацией.
Все  внутренние шины, соединяющие эти блоки, имеют разрядность  32
бит.   Конвейерная  организация  функциональных  блоков  в   80386
допускает временное наложение выполнения различных стадий  команды
и  позволяет  одновременно  выполнять  несколько  операций.  Кроме
конвейерной обработки всех команд, в 80386 выполнение ряда  важных
./%`  f()  осуществляется  специальными аппаратными  узлами.  Блок
умножения/деления 80386 может выполнять 32-битное умножение за  9-
41  такт  синхронизации, в зависимости от числа значащих цифр;  он
может  разделить 32-битные операнды за 38 тактов (в  случае  чисел
без  знаков) или за 43 такта (в случае чисел со знаками).  Регистр
группового  сдвига 80386 может за один такт сдвигать от  1  до  64
бит.
   Во   многих  32-битных  применениях,  в  таких  как,  например,
перепрограммируемые   ЭВМ  коллективного  пользования,   требуется
преобразование логических адресов в физические и защита  памяти  с
помощью  блока  управления  памятью, БУП.  В  других  применениях,
например,  в  системах  управления  в  реальном  времени,  это  не
требуется.  Для большинства микропроцессорных систем  с  32-битной
архитектурой   такое   разделение   функций   реализуется    путем
использования дополнительного корпуса блока управления памятью.  В
отличие  от них буп 80386 входит в состав процессора как  один  из
двух  функциональных  блоков конвейерной  структуры.  Операционная
система,  управляющая  работой буп, позволяет,  например,  системе
реального  времени  обходить страничное  преобразование.  Введение
управления    памятью    внутрь    кристалла    дает    повышенную
производительность в системах, использующих буп и не приводит к ее
снижению  в  тех  системах,  которые  БУП  не  используют.   Такие
характеристики   стали   возможны  благодаря   снижению   задержек
распространения,    использованию    внутреннего    полупериодного
тактирования и параллельной работы.
   Еще  одно  свойство,  необходимое  в  одних  применениях  и  не
требующееся в других, это обработка больших чисел, в особенности в
арифметических операциях с плавающей запятой с одинарной и двойной
точностью.  Операнды с плавающей запятой имеют  большую  длину,  а
необходимый  набор команд для операций над ними является  довольно
сложным;  для реализации стандартного набора операций с  плавающей
запятой  в  соответствии со стандартом IEEE754 требуется несколько
тысяч  транзисторов.  В  этих  целях в  80386  имеется  аппаратное
обеспечение   совместной   работы   с   отдельным   математическим
сопроцессором.   К  80386  может  быть  подключен   математический
сопроцессор  либо  80287, либо более производительный  80387.  Для
прикладного  программного обеспечения сопроцессоры прозрачны;  они
лишь расширяют архитектуру 80386 с помощью регистров, типов данных
и операций, требуемых стандартом IEEE754. Комбинация 80386 и 80387
может исполнять 1,8 миллион операций.
   32-битный  процессор,  работающий  с  частотой  16  МГц,  имеет
большее быстродействие, чем большинство быстродействующих памятей,
в  следствии  чего  его производительность может  быть  ограничена
временами доступа к памяти. 80386 был спроектирован так,  чтобы  с
максимальной    эффективностью    использовать    как     наиболее
быстродействующие статистические ОЗУ, так и недорогие динамические
ОЗУ.  Для  обращения к быстрой памяти, например  типа  кэш,  80386
вырабатывает  двухтактный магистральный  цикл  для  адреса/данных.
(Памяти  типа  кэш 80386 могут иметь любой объем  от  минимального
полезного  4 Кбайт до максимального, охватывающего все  физическое
адресное пространство). Обращение к более медленной памяти (или  к
устройствам  ввода/вывода)  может производиться  с  использованием
конвейерного формирования адреса для увеличения времени  установки
данных  после адреса до 3 тактов при сохранении двухтактных циклов
в  процессоре.  Вследствие  внутреннего конвейерного  формирования
адреса при исполнении команды, 80386, как правило, вычисляет адрес
и  определяет  следующий  магистральный  цикл  во  время  текущего
магистрального   цикла.  Узел  конвейерного  формирования   адреса
передает эту опережающую информацию в подсистему памяти, позволяя,
тем   самым,   одному   банку   памяти   дешифрировать   следующий
,  #(ab`  +l-k)  цикл,  в то время как другой  банк  реагирует  на
текущий магистральный цикл.
    1.3 Обеспечение работы с виртуальной памятью
   Виртуальная   память   позволяет  ставить  максимальный   объем
программы   или  группы  программ  в  зависимость  от   имеющегося
адресного пространства на диске, а не от объема физической  памяти
(ОЗУ),  которая в настоящее время приблизительно в 400 раз дороже.
Из вытекающей отсюда гибкости выигрывают изготовители оборудования
(которые   могут   поставлять   изделия,   отличающиеся   лишь   в
конфигурациях памяти и в уровне производительности),  программисты
(которые   могут   предоставлять  управление  хранением   программ
операционным   системам   и   избегать   написания   программ    с
перекрывающимися  структурами)  и конечные  пользователи  (которые
могут вводить новые и большие по объему
прикладные программы, не опасаясь нехватки памяти).
   Виртуальная   память   реализуется  операционной   системой   с
соответствующей  аппаратурной  поддержкой.  Микропроцессор   80386
обеспечивает  работу с системами виртуальной памяти  с  сегментной
или  страничной организацией. Сегментная виртуальная память больше
подходит  для небольших 16-битных систем, в которых объем сегмента
не  превышает  64  Кбайт. 80386 обеспечивает работу  с  сегментами
объемом  до 4 Гбайт; поэтому в большинстве больших систем на  базе
80386  системы  виртуальной памяти будут использовать  возможность
страничного  запроса. Для каждой страницы 80386 вырабатывает  биты
присутствия,   занятости   или  регистрации   обращения,   которые
необходимы  для  эффективной  реализации  виртуальной  памяти   со
страничными   запросами.  В  случае  обращения  к   несуществующей
странице   80386  автоматически  делает  переход  к   операционной
системе,  если  операционная система считала с диска отсутствующую
страницу,    80386    выполняет    команду    повторно.    Высокая
производительность в работе с виртуальной памятью обеспечивается в
80386 использованием внутренней кэш-памяти для хранения страничной
информации.   Эта   кэш-память   (называемая   буфером   просмотра
трансляции,  TLB) содержит информацию о распределении  адресов  32
страниц, использовавшихся последними. Страницы виртуальной  памяти
80386  имеют  объем 4 Кбайт, храня одновременно распределение  128
Кбайт  памяти,  буфер  TLB  позволяет 80386  преобразовать  адреса
внутри  кристалла,  не  обращаясь к хранящейся  в  памяти  таблице
страниц.   В   типичных  системах  98-99%  поиска  адресов   будет
осуществляться через буфер TLB.
    1.4 Механизмы защиты
   Выполняя   3-4  миллиона  операций  в  секунду,   80386   имеет
достаточно  вычислительной мощности для обеспечения самых  сложных
систем, состоящих из сотен или тысяч программных модулей. В  таких
системах вопрос заключается не в том, будут ли ошибки, а в том как
их найти и по возможности быстро устранить и насколько их действие
может быть ограничено. Такие системы могут быть быстро отлажены  и
сделаны  более  надежными  при серийном освоении,  если  процессор
будет  проверять  каждую  команду по  критерию  защиты.  При  этом
степень   и   тип  используемой  защиты  зависит  от   конкретного
применения.  Обычно  простые  системы реального  времени  работают
достаточно хорошо без использования защиты. Различные требования к
защите  могут  быть наиболее полно удовлетворены с помощью  набора
выборочно используемых функций защиты, введенных в 80386:
   - разделение адресных пространств задач;
   - введение 0-4 уровней привилегий;
   - использование привилегированных команд (например, HALT);
   -  разделение сегментов по типам (например, кодовый сегмент или
   a%#,%-b данных);
   -  введение  прав  доступа к сегментам и  страницам  (например,
   право только чтения или только исполнения);
   - проверка границ сегмента.

   Для сохранения максимальной производительности все проверки
защиты в 80386 выполняются одновременно с выполнением команды.
    1.5 Расширенные возможности отладки
   Четыре    внутренних   отладочных   регистра   80386   помогают
значительно  сократить  время  отладки  программы.  Эти   регистры
работают  независимо  от  системы  защиты  и  поэтому  могут  быть
использованы в любых системах, включая те, которые будут  работать
без  защиты.  Не  менее  важно  и то,  что  они  дают  возможность
устанавливать  контрольные точки данных, помимо контрольных  точек
команд.  80386 отслеживает все четыре текущих адресных контрольных
точки одновременно, не снижая скорости выполнения программы.
   Контрольные точки команд вызывают переход (обычно в  программу-
отладчик)  при  выполнении команды, в большинстве процессоров  это
осуществляется  с  помощью специальной команды,  которую  отладчик
записывает  после команды, представляющей интерес. Задавая  адреса
контрольных   точек  в  регистрах,  80386  устраняет   программные
искажения,  неизбежные при внесении команд перехода  в  защищенную
или  общую  часть  программы. Контрольные  точки  данных,  наличие
которых  является, для микропроцессора свойством  уникальным,  для
целей  отладки особенно полезны. По контрольной точке данных можно
установить  момент  чтения адреса или же  момент  его  записи  или
чтения.  Используя  контрольные точки данных,  программист  может,
например,  быстро установить команду, ответственную  за  ошибочную
запись  в  структуре  данных. Кроме регистров  контрольных  точек,
80386  имеет  и  более  традиционные  отладочные  функции  в  виде
контрольных точек команд и пошагового исполнения программы.
    1.6 Совместимость с микропроцессорами 8086/80286
   Два  поколения процессоров семейства 86 предшествуют процессору
80386  -  80286 и 8086, с каждым из них 80386 совместим на  уровне
двоичных   кодов.   Благодаря   такой   совместимости   экономятся
программные  затраты,  обеспечивается быстрый  выход  на  рынок  и
доступ к обширной библиотеке программного обеспечения, написанного
для машин на базе микропроцессоров семейства 86.
   Микропроцессор  80386, конечно, может выполнять  программы  для
8086, он также может одновременно выполнять программы для 80286  и
80386.  Однако  наиболее  важным  свойством  совместимости   80386
представляется свойство, называемое VIRTUAL 86 ( виртуальный  86),
устанавливающее защищенную структуру для 8086 внутри системы задач
80386. Дополняя свойство виртуального 8086 страничной организацией
памяти, 80386 может закрепить за каждой задачей виртуального  8086
1  мегабайтное  адресное пространство в любой области  физического
адресного   пространства  80386.  Более  того,  если  операционная
система 80386 обеспечивает работу с виртуальной памятью, то задачи
виртуального 8086 могут переноситься с диска и обратно  как  любые
другие задачи. Таким образом, свойство виртуального 8086 позволяет
80386  одновременно  выполнять  программы,  написанные  для   трех
поколений семейства 86.
    1.7 Заключение
   Микропроцессор      80386     обеспечивает      ту      базовую
производительность,    которая    необходима    для     построения
высокопроизводительных микропроцессорных систем. архитектура 80386
$.ab  b.g-.  гибка:  не  ориентируясь  на  одно  представление   о
вычислительной  машине, она дает разработчикам систем  возможность
выбирать  те  варианты,  которые наилучшим  образом  подходят  для
конкретного применения.
   Полный   набор  свойств  для  управления  памятью,   включающий
сегментацию,   страничное  разделение  и  обеспечение   работы   с
виртуальной  памятью,  реализуется внутри  кристалла.  До  четырех
уровней защиты может быть использовано для возведения границ
между  программными  компонентами,  однако  защита  может   и   не
использоваться. Задачи виртуального 8086 могут обогатить 32-битные
системы  необычайно  большим  набором  стандартных  программ,  уже
разработанных  для  машин  на  базе  8086.  Производительность   и
гибкость   микропроцессора  80386  могут  быть  дополены   другими
устройствами  фирмы  ИНТЕЛ  и  доведены  до  максимума.   К   этим
устройствам     относятся     контроллеры     локальных     сетей,
усовершенстванные   контроллеры   прямого   доступа   к    памяти,
контроллеры дисков и графические сопроцессоры.

ПРИКЛАДНАЯ АРХИТЕКТУРА
   Микропроцессор 80386 дает разработчику прикладных  программ  на
языке  ассемблера или разработчику компилятора широкий  набор  32-
битных ресурсов. В данной главе эти ресурсы рассматриваются в трех
разделах:

   1)регистры;
   2)память и логическая адресация;
   3)типы данных и команды.

    2.1 Регистры
   Во   всех   вычислительных  машинах,  включая  80386,   имеются
регистры,  которые  программисты могут использовать  для  срочного
промежуточного  хранения. К данным, хранящимся в  этих  регистрах,
можно  обратиться  без магистральных циклов, что  сокращает  время
использования   команды  и  предоставляет  больше   магистрального
времени другим процессором, например, контроллерам прямого доступа
к  памяти.  В  80386  имеется  восемь программно  доступных  общих
регистров,   еще  восемь  регистров  добавляется  при  подключении
математического сопроцессора 80287 или 80387. Два других  регистра
80386,  предназначенных  не для хранения данных,  а  для  хранения
статуса  и  управления процессором, также важны для программистов.
Это регистр флагов и счетчик команд.
   2.1.1  Общие регистры
   Как  видно  из рис.2-1, Общие регистры 80386 имеют  разрядность
32  бит,  внутренние  шины данных, внешние шины  данных  и  адреса
процессора также имеют разрядность 32 бит. В соответствии с  любым
обще  принятым  определением  80386  являются  32-битной  машиной.
Однако    в   соответствии   с   практикой   других   процессоров,
предшественниками которых были 16-битные машины,  принято,  что  в
80386 слово означает 16 бит, а 32-бита образуют двойное слово.
   Как  видно  из  рис.2-1 все общие регистры могут использоваться
как  16  или  32-битные  регистры, а  четыре  из  них  могут  быть
использованы  и  как 8-битные регистры. Почти  во  всех  операциях
любой  общий регистр может быть определен как операнд.  Любые  два
регистра,  например, могут быть перемножены. Аналогичным  образом,
любой  регистр  при  вычислении адреса может  быть  использован  в
качестве  базового или индексного. Поскольку в любой  практической
программе  требуется  стек, общий регистр ESP подразумевается  как
указатель вершины стека.
   2.1.2  Флаги и счетчик команд
   На  рис.2-2 показан формат регистра флагов 80386. Флаги делятся
на  три  класса:  статусные, управляющие  и  системные.  Процессор
устанавливает статусные флаги после многих команд, чтобы  отразить
результат  операции.  Например, если два  операнда  при  сравнении
оказываются  равными,  то  процессор устанавливает  флаг  нулевого
результата.  Другие  команды, преимуществен но  команды  условного
перехода,  проверяют  флаг статуса и дают различные  результаты  в
зависимости  от  состояния флага. Программист может  устанавливать
флаги   управления  для  изменения  семантики  некоторых   команд.
Например,  команда  просмотра строки  может  иметь  направление  в
сторону  больших  или меньших адресов в зависимости  от  состояния
флага направления. Системные флаги предназначены для использования
операционной   системой   и   в   прикладных   программах    могут
игнорироваться. (Системные флаги рассматриваются в  главе  3).  На
практике  для  исключения  возможного изменения  системных  флагов
прикладными  программами  может быть использована  система  защиты
80386.

   1 - статусные флаги
   2 - перенос
   3 - четность
   4 - вспомогательный перенос
   5 - ноль
   6 - знак
   7 - переполнение

   Счетчик  команд  80386, обозначаемый EIP, имеет разрядность  32
бит.   Счетчик   команд   управляет   выборкой   команд   (включая
предварительную  выборку)  и  после выполнения  команды  процессор
автоматически  увеличивает  его на I. Содержимое  счетчика  команд
меняется по прерываниям, в особых и при выполнении команд меняется
по  прерываниям, в особых случаях и при выполнении команд передачи
управления, например, переходах и вызовах.
   2.1.3  Регистры математического сопроцессора
   Регистры  математического сопроцессора, показанные на  рис.2-3,
повышают  производительность систем с большим объемом  вычислений.
При  подключении  к 80386 математического сопроцессора  80287  или
80387  эти  регистры  добавляются  к  80386.  Хотя  математический
сопроцессор  распознает  форматы целых, упакованных  десятичных  и
чисел  с  плавающей  запятой  различной  длины,  внутри  него  все
величины  хранятся  в  формате с плавающей запятой  в  регистровом
стеке  8х80 бит. В математических операциях могут быть как неявные
ссылки  на верхние элементы стека, так и явные на другие регистры.
Статусный   регистр  содержит  указатель  вершины  стека,   флаги,
идентифицирующие  особые случаи (например,  переполнение)  и  коды
состояний,   отражающие  результат  последней   команды.   Регистр
управления  содержит  биты вариантов и масок, которые  программист
может устанавливать для выбора алгоритма округления, интерпретации
бесконечности,  а  также  задания того, как  будут  обрабатываться
особые случаи - сопроцессором или программно.

                         1-REGISTER STACK

               79  78          64  65                   0
               +----------------------------------------+
               |  |  SIGNIFICAND  |     EXSPONENT       |
               +--+---------------+---------------------|
               |  |       2       |         3           |
               +--+---------------+---------------------|
               |  |               |                     |
               +--+---------------+---------------------|
               |  |               |                     |
               +--+---------------+---------------------|
               |  |               |                     |
               +--+---------------+---------------------|
               |  |               |                     |
               +----------------------------------------+

                   15                0
                   +---------------------+
                4 -|  CONTHOL REGISTER   |
                   +---------------------|
                5 -|   STATUS REGISTER   |
                   +---------------------+

   Рис.2-3   Регистры   математического   сопроцессора;    1     -
регистровый  стек;  2  -  порядок;  3  -  мантисса;  4  -  регистр
управления; 5 - регистр статуса.
    2.2 Память и логическая адресация
   Для  адресации  операндов  в  4г  байтном  физическом  адресном
пространстве  прикладные  программы  80386  используют  логическую
адресацию.  Процессор  автоматически  транслирует  эти  логические
адреса   в   физические,  которые  затем  выдаются  на   системную
магистраль.  Как  будет  рассмотрено более  подробно  в  главе  3,
операционная   система  80386  может  перестраивать  представление
прикладной   программы  о  ее  логическом  адресном  пространстве.
Например,  операционная система 80386 может определить  логическое
адресное пространство так, как это делается во многих архитектурах
,  а  именно, как простой массив из 2 байт. С другой стороны,  она
может  организовать  логическое адресное  пространство  как  набор
сегментов  переменной длины. Операционная система может определить
как  большое число сегментов, так и всего несколько, в зависимости
от   ее  представления  о  логической  памяти;  80386  не  диктует
конкретное  использование  сегментов и позволяет  использовать  их
так, как того требует данное применение. Читая дальнейшие разделы,
следует   помнить  о  том,  что  степень  активного  использования
сегментов   прикладной  программой  зависит  от  того,   как   они
организованы операционной системой.
   2.2.1  Сегменты
   Как  было  отмечено выше, операционная система может определить
адресное  пространство как один или несколько сегментов.  Сегменты
являются   логическими   блоками,  хорошо   приспособленными   под
программные  структуры,  которые по сути  своей  имеют  переменную
длину.   Например,   1516-байтная  процедура  полностью   содержит
сегменте  1516 байт, так же, как и 8 мегабайтный массив (например,
дисплейный буфер 1028X1028X8) полностью входит в сегмент такого же
размера. Имея для сегментов соответствующие архитектурные решения,
80386  повышает  производительность  систем,  в  которых  механизм
структурирования   основан   на  сегментах.   (Страницы,   которые
рассматриваются  в главе 3, имеют фиксированные  размеры;  они  не
приспособлены  под  программные структуры, но, с  другой  стороны,
более  подходят  для  таких  функций  операционной  системы,  как,
например, пересылки между ОЗУ и диском).
   Сегмент в системе 80386 может иметь любой размер от 1 байта  до
4гбайт.  Для  каждого  сегмента операционная система  поддерживает
'  $  --k)  архитектурой дескриптор, содержащий описание сегмента.
Описание сегмента включает в себя 32-битный базовый адрес и  длину
сегмента,   а   также   информацию   о   защите,   предотвращающей
неправильное  использование сегмента. Ввиду того, что  дескрипторы
поддерживаются    операционными   системами,    их    рассмотрение
откладывается   до   главы  3.  Прикладные  программы   пользуются
дескрипторами  лишь  косвенно, обращаясь  к  сегментам  с  помощью
логических адресов.
   2.2.2  Логические адреса
   Ввиду  того,  что  программа  может  в  принципе  обращаться  к
нескольким    сегментам,    логический    адрес    80386    должен
идентифицировать сегмент. Поэтому логический адрес  80386  состоит
из   двух  частей,  16-битного  селектора  сегмента  и  32-битного
смещения  в  выбранном сегменте (см. Рис.2-4). После  селектора  в
логическом  адресе  указывает на дескриптор сегмента.  В  принципе
процессор  определяет  адрес сегмента  с  помощью  селектора,  как
указателя  для  таблицы дескрипторов, поддерживаемой  операционной
системой.  Добавление  смещения  логического  адреса  к   базовому
адресу, полученному по дескриптору сегмента, дает адрес операнда.

     1 - ЛОГИЧЕСКИЙ АДРЕС              2 - СЕГМЕНТ
                                     +---------------+
 47     3   31 32    4     0         |           |   |
 +-------------------------+         |           |   |
 |   СЕЛЕКТОР |  СМЕЩЕНИЕ  |         |           |   |
 +-------------------------+         |           |   |
   |                 |               |     5     |   | 7
   |                 |               +-----------|   |
   |                 +--------------?| ОПЕРАНД   |   | ДО 2
   |                            |    +-----------|   |
   |  ТАБЛИЦА ДЕСКРИПТОРОВ      |    |           |   | БАЙТ
   |   +-----------------+      |    |           |   |
   |   |                 |      |    |           |   |
   |   |                 |    +-----?|           |   |
   |   |       8         |    |      |           |   |
   |   +-----------------+    |      +-----------+   |
   +--?|  ДЕСКРИПТОР     ------                   ----
       +-----------------+
       |                 |
       |                 |
       +-----------------+

                   Рис.2-4.
   2.2.3  Регистры сегментов и дескрипторов

   Для повышения эффективности логической адресации в 80386
введено 6 регистров сегментов и дескрипторов (см. Рис.2-5) 1.

   1 - СЕГМЕНТ         2 - ДЕСКРИПТОР
 15              0 63                             0
 +---------------+ +------------------------------+
 |  3-селектор   | |4-базовый адрес, размер и т.д.| 5 КОДОВЫЙ СЕГМЕНТ
 |               | |                              |
 +---------------| +------------------------------|
 |               | |                              | 6 СТЕК
 +---------------| +------------------------------|
 |               | |                              | 7 ДАННЫЕ
 +---------------| +------------------------------|
 |               | |                              | 7
 +---------------| +------------------------------|
 |               | |                              | 7
 +---------------| +------------------------------|
 |               | |                              | 7
 +---------------+ +------------------------------+

   Фактически    эти   регистры   используются   как    программно
управляемый  кэш,  позволяющий  исключить  из  большинства  команд
селекторы и производить трансляцию большинства логических  адресов
внутри кристалла без обращений к таблице дескрипторов.
   Адресные   ссылки   в  большинстве  программ   производятся   в
небольших  адресных диапазонах (такая "локальность ссылок"  делают
виртуальную память практичной). Например, если процедура  хранится
в  сегменте, то вероятнее всего большое число команд будет считано
из  сегмента прежде, чем управление перейдет к другой процедуре  в
другом   сегменте.  Локальность  ссылок  в  80386   обеспечивается
программно,  путем  запоминания во внутренних регистрах  последних
использовавшихся  селекторов и дескрипторов.  Внутреннее  хранение
дескрипторов   позволяет   транслировать  большинство   логических
адресов без обращений к памяти, занимающих много времени. В  любой
момент  времени  можно  адресовать  до  шести  сегментов:  кодовый
сегмент,  сегмент  стека и четыре сегмента  данных.  В  сегментных
регистрах  CS,  SS,  DS,  ES,  FS и  GS  хранятся  селекторы  этих
сегментов.  Их  дескрипторы  хранятся в соответствующих  регистрах
дескрипторов.  В  случае  необходимости  программа  может  сделать
адресуемым  новый  сегмент  с помощью  загрузки  селектора  нового
сегмента    в    сегментный   регистр.   Процессор   автоматически
поддерживает регистры дескрипторов, загружая требуемый  дескриптор
каждый раз, когда программа меняет
   сегментный  регистр. (Фактически, регистры  дескрипторов  могут
загружаться  только  процессором;  программе  они  не   доступны).
Счетчик команд содержит смещение текущей команды в текущем кодовом
сегменте  (определяемом  регистром CS),  а  регистр  ESP  содержит
смещение  вершины  стека  в текущем сегменте  стека  (определяемом
регистром  SS).Высокая эффективность дешифрации команд достигается
для  большинства  из  них  благодаря отсутствию  явных  ссылок  на
сегментные  регистры. Например, в командах перехода и занесение  в
стек ссылки, соответственно, на регистры CS и SS, делаются неявно.
В  случае  необходимости программист может указать  процессору  на
использование   конкретного  сегмента  в   данной   команде,   что
осуществляется   путем  добавления  перед  командой   однобайтного
префикса  перемены  сегмента.  Префикс  указывает  процессору   на
регистр  сегмента,  который  должен  использоваться  в  трансляции
адреса в следующей за префиксом команде.
   Сегмент, базовый адрес которого равен 0, а предельный размер  -
4    Гбайт,   определяет   4   гигабайтное   логическое   адресное
пространство.  Поскольку  процессор  выбирает  сегментный  регистр
автоматически,  то  команда может ссылаться  на  операнд  в  любой
ячейке   этого   4гбайтного  пространства  с  помощью   32-битного
смещения. Если, как показано на рис.2-6, Все регистры дескрипторов
будут загружены базовым адресом 0 к предельным размерам 4гбайт, то
в  этом случае сегменты исчезают. Любой байт в логическом адресном
пространстве,  независимо от того, командный  это  байт  или  байт
данных,  или  же элемент стека, адресуется с помощью простого  32-
байтного  смещения. Таким образом, сегментные регистры дают  80386
шесть  одновременно  адресуемых  логических  адресных  пространств
размером  до  4  Гбайт  каждое. В том случае,  если  эти  сегменты
совпадают,   то   программа  будет  располагать  одним   4гбайтным
+.#(g%a*(,  адресным пространстве, идентичным такому пространству,
которое обеспечивается менее гибкими 32-битными архитектурами.
   2.2.4  Способы адресации
   Микропроцессор     80386     обеспечивает     регистровую     и
непосредственную  адресацию операндов, содержащихся,  соответствен
но,   в   регистрах  или  командах.  Еще  более  важным   является
способность   80386   обеспечивать  различные  способы   адресации
необходимые для эффективного обращения к таким элементам  структур
данных в памяти как массивы, записи (структуры), массивы записей и
записи,  содержащие  массивы. При этом программа  определяет  поле
смещения  в  логическом  адресе по одному  из  способов  адресации
памяти   в   80386.  Процессор  80386  вычисляет   поле   смещения
логического адреса по следующей формуле:

смещение = база + (индекс X масштаб) + отклонение

   Для  вычисления смещения могут быть использованы любые или  все
переменные базы, индекса и отклонения. Переменные базы  и  индекса
являются  величинами,  хранящимися в общих регистрах,  а  величина
отклонения  содержится в команде. Для хранения  базы  или  индекса
может  быть использован любой общий регистр. Величина в  индексном
регистре  может  быть  отмасштабирована  (умножена)  коэффициентом
1,2,4  или  8,  что  дает возможность делать  ссылки  на  элементы
массива  или  записи  соответствующей длины.  Величина  отклонения
может   иметь   разрядность  8  или  32  бит  и   интерпретируется
процессором как величина со знаком в дополнительном коде.
   Разумные комбинации базы, индекса и отклонения дают следующие
способы адресации памяти 80386:

   - прямая: используется только отклонение;
   - регистровая косвенная: используется только база;
   - базовая: используется база + отклонение;
   - индексная: используется индекс (в масштабе);
   - индексная с отклонением: используется индекс (в масштабе) +
   отклонение;
   - базовая индексная: используется база + индекс (в масштабе);
   - базовая индексная с отклонением: используется база + индекс
   (в масштабе) + отклонение;
    2.3 Типы данных и команды
   В   данном  разделе  будут  рассмотрены  команды,  чаще   всего
используемые   программистами.   Поскольку   большинство    команд
оперирует  с  конкретными типами данных (например, с целыми),  эти
типы   и   команды  рассматриваются  совместно.  Привилегированные
команды,  включая те, которые осуществляют ввод/вывод и  обработку
прерываний будут рассмотрены в главе 3.
   2.3.1  Главные типы данных
   В  табл.  2-1 Перечислены типы данных и команды, обеспечиваемые
процессором  80386.  В  этой  таблице  приведены  только  наиболее
употребимые  команды.  Варианты  команд,  такие  как   (в   случае
циклического сдвига) циклический сдвиг вправо и циклический  сдвиг
через перенос, также опущены.
                                                         Таблица 2-1
                   ГЛАВНЫЕ ТИПЫ ДАННЫХ И КОМАНДЫ
+------------------------------------------------------------------------------+
|     ТИП      |  РАЗРЯДНОСТЬ   |                   КОМАНДЫ 3
+--------------+----------------+----------------------------------------------|
|   ЦЕЛОЕ,     | 8, 16, 32 БИТ  | ПЕРЕСЫЛКА, ОБМЕН, ПРЕОБРАЗОВАНИЕ, ПРОВЕРКА,  |
| ПОРЯДКОВОЕ   |                | СРАВНЕНИЕ, ПЕРЕВОД, СДВИГ, ДВОЙНОЙ, СДВИГ,   |
|              |                | ЦИКЛИЧЕСКИЙ СДВИГ, ОТРИЦАНИЕ, ЛОГИЧЕСКОЕ "И",|
|              |                | "ИЛИ", ИСКЛЮЧАЮЩЕЕ "ИЛИ".                    |
|              |                |                                              |
|              |                | СЛОЖЕНИЕ, ВЫЧИТАНИЕ,  УМНОЖЕНИЕ, ДЕЛЕНИЕ,    |
|              |                | УВЕЛИЧЕНИЕ НА 1, УМЕНЬШЕНИЕ НА 1,  ПЕРЕВОД   |
|              |                | (ПЕРЕСЫЛКА С РАСШИРЕНИЕМ ЗНАКА/НОЛЯ)         |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
|НЕУПАКОВАННОЕ |   1 ЦИФРА      |      КОРРЕКЦИЯ ДЛЯ СЛОЖЕНИЯ, ВЫЧИТАНИЯ,      |
| ДЕСЯТИЧНОЕ   |                |              УМНОЖЕНИЯ, ДЕЛЕНИЯ              |
+--------------+----------------+----------------------------------------------|
| УПАКОВАННОЕ  |   2 ЦИФРЫ      |     КОРРЕКЦИЯ ДЛЯ СЛОЖЕНИЯ, ВЫЧИТАНИЯ        |
| ДЕСЯТИЧНОЕ   |                |                                              |
+--------------+----------------+----------------------------------------------|
|   СТРОКА     | 0-4 ГБАЙТ СЛОВ |      ПЕРЕСЫЛКА, ЗАГРУЗКА, ЗАПОМИНАНИЕ,       |
| БАЙТОВ, СЛОВ,|  ДВОЙНЫХ СЛОВ  |         СРАВНЕНИЕ, ПРОСМОТР, ПОВТОР          |
| ДВОЙНЫХ СЛОВ |                |                                              |
+--------------+----------------+----------------------------------------------|
|  СТРОКА БИТ  |   1-4ГБИТ      |        ПРОВЕРКА, ПРОВЕРКА И УСТАНОВКА,       |
|              |                |   ПРОВЕРКА И ГАШЕНИЕ, ПРОВЕРКА И ДОПОЛНЕНИЕ, |
|              |                |         ПРОСМОТР, ВСТАВЛЕНИЕ, ИЗЪЯТИЕ        |
+--------------+----------------+----------------------------------------------|
|  ЛОКАЛЬНЫЙ   |   32 БИТ       |               (СМ. ПОРЯДКОВОЕ)               |
|  УКАЗАТЕЛЬ   |                |                                              |
+--------------+----------------+----------------------------------------------|
|  ГЛОБАЛЬНЫЙ  |   48 БИТ       |                   ЗАГРУЗКА                   |
|  УКАЗАТЕЛЬ   |                |                     3
+------------------------------------------------------------------------------+

Примечание:  Локальный указатель - 32 битное смещение в  сегменте,
определенном  одной  из регистрированных пар сегмента/дескриптора.
Глобальный  указатель - это полный логический адрес, состоящий  из
селектора  и  смещения.  На  рис.2-7 показаны  примеры  того,  как
главные типы данных хранятся в памяти. Многобайтные элементы могут
размещаться  с  любого  адреса байта в  зависимости  от  структуры
магистрали, для обращения к операндам, размещенным по  адресу,  не
кратным    длине    операнда   в   байтах,   могут   потребоваться
дополнительные   магистральные   циклы.   Поэтому   для    высокой
производительности,   не   зависящей  от   структуры   магистрали,
большинство программ ориентируют словные операнды из двойных  слов
на границах двойных слов и т.п.


|  5  |  4  |  3  |  2  |  1  |  0  | ОТНОСИТЕЛЬНЫЕ АДРЕСА-1
+------------------------------------------------------------
---------------- ВОЗРАСТАНИЕ ПОРЯДКА - 2

                              7      0
                              +-------+
                              |       |3
                              |       | БАЙТ ПОРЯДКОВОГО
                              +-------+
                            +-----------+
                     4            |
                  ВЕЛИЧИНА --------

             31                      0
             +------------------------+
             | |                      |5
             | |                      | ДВОЙНОЕ СЛОВО ЦЕЛОГО
             +------------------------+
              -------- ВЕЛИЧИНА - 4 -
              L------- ЗНАК       6

                              7      0
                              +-------+
                              |       |7
                              |       |   НЕУПАКОВАННОЕ
                              L--------    ДЕСЯТИЧНОЕ

                              7   3   0
                              +-------+
                              |   |   |8
                              |   |   |   УПАКОВАННОЕ
                              L---+----   ДЕСЯТИЧНОЕ

   +-------  ------------------------+
   |     |    |     |     |     |    | 9
   |     |    |     |     |     |    |   СТРОКА БАЙТОВ
   +-------  ------------------------+
             10 МЛАДШИЙ БАЙТ -------

             31                      0
             +-----------------------+
             |                       | 11
             |                       | ЛОКАЛЬНЫЙ УКАЗАТЕЛЬ
             +-----------------------+

    47       31                      0
    +--------------------------------+
    |        |                       | 12
    |   13   |          14           | ГЛОБАЛЬНЫЙ УКАЗАТЕЛЬ
    +--------------------------------+
    +--------------------------------+
     СЕЛЕКТОР         СМЕЩЕНИЕ

   2.3.2  Типы данных математического сопроцессора
   Математический  сопроцессор 80287 или 80387 добавляют  к  типам
данных и командам процессора 80386 свои, приведенные в табл.2-2. В
большинстве   прикладных  задач  входные  величины  и   получаемые
результаты  хранятся  в  в