
- •Методические указания
- •1. Цель и практическое содержание методических указаний
- •2.2. Регистры и стек 32-разрядных процессоров Регистры
- •Регистры общего назначения
- •2.3. Организация памяти
- •Типы адресов
- •Режимы адресации
- •2.4. Прерывания и исключения
- •2.5. Основные понятия Защищенного режима работы процессора
- •2.6. Механизмы страничной переадресации
- •Базовый механизм страничной переадресации.
- •Режим pse
- •Режим pae.
- •2.7. Примеры команд 32-разрядного процессора
- •3. Задание на выполнение работы
- •Варианты задания
- •4. Содержание отчета по курсовой работе
- •5. Оформление пояснительной записки
2.2. Регистры и стек 32-разрядных процессоров Регистры
32-разрядные процессоры имеют регистры, подразделяющиеся на следующие основные категории:
- регистры общего назначения;
- указатель инструкций;
- регистр флагов;
- регистры сегментов;
- системные адресные регистры;
- управляющие регистры;
- регистры отладки;
- регистры тестирования;
- модельно-специфические (зависящие от конкретной модели процессора) регистры.
Инструкции, которые прежде адресовались к 16-разрядным регистрам, теперь могут адресоваться и к 32-разрядным расширенным регистрам при том же коде операции.
Регистры общего назначения
Регистры данныхв 32-разрядных процессорах расширены до 32 бит и к прежнему обозначению их имен добавилась приставка Е (Extended- расширенный): EAX[0:31], EBX[0:31], ECX[0:31], EDX[0:31]. Отсутствие приставкиEв имени означает ссылку на младшие 16 бит расширенных регистровAX[0:15],BX[0:15],CX[0:15],DX[0:15].
Неявное использование регистров подразумевает, что они участвуют в следующих операциях:
-EАХ[0:31] (AX[0:15]) - умножение, деление, ввод и вывод двойного слова;
-ЕВХ[0:31] (BX[0:15])-трансляция;
-ЕСХ[0:31] (CX[0:15]) - счетчик циклов и указатель длины строковых операций;
-ЕDХ[0:31] (DX[0:15]) - умножение и деление слова, ввод и вывод с косвенной адресацией;
Регистры-указателиЕSP[0:31] (StackPointer- указатель стека),EВР[0:31] (BasePointer- базовый регистр);
Индексные регистрыESI[0:31] (SourceIndex- индекс источника), EDI[0:31] (DestinationIndex- индекс назначения) допускают только 16- или 32-разрядное обращение. Тогда адрес текущей инструкции хранится в 16-IP[0:15] или 32-разрядном указателе командEIP[0:31] (InstructionPointer).
Указатель инструкцийEIP[0:31] содержит смещение следующей исполняемой инструкции относительно базы сегмента кода. При 16-битной адресации используются только младшие 16 битIР[0:16].
Регистр флагов EFLAGS[0:31] также расширен до 32 бит. Назначение бит регистраEFLAGSприведено в приложении 1.
Регистры сегментовCS[0:15] (CodeSegment- сегмент кодов команд),SS[0:15] (StackSegment- сегмент стека), DS[0:15] (DataSegment- сегмент данных),ES[0:15],FS[0:15] иGS[0:15] - дополнительные сегменты данных содержат 16-битные селекторы дескрипторов сегментов. Содержимое сегментных регистров не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. С каждым из шести сегментных регистров связаны программно-недоступные скрытые регистры дескрипторов (их еще называют SegmentDescriptorCache(SDC) - кэш сегментных регистров), автоматически загружаемые при загрузке соответствующих сегментных регистров. В защищенном режиме в регистры дескрипторов из таблицы дескрипторов загружается 32-битный базовый адрес, 32-битный лимит (размер сегмента) и атрибуты сегментов. По содержимому этих скрытых регистров при каждом обращении к памяти выполняется вычисление линейного адреса и проверка защиты, причем именно эти регистры задают свойства сегментов в защищенном режиме. В защищенном режиме лимит может задаваться в пределах 1 байт - 4 Гбайт.
Управляющие регистры(ControlRegisters) CR0[0:31],CR1[0:31],CR2[0:31],CR3[0:31],CR4[0:31] хранят признаки состояния процессора, общие для всех задач.
Регистр CR0 обеспечивает общее управление режимами работы процессора. Назначение бит регистра CR0 представлено в таблице 1.
Табл. 1.
Назначение флагов регистра CR0
Бит |
Обозначение |
Описание |
0 |
РЕ - Protection Enable |
Разрешение защиты |
1 |
MP - Monitor Processor Extension |
Мониторинг сопроцессора |
2 |
ЕМ - Processor Extension Emulated |
Эмуляция сопроцессора |
3 |
TS - Task Switch |
Флаг переключения задач |
4 |
ЕТ - Extension Type |
Индикатор поддержки инструкций математического сопроцессора |
5 |
NE - Numeric Error |
Разрешение стандартного (для Intel, но не для PC) механизма сообщения об ошибке FPU через генерацию исключения |
16 |
WP - Write Protect |
Разрешение защиты страниц памяти |
18 |
AM - Alignment Mask |
Разрешение контроля выравнивания |
29 |
NW - Not Writethrough |
Запрет сквозной записи кэша и циклов аннулирования |
30 |
CD - Cache Disable |
Запрет заполнения кэша |
31 |
PG - Paging Еnаble |
Включение механизма страничной переадресации памяти |
6-15, 17, 19-28 |
|
Не используется |
Регистр CR1 не используется. Регистр СR2 (PageFaultLinearAddress) хранит 32-разрядный линейный адрес, по которому был получен последний отказ страницы памяти. Регистр CR3 (Page Directory Base Register) (таблица 2).
Табл. 2.
Назначение флагов регистра CR3
Бит |
Обозначение |
Описание |
12-31 |
Page directory base |
20-ти битный физический базовый адрес таблицы каталога страниц |
5-11 |
|
Не используется |
4 |
PCD - Page-Level Cache Disable |
Запрет кэширования страницы |
3 |
PWT - Page-Level Writes Trough |
Кэширование страницы со сквозной записью |
0-2 |
|
Не используется |
Регистр CR4 содержит биты разрешения архитектурных расширений (таблица 3).
Табл. 3.
Назначение флагов регистра CR4
Бит |
Обозначение |
Описание |
0 |
VME - Virtual-8086 Mode Extensions |
Разрешение использования виртуального флага прерываний в режиме V86 |
1 |
PVI - Protected-Mode Virtual Interrupts |
Разрешение использования виртуального флага прерываний в защищенном режиме |
2 |
TSD - Time Stamp Disable |
Превращение инструкции чтения счетчика меток реального времени в привилегиров. |
3 |
DE - Debugging Extensions |
Расширение возможностей отладки |
4 |
PSE - Page Size Extension |
Расширение размера страницы (4 Кбайт и 4 Мбайт) |
5 |
PAE - Physical Address Extension |
Расширение физического адреса (страницы 4 Кбайт и 2 Мбайт, 36-разрядн. адресация) |
6 |
MCE - Machine-Check Enable |
Разрешение машинного контроля |
7 |
PGE - Paging Global Extensions |
Разрешение глобальности в страничной переадресации |
8 |
PCE |
Разрешение обращения к счетчикам событий на любом уровне привилегий |
9 |
OSFXSR |
Флаг использования инструкций для быстрого сохранения и восстановления состояния MMХ |
10 |
OSMMEXCPT |
Флаг использования инструкций быстрого восстановления состояния FPU/MMX блока при переключении контекста |
11-31 |
0 |
Не используется |
Системные адресные регистрыпредназначены для ссылок на сегменты и таблицы в защищенном режиме.
Регистр GDTR[0:47] (GlobalDescriptorTableRegister– регистр глобальной таблицы дескрипторов) программно загружается 6-байтными операндами, включающими 32-разрядный линейный базовый адрес и 16-разрядный лимит глобальной таблицы дескрипторов.GDTR[0:15] - 16-разрядный лимит,GDTR[16:47] - 32-разрядный линейный базовый адрес.
Регистр IDTR[0:47] (InterruptDescriptorTableRegister– регистр таблицы дескрипторов прерываний) имеет аналогичноеGDTRназначение разрядов.
В регистр задачи TR[0:15] (TaskRegister) и регистр локальной таблицы дескрипторовLDTR[0:15] (LocalDescriptorTableRegister) загружаются 16-разрядные селекторы дескрипторов сегмента состояния задачиTSSи локальной таблицы дескрипторовLDT. Эта загрузка вызывает автоматическую загрузку самих дескрипторов, содержащих 32-битные поля линейного базового адреса и лимита, а также полей атрибутов в связанные с ними невидимые регистры дескрипторов.
Регистры отладки(DebugRegister)DR0-DR7[0:31] предназначены для задания и управления отладочными точками останова. Регистры отладки позволяют расставлять точки останова даже в ПЗУ и перехватывать обращения к данным, а также останавливаться по обращениям к портам.
Регистры тестирования(TestRegister) предназначаются для тестирования кэша страничной переадресации, регистра данных внутреннего кэша, регистра состояния кэша, управляющего регистра тестирования кэша, управляющего регистра кэширования страниц, регистра данных кэширования страниц.
Модельно-специфические регистры MSR(Model-SpecificRegisters) предназначены для управления расширениями отладки, мониторингом производительности, машинным контролем, кэшированием областей физической памяти и другими функциями.
Стек
Стек представляет собой непрерывную область памяти, адресуемую регистрами ESP[0:31] (указатель стека) иSS[0:15] (селектор сегмента стека). Кроме явного использования стека инструкциямиPUSHиPOP, стек автоматически используется процессором при обработке прерываний и для временного хранения данных.
До использования стека он должен быть инициализирован - должны быть установлены значения селектора SS[0:15] и указателя ESP[0:32] так, чтобы они указывали на область реальной оперативной памяти (стек в ПЗУ, естественно, работать не может).
При выполнении операций, использующих стек, возможно появление исключения #SS(нарушение границ или отсутствие сегмента стека).