Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METOD_UKAZ_KURS.DOC
Скачиваний:
7
Добавлен:
04.04.2013
Размер:
2.07 Mб
Скачать

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(нарушение границ или отсутствие сегмента стека).

Соседние файлы в предмете Организация ЭВМ