Программная модель 32 – разрядных микропроцессоров
Программная модель процессора представляет собой набор из основных внутренних регистров (рисунок 3.5). Все регистры процессора имеют собственное имя, по которому к ним возможно обращение по команде из программы. Регистры процессоров расширены до 32– разрядов, на что указывает буква Е стоящая перед именем регистра. По назначению и способу использования регистры можно разбить на следующие группы:
Регистры общего назначения (EАХ, EВХ, EСХ, EДХ, ESI, EDI, EBP, ESP);
Сегментные регистры (CS, DS, SS, ES, FS,GS);
Указатель команд (EIP);
Регистр (или указатель) флагов (EF);
Системные адресные регистры (GDTR, IDTR, LDTR, TR);
Управляющие регистры (CR0, CR1, CR2, CR3);
Регистры отладки (DR0 …DR7);
Регистры тестирования (TR3, TR4, TR5, TR6, TR7);
модельно-специфические регистры (зависящие от конкретной модели процессора).
Опишем коротко состав и назначение этих регистров.
Регистры общего назначения
Регистры в командах могут адресоваться явно, их назначение аналогично назначению регистров процессора 8086.
31 16 15 0
AH AX AL | EAX ( Extended accumulator, аккумулятор); EBX ( Extended base, база); ECL ( Extended counter, счетчик); EDX ( Extended date, данные); ESI ( Extended source index, индекс источника); EDI (Extended destination index, индекс приемника); ESP ( Extended base pointer, указатель базы); EBP ( Extended stack pointer, указатель стэка). | |
BH BX BL | ||
CH CX CL | ||
DH DX DL | ||
SI | ||
DI | ||
SP | ||
BP |
31 16 15 0
IP | EIP – instruction pointer, указатель команд; |
31 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CS | Код Стэк Данные Данные Данные Данные | |
SS | ||
DS | ||
ES | ||
FS | ||
GS |
15 0
Рисунок 3.5 – Программная модель процессора Intel x86
Рисунок 3.5 – Программная модель процессора Intel x86
Регистр ES – хранит адрес сегмента текущего дополнительного сегмента, который используется для работы над строками или хранения данных и программ.
Регистры сегментов
Эти регистры содержат 16-битные указатели (в реальном режиме) или селекторы дескрипторов (в защищенном режиме) сегментов CS (Code Segment — сегмент кодов команд), SS (Stack Segment — сегмент стека), DS (Data Segment — сегмент данных) Регистр DS – хранит адрес текущего сегмента данных используемых в программе. Регистр SS – хранит адрес сегмента стека., ES, FS и GS — дополнительные сегменты данных. Содержимое сегментных регистров не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. Использование сегментных регистров определяется типом обращения к памяти. Для многих типов обращений, возможно применение альтернативных сегментных регистров, которое вводится префиксами команд CS:, SS:, DS:, ES: FS: или GS:. С каждым из шести сегментных регистров связаны программно-недоступные скрытые регистры дескрипторов (их еще называют Segment Descriptor Cache — кэш сегментных регистров), автоматически загружаемые при загрузке соответствующих сегментных регистров. В защищенном режиме в регистры дескрипторов из таблицы дескрипторов загружается 32-битный базовый адрес, 32-битный лимит (размер сегмента) и атрибуты сегментов. По содержимому этих скрытых регистров, при каждом обращении к памяти, выполняется вычисление линейного адреса и проверка защиты. В защищенном режиме лимит может задаваться в пределах от 1 байта до 4 Гбайт.
ID | VIP | VIF | AC | VM | RF | NT | IOPL | OF | DF | IF | TF | SF | ZF | AF | PF | CF |
Регистр флагов
Регистр флагов EFLAGS также расширен до 32 бит Биты 0-15, определенные для 8086 и 80286, имеют прежнее назначение, ряд флагов добавился с появлением процессоров 4-го и 5-го поколений. Флаги регистра разбиты на три группы: - системные флаги; - флаги состояний; - управляющие флаги.
Назначение битов системных флагов регистра EFLAGS описано ниже, назначение флагов управления и состояния смотри в МП 8086.
системные флаги
VIP (Virtual Interrupt Pending) — виртуальный запрос прерывания (Р5+).
ID (Id Flag) — флаг доступности команды идентификации CPUID (P5+ и некоторые 486).
AC (Alignment Check) — флаг контроля выравнивания.
VM (Virtual 8086 Mode) — в защищенном режиме включает режим виртуального процессора 8086.
RF (Resume Flag) — флаг возобновления, используется совместно с регистрами точек останова.
IOPL (Input/Output Privilege Level) — уровень привилегий ввода/вывода.
NT (Nested Task Flag) — флаг вложенной задачи.
Управляющие регистры (Control Registers) CRO, CR1, CR2, CR3 32- битные регистры, хранят признаки состояния процессора (рисунок 3.6) Регистр CRO обеспечивает общее управление режимами работы процессора.
Регистр CR1 не используется.
Регистр CR2 (Page Fault Linear Address) хранит 32-битный линейный адрес, по которому был получен последний отказ страницы памяти.
Регистр CR3 (Page Directory Base Register) в старших 20 битах хранит физический базовый адрес таблицы каталога страниц.
Регистр CR4 содержит биты разрешения архитектурных расширений
31 16 12 1110 9 8 7 6 5 4 3 2 1 0
OSXM | OSFX | P C E | P G E | M C E | P A E | PSE | D E | T D | P V I | V E | CR4 CR3 CR2 CR1 CR0 | |||||||||||||||||||||||||||||||||||||
Базовый адрес каталога страниц | P C D | P W T | ||||||||||||||||||||||||||||||||||||||||||||||
Линейный адрес отказа страницы памяти | ||||||||||||||||||||||||||||||||||||||||||||||||
P G | C D | N W | AM | W P | N E | ET | T S | E M | M P | P E | ||||||||||||||||||||||||||||||||||||||
Рисунок 3.6 – Управляющие регистры процессора
.
Системные адресные регистры
Системные адресные регистры (рисунок 3.7) предназначены для ссылок на сегменты и таблицы в защищенном режиме.
Регистры GDTR (Global Descriptor Table Register) и IDTR (Interrupt Descriptor Table Register) программно загружаются 6-байтными операндами, содержащими 32-битный линейный базовый адрес и 16-битный лимит глобальной таблицы дескрипторов и таблицы дескрипторов прерываний. В регистр задачи TR (Task Register) и регистр селектора локальной таблицы дескрипторов LDTR (Local Descriptor Table register) загружаются 16-битные селекторы дескрипторов сегмента состояния задачи TSS и локальной таблицы дескрипторов LDT.
Регистры отладки (Debug Register) предназначены для задания и управления отладочными точками останова.
Регистры DRO...DR3 (Linear Breakpoint Address 0...3) хранят 32-битные линейные адреса точек останова.
Регистры DR4, DR5 в процессоре Pentium при включенном расширении отладки обращение к этим регистрам вызывает исключение недопустимого кода операции (#UD).
Регистр DR6 (Breakpoint Status) отражает состояние контрольной точки.
47 16 15 0
GDTR IDTR | 32 – битные линейные базовые адреса | Лимиты |
32 – битные линейные базовые адреса | Лимиты |
15 0
TR LDTR | Селекторы |
Селекторы |
Системные сегментные регистры
Автоматически загружаемые регистры дескрипторов
32-битные линейные адреса | 20-битные лимиты сегментов | Атрибуты |
32-битные линейные адреса | 20-битные лимиты сегментов | Атрибуты |
Рисунок 3.7 –Системные адресные регистры
Регистр DR7 (Breakpoint Control) управляет установкой контрольных точек.
Регистры тестирования
TR3 – регистр данных внутреннего КЭШа.
TR4 – тестовый регистр состояния КЭШа.
TR5 – управляющий регистр тестирования КЭШа.
TR6 – регистр для теста кэширования страниц.
TR7 – регистр данных для теста кэширования страниц.
Модельно-специфические регистры MSR (Model-Specific Registers) предназначены для управления расширениями отладки, мониторингом производительности, машинным контролем, кэшированием областей физической памяти и другими функциями. Их назначение привязывается к архитектуре конкретного процессора, состав меняется от модели к модели, доступ привилегирован.
Организация памяти
Память для процессоров представляется в виде линейной последовательности байт, который является минимальной адресуемой ячейкой памяти. Далее адресуются слова (16 бит), двойные слова (32 бит) и учетверенные слова (64 бит) и поля байт.
Применительно к памяти различают три адресных пространства: логическое, линейное и физическое.
Плоское (линейное) логическое адресное пространство. Состоит из массива байтов, не имеющего определенной структуры. Трансляция адреса в этом случае не требуется, поскольку логический адрес совпадает с физическим адресом.
Сегментированное логическое адресное пространство. Состоит из нескольких или большого числа сегментов, каждый из которых содержит переменное число байтов. Логический адрес содержит две части — идентификатор сегмента и смещение внутри сегмента.
Страничное логическое адресное пространство. Состоит из большого числа страниц, каждая из которых включает фиксированное число байтов. Логический адрес состоит из номера (идентификатора) страницы и смещения внутри страницы.
Сегментно-страничное логическое адресное пространство. Состоит из
сегментов, которые, в свою очередь, состоят из страниц. Логический адрес страницы состоит из идентификатора сегмента и смещения внутри сегмента. Затем производится трансляция логического адреса в номер страницы и смещение в ней, которые транслируются в физический адрес. Принцип трансляции адреса показан на рисунке 3.8.
Селектор (точнее, его поле — старшие 13 бит) представляет собой индекс в таблице дескрипторов сегментов, т.е. по сути это поле содержит идентифицирующий номер сегмента. В свою очередь каждый элемент таблицы дескрипторов сегментов содержит базовый адрес сегмента. Процессор добавляет к нему смещение и получает 32-битный линейный адрес.
Если страничный механизм не включен, процессор считает, что линейный адрес является физическим, и выдает его на адресную шину. В противном случае процессор осуществляет дополнительную трансляцию линейного адреса в физический. Это делается с помощью таблиц страниц.
Основным режимом работы 32-разрядных процессоров считается защищенный режим, в котором работают все механизмы преобразования адресных пространств (рисунок 3.9).
Логический адрес, также называемый виртуальным, состоит из селектора сегмента (в реальном режиме — просто адреса сегмента) и эффективного адреса, называемого также смещением (offset).
Селектор сегмента хранится в старших 14 битах сегментного регистра (CS, DS, ES, SS, FS или GS), участвующего в адресации конкретного элемента памяти. По значению селектора из специальных таблиц, хранящихся в памяти, извлекается начальный адрес сегмента.
Эффективный адрес формируется суммированием компонент base, index, displacement с учетом масштаба (scale). Блок сегментации транслирует логическое адресное пространство в 32-битное пространство линейных адресов.
Линейный адрес образуется сложением базового адреса сегмента с эффективным адресом. Базовый адрес сегмента в реальном режиме образуется умножением содержимого используемого сегментного регистра на 16 (как и в 8086). В защищенном режиме базовый адрес загружается из дескриптора, хранящегося в таблице, по адресу указанному в сегментном регистре.
32-битный физический адрес памяти образуется после преобразования линейного адреса блоком страничной переадресации. Он выводится на внешнюю шину адреса процессора
Режимы адресации
Система команд 32-разрядных процессоров предусматривает 11 режимов адресации. При обращении к памяти эффективный адрес вычисляется с использованием следующих компонентов:
– смещение (Displacement или Disp) 8-, 16- или 32-битное число, включенное в команду;
– база (Base) –содержимое базового регистра;
– Индекс (Index) – содержимое индексного регистра;
– Масштаб (Scale) –множитель (1, 2, 4 или 8), указанный в коде инструкции.
Эффективный адрес вычисляется по формуле
EA=Base+Index × Scale + Disp
Процессор может работать с 32-битной или 16-битной адресацией. 16-битная адресация функционирует так же, как и в процессорах 8086 и 80286, при этом в качестве компонентов адреса используются младшие 16 бит соответствующих регистров. При 32-битной адресации применяются расширенные 32-разрядные регистры и дополнительные режимы с масштабированием индекса.
Стек
Стек представляет собой непрерывную область памяти, адресуемую регистрами ESP (указатель стека) и SS (селектор сегмента стека). Особенность стека заключается в том, что данные в него помещаются и извлекаются по принципу «первым вошел — последним вышел». Данные помещаются в стек с помощью инструкции PUSH (заталкивание), а извлекаются по инструкции POP (вытаскивание). За одну операцию можно поместить или извлечь только слово (2 байта) или двойное слово (4 байта). При записи данных первым делом указатель стека декрементируется на 2 или 4, в зависимости от разрядности данных; после этого данные помещаются в сегмент, определенный регистром SS, со смещением, определяемым новым значением ESP. При извлечении данные считываются из памяти по адресу SS:SP, после чего указатель стека инкрементируется на 2 или 4.
Кроме явного использования стека инструкциями PUSH и POP, стек автоматически используется процессором при выполнении инструкций вызова (CALL), возвратов (RET и IRET), входа и выхода из процедур (ENTER и LEAVE), а также при обработке прерываний.
По инструкции CALL в стек помещается адрес возврата – значение регистров CS (при длинном вызове) и EIP, указывающие на инструкцию, следующую после инструкции вызова.
По прерыванию в стек помещается также и значение регистра EFLAGS. По инструкциям возврата эти значения извлекаются из стека в соответствующие регистры, и процессор продолжает выполнять прерванную последовательность инструкций.
Стек используют для следующих целей:
– организации прерываний, вызовов и возвратов;
– временного хранения данных, когда под них нет смысла выделять фиксированные места в памяти;
– передачи и возврата параметров при вызовах процедур.
До использования стека он должен быть инициализирован — должны быть установлены значения селектора SS и указателя ESP так, чтобы они указывали на область реальной оперативной памяти.
Дата добавления: 2016-02-24; просмотров: 2032;