Введение в микропроцессор 80386 --------------------------------------------------------------- Корректура: Олег Мартыненко Ё http://alec-soft.narod.ru/ --------------------------------------------------------------- СОДЕРЖАНИЕ ОСНОВНЫЕ ХАРАКТЕРИСТИКИ 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 масштаб) + отклонение Для вычисления смещения могут быть использованы любые или все переменные базы, индекса и отклонения. Переменные базы и индекса являются величинами, хранящимися в общих регистрах, а величина отклонения содержится в команде. Для хранения базы или индекса может быть использован любой общий регистр. Величина в индексном регистре может быть