 |
є є є ЙНКННН>є є є
є є 8 є є є є є
є МНННННННННННННННННє є ИНННННННННННј є
ИНН>є дескриптор МННННј ННј
МННННННННННННННННН№
є є
є є
ИНННННННННННННННННј
Рис.2-4.
2.2.3. Регистры сегментов и дескрипторов
Для повышения эффективности логической адресации в 80386
введено 6 регистров сегментов и дескрипторов (см. Рис.2-5).
1 - Сегмент 2 - Дескриптор
15 0 63 0
ЙННННННННННННННН» ЙНННННННННННННННННННННННННННННН»
є 3-селектор є є 4-базовый адрес,размер и т.Д.є 5 Кодовый
є є є є сегмент
МННННННННННННННН№ МНННННННННННННННННННННННННННННН№
є є є є 6 Стек
МННННННННННННННН№ МНННННННННННННННННННННННННННННН№
є є є є 7 Данные
МННННННННННННННН№ МНННННННННННННННННННННННННННННН№
є є є є 7
МННННННННННННННН№ МНННННННННННННННННННННННННННННН№
є є є є 7
МННННННННННННННН№ МНННННННННННННННННННННННННННННН№
є є є є 7
ИНННННННННННННННј ИННННННННННННННННННННННННННННННј
8 остальные поля дескрипторов описываются в главе 3.
Фактически эти регистры используются как программно уп-
равляемый кэш, позволяющий исключить из большенства команд
селекторы и производить трансляцию большинства логических ад-
ресов внутри кристалла без обращений к таблице дескрипторов.
Адресные ссылки в большинстве программ производятся в
небольших адресных диапазонах (такая "локальность ссылок" де-
лают виртуальную память практичной). Например, если процедура
хранится в сегменте, то вероятнее всего большое число команд
будет считано из сегмента прежде, чем управление перейдет к
другой процедуре в другом сегменте. Локальность ссылок в
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гбайтным логическим адресным
пространстве, идентичным такому пространству, которое обеспе-
чивается менее гибкими 32-битными архитектурами.
2.2.4. Способы адресации
Микропроцессор 80386 обеспечивает регистровую и непос-
редственную адресацию операндов, содержащихся, соответствен-
но, в регистрах или командах. Eще более важным является спо-
собность 80386 обеспечивать различные способы адресации необ-
ходимые для эффективного обращения к таким элементам структур
данных в памяти как массивы, записи (структуры), массивы за-
писей и записи, содержащие массивы. При этом программа опре-
деляет поле смещения в логическом адресе по одному из спосо-
бов адресации памяти в 80386. Процессор 80386 вычисляет поле
смещения логического адреса по следующей формуле:
смещение = база + (идекс X масштаб) + отклонение
Для вычисления смещения могут быть использованы любые
или все переменные базы, индекса и отклонения. Переменные ба-
зы и индекса являются величинами, хранящимися в общих регис-
рах, а величина отклонения содержится в команде. Для хранения
базы или индекса может быть использован любой общий регистр.
Величина в индексном регистре может быть отмаштабирована (ум-
ножена) коэффициэнтом 1,2,4 или 8, что дает возможность де-
лать ссылки на элементы массива или записи соответствующей
длины. Величина отклонения может иметь разрядность 8 или 32
бит и интерпретируется процесспром как величина со знаком в
дополнительном коде.
Разумные комбинации базы, индекса и отклонения дают сле-
дующие способы адресации памяти 80386:
- прямая: используется только отклонение;
- регистривая косвенная: используется только база;
- базовая: используется база + отклонение;
- индексная: используется индекс (в масштабе);
- индексная с отклонением: используется индекс (в масш-
табе) + отклонение;
- базовая индексная: используется база + индекс (в масш-
табе);
- базовая индексная с отклонением: используется база +
индекс (в масштабе) + отклонение;
2.3. Типы данных и команды
В данном разделе будут рассмотрены команды, чаще всего
используемые программистами. Поскольку большинство команд
оперирует с конкретными типами данных (например, с целыми),
эти типы и команды рассматриваются совместно. Привилегирован-
ные команды, включая те, которые осуществляют ввод/вывод и
обработку прерываний будут рассмотрены в главе 3.
2.3.1. Главные типы данных
В табл. 2-1 Перечислены типы данных и команды, обеспечи-
ваемые процессором 80386. В этой таблице приведены только на-
иболее употребимые команды. Варианты команд, такие как (в
случае циклического сдвига) циклический сдвиг вправо и цикли-
ческий сдвиг через перенос, также опущены.
Таблица 2-1.
Главные типы данных и команды
ЙНННННННННННННЛНННННННННННННННЛННННННННННННННННННННННННННННН»
є Тип є Разрядность є Команды є
МНННННННННННННОНННННННННННННННОННННННННННННННННННННННННННННН№
єЦелое, є 8, 16, 32 бит єПересылка, обмен, преобразо-є
єпорядковое є євание, проверка, сравнение,є
є є єперевод, сдвиг, двойнойє
є є єсдвиг, циклический сдвиг, от-є
є є єрицание, логическое "и",є
є є є"или", исключающее "или".є
є є єСложение, вычитание, умноже-є
є є єние, деление, увеличение нає
є є є1, уменьшение на 1, переводє
є є є(пересылка с расширением зна-є
є є єка/ноля) є
МНННННННННННННОНННННННННННННННОННННННННННННННННННННННННННННН№
єНеупакованноеє 1 цифра єКоррекция для сложения, є
єдесятичное є євычитания,умножения, деления є
МНННННННННННННОНННННННННННННННОННННННННННННННННННННННННННННН№
єУпакованное є 2 цифры єКоррекция для сложения, є
єдесятичное є євычитания є
МНННННННННННННОНННННННННННННННОННННННННННННННННННННННННННННН№
єСтрока є 0-4гбайт слов,єПересылка, загрузка, є
є(байтов,слов,є двойных слов єзапоминание, сравнение, є
єдвойных слов)є єпросмотр, повтор є
МНННННННННННННОНННННННННННННННОННННННННННННННННННННННННННННН№
єСтрока бит є 1-4гбит єПроверка, проверка и установ-є
є є єка, проверка и гашение, про-є
є є єверка и дополнение, просмотр,є
є є євставление, из'ятие є
МНННННННННННННОНННННННННННННННОННННННННННННННННННННННННННННН№
єЛокальный є 32 бит є (см. Порядковое) є
єуказатель є є є
МНННННННННННННОНННННННННННННННОННННННННННННННННННННННННННННН№
єГлобальный є 48 бит є Загрузка є
єуказатель є є є
ИНННННННННННННКНННННННННННННННКНННННННННННННННННННННННННННННј
Примечание. Локальный указатель - 32 битное смещение в
сегменте, определенном одной из регистрированных пар сегмен-
та/дескриптора. Глобальный указатель - это полный логический
адрес, состоящий из селектора и смещения.
На рис.2-7 показаны примеры того, как главные типы дан-
ных хранятся в памяти. Многобайтные элементы могут размещать-
ся с любого адреса байта в зависимости от структуры магистра-
ли, для обращения к операндам, размещенным по адресу, не
кратным длине операнда в байтах, могут потребоваться дополни-
тельные магистральные циклы. Поэтому для высокой производи-
|