Содержание

Данные, набор регистров и адресация

Размеры и типы данных

80386 работает с различными размерами данных, такими как би- ты, байты, слова и двойные слова. Как было указано в главе 1, байт состоит из 8 бит, слово из 16 бит и двойное слово из 32-х бит. Типы данных, поддерживаемые 80386 являются "битовыми"; данные целого типа со знаком или без знака, из 8, 16 или 32 бит; упако- ванные или неупакованные двойные числа, которые кодируют десятич- ные данные, и последовательность целочисленных данных, в которой каждый элемент состоит из 8, 16 или 32 битов. Указатели адреса завершения, состоящих из селектора и смещения, также распознает- ся.

Поле размера операнда и префикс размера операнда

Размер операнда для каждой команды кодируется в команде либо неявно в коде операции команды, либо явно в поле внутри команды и необязательным префиксом размера операнда, размещаемым до коман- ды. Когда размер операнда относительно кодируется, то размер опе- ранда определяется полем "W" команды, режимом работы процессора и байтом префикса размера операнда, который и должен предшествовать коду команды. Поле "W" - это однобитовое поле, которое выбирает либо размер операнда - "байт", либо размер "большой операнд". По- ле W содержит каждая команда, которая явно кодирует модификатор размера операнда. Если W=0, то размер операнда выбирается равным байту. Если W=1, то это указывает на "большой операнд", который должен быть либо словом, либо двойным словом,обычно в зависимости от режима работы. Размер большого операнда равен обычно 16-ти разрядному слову в любом 16-ти раз- рядном режиме (Действительном или виртуальном режиме 8086) или, если присутствует 16-ти разрядный кодовый сегмент в защищенном режиме. Тем не менее большой размер обычно соответствует 32-х разрядному двойному слову, если присутствует 32-х разрядный код сегмента в защищенном режиме. Байт префикса размера операндатакже помогает определить размер большого операнда. Префикс невлияет на размер операнда равный байту. Байт префикса размераоперанда, если он присутствует, уставливает значение большогооперанда, нормально определяемое полем-W. Если обычное значениебольшого операнда будет слово, то двойное слово определяется байтом префикса размера операнда. Соответственно, если двойное слово будет обычно определяться, тогда слово определяется байтом префикса размера операнда. Префикс размера операнда влияет только на команду, которой он предшествует; префикс может предшествовать каждой команде, где его присутствие требуется.

Выбор размера операнда

Поле W Режим работы Префикс Выбранный размера размер операнда операнда
0 Любой режим Безраз- Байт личен
1 Любой 16-ти разрядный режим (дейст- Не при- Слово вительный режим, виртуальный режим сутст- 8086 или защищенный режим, поддер- вует живающий 16-ти разрядным кодом сег- мента
1 Любой 16-ти разрядный режим (дейст- Присут- Двойное вительный режим, виртуальный режим, ствует слово виртуальный режим 8086, или защи- щенный, поддерживающий 16-ти раз- рядным кодом сегмента
1 Защищенный режим, поддерживаемый Не при- Двойное 32-х битовым кодом сегмента сутст- слово вует
1 Защищенный режим, поддерживаемый Присут- Слово 32-х битовым кодом сегмента ствует

Реристры 80386

80386 имеет 31 программируемых регистров в следующих катего- риях: Регистры общего назначения - 8 Счетчик команд - 1 } Регистры Регистр флага - 1 пользователя Регистры сегмента - 6 ---------- всего 16 Регистры управления - 3 Регистры отладки - 6 Регистры Регистры проверки разбие- } системы ния на страницы - 2 Регистры защищенного режима - 4 --------- всего 15 Обычный программист (пользователь) непосредственно использует регистры общего назначения. Регистры управления, отладки, провер- ки разбиения на страницы и защищенного режима являются все сис- темными регистрами,используемые операционной системой для влияния на глобальные аспекты системы. Хотя программа обслуживания отлад- чика может также использовать регистры отладки для своих функций прерывания.

Регистры общего назначения, счетчик команд и регистр флага

Регистры общего назначения, счетчик команд и регистр флага - 32-х разрядные регистры, из которых 16 младших разрядов использу- ются в 16-ти разрядных режимах работы. Они все принадлежат к на- бору регистров пользователя, кратко описанныхх в табл. 2.2. 32-х разрядный вариант этих регистров представляется как расширение 16-ти разрядных регистров. Например, 32-х разрядный, счетчик ко- мандж называется EIP (Расширенный счетчик команд), в то время как младшие 16 разрядов EIP называется просто IP (счетчик команд). 32-х разрядные регистры, включая их 16-ти и 8 разрядные поднаборы представлены на рис. 2.5. Каждый 32-х разрядный регистр общего назначения предназначен для хранения адресов и данных. Операнды размером двойного слова, слова, байта и бит могут храниться в этих регистрах, как об`ясня- лось в главе 2. Счетчик команд EIP, имеет 32 разряда, младшие - 16 разрядов являются счетчиком команд (IP) в 16-ти разрядных режимах. Счетчик команд указывает на следующую команду, которая будет выполняться в пределах текущего сегмента программы. Операциями над EIP явля- ются двухсловные операции, а операциями над IP являются операции со словами. Регистры флага EFLAG (Расширенный флаг) имеет 32 разряда, младшие разряды составляют регистр флага (FLAG) в 16-ти разряд- ных режимах, EFLAG и FLAG содержат биты кода-условия, и также несколько битов управления, как представлено в табл. 2.3. Не все 32 бита EFLAG определены; неопределенные биты считываются как ло- гическое "0" и игнорируются при записи. Операциями над EFLAG яв- ляются операции с двойными словами; операциями над FLAG являются операции со словами (Исключение: команды LAHF и SAHF загружают и хранят самый младший байт FLAG), без сокращения описание EFLAG и всех его полей находится в приложении А. Таблица 2.2

Регистры пользователя 80386 и функции


Регистр | | системы | Имя | Функция 80386 | |
Регистры 8: EAX,EBX,ECX, Используются для хранения общий ад- EDX,ESI,EDI, рес или данных EBP,ESP Счетчик 1: EIP EIP указывает на следующую выполня- команд емую команду Регистр 1: EFLAG EFLAG содержит 8 полей состояния флага последней выполненной коман- ды и 5 полей управления, ко- торые разрешают прерывание или управляют другими харак- теристиками Регистры 6: CS,SS,DS, CS определяет текущий сегмент для сегмента ES,FS,GS программы. SS определяет текущий сегмент для доступа к стеку, такой как POP и PUSH DS определяет текущий сегмент для большинства операций с данными. ES,FS и GS определяют дополнитель- ные сегменты данных, для работы с данными

Регистры сегмента

Как упоминалось, сегмент это непрерывный линейный блок адрес- ного пространства программиста. 32-х разрядный сегмент может иметь до 4 биллионов байт (4 Гбайта); 16-ти разрядный сегмент мо- жет иметь до 64 тысячи байт (64 Кбайта). Система 80386 может со- держать больше тысячи сегментов, если требуется. Шесть 16-ти раз- рядных регистров сегмента, поэтому служат для определения доступ- ных в данный момент сегментов памяти. Сегмент для кода программы должен быть определен в регистре "CS", сегмент стека должен быть определен в регистре "SS"; и сегмент данных должен быть определен в регистре DS. Другие сегменты данных могут быть определены в ре- гистрах "ES", "FS" и GS, если требуется. Операциями, включающими регистры сегмента являются операции со словами, а слово, записанное в регистр сегмента, называется селектором. Селектор определяет или выбирает один сегмент из всех возможных сегментов. Например, значение селектора, записанное в регистр CS определяет отдельный сегмент, как сегмент содержащий программу, которая будет выбираться. Программа выбирается из этого сегмента до тех пор, пока код сегмента не из- менится, т.е. пока не будет записан новый селектор в регистр CS. Новое значение селектора может быть записано в любой регистр сег- мента, как только пожелает программист. Хотя селекторы всегда служат для определения текущего сегмен- та,но форматы селектора немного различаются в действительном ре- жиме и защищенном режиме. На рис.2-11,2-12 представлены форматы селекторов.

Системные регистры

Регистры 80386 используемые главным образом системными прог- раммистами классифицируются как системные регистры. Эти регистры - для управления, отладки, контроля разбиения на страницы и защи- щенного режима, обеспечивают все необходимые для установки чисто системных характеристик 80386. Их функции кратко представлены в табл. 2.4, а подробно об`ясняются в главах 8-17. Рисунки 2.7 и 2.8 иллюстрируют эти регистры, большинство из которых являются 32-х разрядными. Операциями над 32-х разрядными регистрами управления, отладки и контроля разбиения на страницы являются операции с двойными словами. Младшие 16 разрядов регистра управления (CRO) могут быть также доступны как 16-ти разрядное слово состояния машины (MSW) для операций со словами. Операциями с 32-х разрядными ре- гистрами защищенного режима IDTR и GDTR являются операции с двойными словами, а с 16-ти разрядными регистрами защищенного ре- жима LDTR и TR - операции над словами. Системные регистры имеют несколько заслуживающих внимания особенностей. Например, развитие этих регистров в микропроцессо- рах фирмы INTEL от поколения к поколению представляет большой ин- терес: МП 8086 не имеет системных регистров, а МП 80286 имеет только MSW (регистр слово состояния машины, младшие 16 разрядов регистра CRO МП 80386) и регистры защищенного режима. Следова- тельно, большинство системных регистров 80386 являются новыми, которые добавляются для поддержки функций отладки и разбиения на страницы. Шесть регистров отладки поддерживают новое средство от- ладки кристалла. Регистры CR2, CR3 и регистры контроля разбиения на страницы поддерживают страничное разбиение. Другие интересные, заслуживающие внимания системные регистры: - некоторые регистры отладки используются ICE-386, который является мощным встроенным эмулятором для МП INTEL; - регистры проверки разбиения на страницы позволяют проверять весь КЭШ трансляции разбиения на страницы при помощи программы на языке ассемблера; - в системах виртуальной памяти, регистр базы таблицы страни- цы (CR2) имеет только регистр, содержащий физический адрес; - в защищенном режиме, в системные регистры могут записывать только команды с нулевым уровнем, самый привилегированный уро- вень. Таблица 2.4

Системные регистры 80386 и функции


Системный | | регистр | Имя | Функция 80386 | |
Регистры 3: CRO,CR2,CR3 CRO разрешает защищенный режим, раз- управления биение на страницы и запускает сопроцессор CR2 указывает последний виртуальный адрес, который вызвал ошибку страничного разбиения CR3 сообщает 80386, где находится таблица страничного разбиения для трансляции виртуального адреса Регистры 6: DRO,DR1,DR2, DRO-DR3 определяют четыре незави- отладки DR3,DR6,DR7 симых точки останова 0,1,2 и 3 точки останова могут использоваться программами об- служивания отладчика DR6 указывает последний останов, который встречается DR7 управляет условиями, необходимыми для каждой точки останова, кото- рая встречается Регистры 2:TR6, TR7 TR6 определяет виртуальный адрес, ис- контроля пользуемый для проверки устройст- разбиения ва разбиения на страницы страницы TR7 определяет физический адрес, ис- пользуемый при проверке устрой- ства разбиения на страницы Регистры 4:IDTR, GDTR, IDTR определяет базовый адрес таб- защищен- LDTR, TR лицы векторов прерывания ного режима GDTR определяет базовый адрес таб- лицы, содержащей глобальные дескрипторы LDTR определяет базовый адрес таб- лицы, содержащий локальные дескрипторы TR определяет базовый адрес сег- мента, содержащего информацию о состоянии для текущей за- дачи

Организация данных

Данные шине байт, слово или двойное слово могут быть размеще- ны в каждом из регистров общего назначения. Каждый из регистров общего назначения имеет 32 разряда, физически они еще могут ис- пользоваться как наборы 16-ти разрядных регистров (совместимость с 8086). Суперкомплект 32-х разрядных регистров полностью содер- жит 16-ти разрядные регистры. Эти регистры общего назначения представлены на рис. 2.9 и 2.10, где, для ясности, регистры по- казаны как 16-ти разрядный комплект, а затем как 32-х разрядных комплектов. Обратите внимание также на 8-ми разрядные регистры AH, AL, BH, WL, CH, CL, DH и DL, которые всегда доступны для операндов размером в байт. Регистры общего назначения обычно используются как 16-ти раз- рядный набор регистров при работе в реальном или виртуальном ре- жиме 8086, или при наличии 16-ти разрядного кода сегмента в защи- щенном режиме. Однако, регистры общего назначения обычно ис- пользуются как 32-х разрядный набор регистров при наличии 32-х разрядного кода сегмента в защищенном режиме. Префикс размера операнда влияет на размер набора регистров общего назначения, так как именно префикс определяет размер опе- ранда, который задает размер набора регистров от 16 до 32-х раз- рядов, или наоборот. Поэтому размеры операндов и регистров всегда совпадают. Двухсловные операнды размещаются в 32-х разрядных ре- гистрах, однословные - в 16-ти разрядных, байтовые - операнды всегда размещаются в 8-ми разрядных регистрах. Размер набора ре- гистров может быть изменен в любое время при помощи префикса раз- мера операнда. После выбора размера набора регистров очистка дан- ных, хранящихся в регистрах не происходит, это позволяет ис- пользовать младшие разряды двухсловного операнда как однословный операнд и так далее. Об`единение двух регистров используется для нескольких специ- ализированных операций. Команды SHLD (Двойной сдвиг влево) и SHRD (Двойной сдвиг вправо) позволяют сдвоенному регистру общего наз- начения производит сдвиг 64 разрядных операндов на один разряд, передавать блок бит, вставлять бит, удалять бит. Команды умноже- ния и деления с двойной точностью используют сдвоенные регистры EDX и EAH для хранения 64 разрядных числовых операндов.

Организация данных в регистрах сегмента

Все операции в регистрах сегмента являются операциями над словами. Операнд, находящийся в регистре сегмента называется се- лектором, а 16-ти разрядное значение селектора определяет опреде- ленный сегмент. Форматы селектора в реальном режиме или виртуальном режиме 8086 является просто 16-ти разрядный индекс, точно определяющий сегмент. Селекторы защищенного режима имеют несколько модифициру- емый формат, т.к. три младших по порядку разряда селектора служат для специальных целей. Селектор защищенного режима включает 2-х битовое поле привилегий (RPL) для поддержки четырех уровневой мо- дели защиты защищенного режима. Он также включает бит индификато- ра таблицы (таб.1) для указания текущей таблицы дескриптора в за- щищенном режиме. Более подробная информция о селекторах защищен- ного режима находится в главе 7.

Организация данных в системных регистрах

Запись или чтение в (из) системных регистров осуществляется при помощи двухсловных операций, хотя данные в системных ре- гистрах часто организуются в виде различных небольших полей. Дан- ные каждого поля независят от данных других полей, исключая нес- колько ситуаций, в которых несколько полей работают вместе в ко- ординальной ситуации. Например, четыре поля в регистре управления с номером (CR0) вместе управляют цифровым кристаллом сопроцессора 80387. Определенные поля регистров контроля страничного разбиения также действуют как согласованные части. Неопределенные поля в системных регистрах не содержат информации. Для исключения несовместимости программного обеспечения с будущими процессорами, программист должен не зависеть от состояния неопределенных полей при проверке определенных полей. Поэтому рекомендуют, чтобы программист применял логические команды, такие как AND, для маскирования неопределенных полей до проверки регистра. Так маски, соответствующие точно позиции неопределенных битов.

Организация данных в памяти

Память является побайтно адресуемой. Данные в памяти органи- зуются так, что самые младшие адреса соответствуют самым младшим по порядку байтам любого операнда. Когда операнд больший чем в один байт размещается в памяти, то его адрес, N, соответствует самому младшему присутствующему байту и, следовательно, самому младшему значимому байту операнда. 80386 не требует выравнивания адреса операнда к границе адресов слов или двойных слов. Для луч- шего исполнения, адрес слова должен быть выравнен к границе слова (адрес кратный 2), а адрес двойного слова - к границе двойного слова (адрес кратный 4). Наиболее эффективна передача, когда дан- ные выравнены к некоторой границе байта, соответствующего размеру операнда. Команды не требуют выравнивания данных, но наиболее эф- фективна операция, которая имеет место, когда адресанты информа- ции команд передачи управления имеют двухсловные границы, из-за этого максимального случая непосредственного выбора полной следу- ющей команды. Типы данных, поддержанные в памяти 80386 являются битовыми; целочисленные данные 8, 16 или 32-х разрядные; упако- ванные или не упакованные двоичные числа, кодируемые десятичные данные; последовательность целочисленных данных, состоящих из 8, 16 и 32-х разрядных элементов; и указатель адреса завершения, состоящих из селектора и смещения.

Адресация памяти

Обращение к памяти может делаться для выбора данных или ко- манд. Команды, производящие обращение к данным содержат информа- цию, которая точно определяет метод доступа к данным. Режим адре- сации - это метод, используемый для доступа к памяти, а эффектив- ный адрес - это адрес ячейки памяти. Режимы адресации могут также определять регистр 80386 как место размещения операнда. Команды могут задавать операнд в одном из трех случаев: Первые два метода по существу самовозбуждаемые. Этот параграф описывает третий метод: режимы адресации. Методы адресации опре- деляют последовательность действий для 80386 при вычислении эф- фективного адреса, для выбора одной ячейки из всех возможных яче- ек в адресном пространстве памяти. Режимы адресации очень важны. Большинство команд включает спецификацию режима адресации.

Адресное пространство памяти

80386 поддерживает несколько видов представления пространства памяти. Виртуальное адресное пространство - это пространство дос- тупное программисту; физическое адресное пространство - это пространство реально построенное на кристаллах памяти. 80386 под- держивает 32-х разрядное физическое адресное пространство до 4 Гбайт ( или 4 294 967 296 байтов) и еще больше, 46-ти разрядное виртуальное адресное пространство, которое примерно 16 400 раз больше физического пространства. Виртуальный адрес содержит значение селектора сегмента и зна- чения смещения, как показано на рис. 2.14. Селектор содержит 13-ти разрядный индекс, который затем об`единяется с битом инде- фикатора таблицы и 32-х разрядным смещением, что обеспечивает ко- нечный 46-ти разрядный виртуальный адрес и, следовательно, вирту- альное адресное пространство емкостью до 2 байт (64 тера байта). Физический адрес соответствует 32-х разрядному значению, обеспечивая линейное физическое адресное пространство до 2 байт.

Вычисление адреса

Вычисление адреса 80386 происходит от виртуального адресного пространства к физическому адресному пространству, через нес- колько промежуточных значений. При возможном разбиении на страницы, вычисление адреса осу- ществляется за три шага обработки, как показанона рис. 2.16. Пер- вый, до трех адресных компонент: база, смещение и индекс масшта- бирования, суммируются (любое выполнение игнорируется) к форме 32-х разрядного эффективного адреса, который является смещением в текущем сегменте. На втором этапе, адрес базы текущего сегмента прибавляется (выполнение снова игнорируется) для формирования 32-х разрядного линейного адреса. На третьем этапе, когда разби- ение на страицы допускается, устройство разбиения на страницы транслирует линейный адрес в 32-х разрядный физический адрес. В течение трансляции, устройство разбиения на страницы заменяет старшие 20 разрядов физического номера страниц. Младшие двенад- цать разрядов, смещение страницы, неизменяются при разбиении на страницы, т.к. каждая страница памяти имеет 4096 байт (2 байтов). Когда разбиение на страницы не допускается, то линейный адрес сам используется как физический адрес. Вычисление адреса осуществляется за два шага обработки, когда разбиение на страницы не допускается; эффективный адрес и затем физический адрес вычисляются.

Режимы адресации

Режимы адресации 80386 позволяют точно определить какие ком- поненты используются в вычислении адреса. Из возможных компонен- тов (базы, смещения и индекс масштабирования), любой поднабор или любой компонент может быть использован при вычислении эффективно- го адреса. Выбранный режим адресации определяет используемые ком- поненты. 80386 поддерживает 32-х разрядные и 16-ти разрядные операции, как представлено в табл. 1.1 и, следовательно, обеспечиваются два набора режимов адресации. 32-х разрядные режимы адресации, т.е. режимы по умолчанию и используемые при 32-х разрядной операции, в общем иллюстрируются на рис. 2.16 и 2.17, все вычисляют 32-х раз- рядный эффективный адрес. 16-ти разрядные режимы адресации, режи- мы по умолчанию для 16-ти разрядной операции, вычисляют 16-ти разрядный эффективный адрес. 16-ти разрядные режимы адресации полностью совместимы с 8086; 32-х разрядные режимы адресации яв- ляются супер набором, дающим высокую недежность и оптимальное масштабирование компоненты индекса. Префикс размера адреса, показанный на рис. 2.18, является байтом, который может размещаться перед командой для переключения режима адресации из набора по умолчанию в альтернативный набор. Когда 32-х разрядные режимы адресации присутствуют по умолчанию, префикс размера адреса вызывыает 16-ти разрядные режимы адреса- ции. Наоборот, когда 16-ти разрядные режимы адресации присутству- ют по умолчанию, то префикс размера адреса вызывает 32-х разряд- ные режимы адресации. Префикс размера адреса влияет только на ко- манду, которой он предшествует. Все 16-ти разрядные режимы адре- сации описываются в главе 4; 32-х разрядные - в главе 7.

Выбор регистра сегмента

Шесть регистров сегмента 80386 указывают, какой сегмент явля- ется доступным в данный момент для выполняющейся команды. Хотя команды, которые обращаются к памяти обычно не указывают точно требуемый сегмент. Обычно регистр сегмента выбирается явно, сог- ласно правилам представленным в табл. 2.6. Так таблица показыва- ет, как используют сегмент, указываемый регистром SS; и в общем, как для обращения к данным, используют сегмент, указываемый ре- гистром DS. Такое размещение ординарно и эффективно. Правила выбора регистра сегмента
|Использование|Возможные пре- Типы обращения к памяти |сегмента по|фиксы, отвер- | умолчанию |гающие сегмент
Выборка команд программы из памяти CS Нет Источник команд POP, POPA SS Нет Адресант команд PUSH, PUSHA SS Нет Другие обращения за данными, при помощи эффективного адреса, ис- пользуя регистр базы: [EAX] DC CS,SS,ES,FS,GS EBX DC CS,SS,ES,FS,GS ECX DC CS,SS,ES,FS,GS EDX DC CS,SS,ES,FS,GS ESI DC CS,SS,ES,FS,GS EDI* DC CS,SS,ES,FS,GS EBP SS CS,SS,ES,FS,GS ESP SS CS,SS,ES,FS,GS
* Обращения к данным для адресантов последовательности команд STOS, REP, STOS,MOVS и REP MOUS используют EDI как регистр базы и ESI как регистр сегмента, с невозможностью отвержения сегмента. Неявный выбор может быть отвергнут при помощи байта префикс отвержение сегмента. Префикс отвержения сегмента, если размещает- ся до команды, позволяет использовать любой регистр сегмента, от- вергая неявные правила табл. 2.6. Префиксы отвержения сегмента описываются в главе 3. Ниже на языке ассемблера, приводится при- мер употребления префикса отвержения сегмента: TEST CS:[EBP+q]; операнд в CS, сегмент программы MOV EBX, ES: [EDI]; операнд в ES, альтернативный сегмент данных
Содержание Вперед
Сайт создан в системе uCoz