Смекни!
smekni.com

80386 процессор (стр. 2 из 5)

При использовании регистров сегментов МП 80386 с каждым выбранным сегментом связывает базовый адрес. При адресации единицы данных внутри сегмента к базовому адресу сегмента до­бавляется 32-разрядный относительный адрес. Если сегмент выб­ран загрузкой селектора сегмента в регистр сегмента, то коман­дам манипуляции данными нужен только этот относительный адрес.

4.3. Регистры управления сегментированной памятью

Регистр таблицы глобальных дескрипторов (GDTR). Содержит 32-разрядный линейный адрес и 16-разрядную границу таблицы глобальных дескрипторов.

Регистр таблицы локальных дескрипторов (LDTR). Содержит 16-разрядный селектор для таблицы локальных дескрипторов. Так как эта таблица является специфичным для задачи сегментом, то она определяется значением селектора, хранимым в регистрах системного сегмента. Регистр дескриптора сегмента, связанный с этой таблицей, програмно недоступен.

Регистр таблицы дескрипторов прерываний (IDTR). Указывает на таблицу точек входа в программы обработки прерываний. Ре­гистр содержит 32-разрядный линейный базовый адрес и 16-раз­рядную границу таблицы дескрипторов прерываний (IDT).

Регистр задачи (TR). Указывает на информацию, необходимую процессору для определения текущей задачи. Регистр TR содержит 16-разрядный селектор дескриптора сегмента состояния задачи. Поскольку этот сегмент специфичен для задачи, то он определя­ется значениями селекторов, хранящихся в регистрах системного сегмента. Заметим, что с каждым регистром системных сегментов связан программно недоступный регистр дескриптора сегмента.

4.5. Указатель команд

Расширенный указатель команд (EIP) является 32-разрядным регистром. Он содержит относительный адрес следующей команды, подлежащей выполнению. Относительный адрес отсчитывается от начала сегмента текущей программы. Указатель команд не­посредственно не доступен программисту, но он управляется явно командами управления потоком, прерываниями и исключениями.

Младшие 16 бит регистра EIP называются IP и могут быть использованы процессором независимо. Это свойство полезно при исполнении команд МП 8086 и 80286, которые имеют только ре­гистр IP.

4.6. Регистры управления

МП 80386 имеет три 32-разрядных регистра управления (CR0, CR2 и CR3, а CR1 зарезервирован фирмой Intel), в которых хра­нятся состояния машины или глобальные состояния. Глобальное состояние - это такое состояние, к которому может получить доступ любой из логических блоков системы или которое управля­ет этими блоками. Вместе с регистрами системных адресов эти регистры хранят информацию о состоянии машины, которая влияет на все задачи в системе. Для доступа к регистрам управления определены команды их загрузки и сохранности содержимого.

Системным программистам регистры управления доступны только через варианты команды MOV, которые позволяют их загру­жать или сохранять в регистрах общего назначения.

4.7. Регистры отладки

Шесть доступных программисту регистров отладки (DR0-DR3, DR6 и DR7) расширяют возможности отладки в МП 80386, они уста­навливают точки останова по данным и позволяют устанавливать точки останова по командам без модификации сегментов программ. Регистры DR0-DR3 предназначены для четырех линейных точек останова. Регистры DR4 и DR5 зарезервированы фирмой Intel для будущих разработок. Регистр DR6 показывает текущее состояние точек останова, а регистр DR7 используется для установки точек останова.

4.8. Буфер ассоциативной трансляции

Буфер ассоциативной трансляции (TLB) - это кэш-память, используемая для трансляции линейных адресов в физические.

Механизм проверки TLB является уникальным для МП 80386 и может быть не реализован в том же виде в будущих процессорах. Программы, которые используют этот механизм в его нынешнем ви­де, могут оказаться несовместимыми с будущими процессорами.

5. Система команд

5.1. Формат команд

Команды МП 80386 состоят из отдельных элементов и могут иметь различные форматы. Из всех описанных ниже элементов только один (код операции, Коп) обязательно присутствует в лю­бой команде. Остальные элементы могут отсутствовать, что опре­деляется характером операции, а также местоположением и типом операндов.

Команды состоят из следующих элементов: необязательных префиксов; одного или двух байтов кодов операции; возможно - описателя адреса, который включает байт Mod R/M и байт масшта­ба, индекса и базы; смещения - если требуется; поля не­посредственных данных - если требуется.

Префиксы - один или несколько байтов, предшествующих ко­манде и модифицирующих операцию этой команды. Имеется 4 типа префиксов.

1. Повторение - используется с командами обработки строк; заставляет команду воздействовать на каждый элемент строки.

2. Размер операнда - переключает разрядность операндов, устанавливая их 32-разрядными или 16-разрядными.

3. Размер адреса - переключает разрядность адреса, опре­деляя образование 32-разрядных или 16-разрядных адресов.

4. Замена сегмента - в явной форме указывает, какой сег­ментный регистр должна использовать команда. Префикс отменяет действующий по умолчанию выбор сегментного регистра, обычно осуществляемый МП 80386 при выполнении этой команды.

Код операции (Коп) - описывает операцию, выполняемую ко­мандой. Некоторым командам присущи несколько кодов операций, каждый из которых описывает определенный вариант операции.

Описатель регистра - в команде могут быть описаны один или два регистра в качестве операндов. Описатель регистра мо­жет присутствовать как в байте кода операции, так и в байте описателя режима адресации.

Описатель режима адресации. Этот элемент, если он присутствует, описывает, является ли операнд содержимым ре­гистра или ячейки памяти. Если операнд находится в памяти, описатель режима указывает, надо ли использовать смещение, ин­дексный регистр, регистр базы и масштабирование.

Байты MOD R/M и SIB. Большинство команд, ссылающихся на операнд, находящийся в памяти, содержат после байта основного кода операции еще байт формы адресации. Этот байт описывает используемую форму адреса. Определенные значения кода поля MOD R/M указывают на наличие второго адресного байта SIB.

Байты MOD R/M и SIB содержат следующую информацию:

- тип индексации или номер регистра, используемого в ко­манде;

- используемый регистр или дополнительную информацию о выборе команды;

- информацию о базе, индексе и масштабе;

Смещение. Если описатель режима адресации указывает, что при вычислении адреса операнда будет использовано смещение, в состав кода команды включается поле смещения. Смещение представляет собой 8-, 16- или 32-разрядное целое число со знаком. 8-разрядная форма используется в тех случаях, когда значение смещения невелико.

Непосредственный операнд (данное). Если этот элемент присутствует, он представляет значение операнда команды. Не­посредственные операнды могут быть 8-, 16- или 32-разрядными. В случаях когда 8-разрядный непосредственный операнд использу­ется в команде вместе с 16- или 32-разрядным операндом, про­цессор автоматически увеличивает размер 8-разрядного операнда путем расширения его знакового разряда.

5.2. Описание обозначения

+rb, +rw, +rd Код регистра (от 0 до 7), который складыва­ется с указанным слева от знака плюс шестнадцетиричным числом (байтом) с лбразованием байта кода операции. Регистрам присво­ены следующие коды :

rb rw rd

AL=0 AX=0 EAX=0

CL=1 CX=1 ECX=1

DL=2 DX=2 EDX=2

BL=3 BX=3 EBX=3

AH=4 SP=4 ESP=4

CH=5 BP=5 EBP=5

DH=6 SI=6 ESI=6

BH=7 DI=7 EDI=7

/цифра Цифра, стоящая справа от косой черты, имеет, вооб­ще говоря, значение от 0 до 7. Она показывает, что в байте MOD R/M указывается только один операнд r/m (регистр/память). Сама цифра помещается в поле reg и образует расширение кода опера­ции.

/r Обозначение показывает, что байт MOD R/M содержит два операнда (reg и r/m).

cb, cw, cd, cp Величина размером 1 байт (cb), 2 байта (cw), 4 байта (cd) или 6 байт (cp) следует за кодом операции и определяет относительный адрес, а также, возможно новое значе­ние программного сегмента.

ib, iw, id Непосредственный операнд размером 1 байт (id), 2 байта (iw) или 4 байта (id) следует за байтами кода опера­ции, MOD R/M или SIB. Код операции указывает, является ли опе­ранд знаковой величиной.

imm8 Непосредственный операнд размером 1 байт. Величина imm8 является знаковой величиной между -128 и +127 включитель­но. В командах, где размер второго операнда составляет слово или двойное слово, величина imm8 расширяется до слова или двойного слова. Старшие байты расширенной величины заполняются старшим битом непосредственного операнда.

imm16 Непосредственный операнд размером 1 слово. Исполь­зуется в командах с атрибутом размера операнда 16 разрядов. Может иметь значение от -32768 до +32767 включительно.

imm32 Непосредственный операнд размером 1 двойное слово. Используется в командах с атрибутом размера операнда 32 разря­да. Может иметь значение от -2147483648 до +2147483647 включи­тельно.

m8 Байт памяти. Адресуется через регистры DS:SI или ES:DI.

m16 Слово памяти.

m32 Двойное слово памяти.

moffs8, moffs16, moffs32 Относительный адрес. Простая пе­ременная типа BYTE, WORD или DWORD, используемая некоторыми вариантами команды MOV. Фактический адрес записывается в виде простого смещения относительно базы сегмента. Число при аббре­виатуре "moffs" указывает разрядность смещения определяемую аттрибутом размера адреса в команде. Байт MOD R/M в команде не используется.

ptr16:16, ptr16:32 Указатель FAR (дальний). Обычно он на­ходится в другом программном сегменте по отношению к команде. Обозначение 16:16 говорит о том, что указатель состоит из двух частей. Величина слева от двоеточия - это смещение в сегменте приемнике. Величина справа от двоеточия - это 16-разрядный се­лектор или величина, предназначенная для регистра программного сегмента. Если атрибут размера операнда команды равен 16, используйте 16:16. Для 32-разрядного атрибута используйте 16:32.