Формат системных регистров процессора

Дата: 03/08/05;  Автор: R_NEW


Здесь описываются системные регистры процессоров IA-32

Регистр cr0

Формат регистра cr0:

PE - Если установить этот бит, процессор переключается в защищённый режим.

MP - устаревший бит, для i386 обозночал, присутствует ли FPU.

EM - эмуляция FPU, каждая команда FPU вызывает #NM.

TS - устанавливается при переключении задач. При TS=1 любая команда FPU вызывает #NM.

ET - устаревший бит, для i386 обозночал тип сопроцессора(ET=1).

NE - включает режим, при котором FPU вызывает #MF, а не IRQ13.

WP - запрещает запись в страницы, помеченные как "только чтение" на всех уровнях привилегий (если WP = 0, защита распространяется только на уровень 3). Этот бит предназначен для реализации метода создания копии процесса, популярного в UNIX, в котором вся память нового процесса сначала полностью совпадает со старым, а затем, при попытке записи со стороны нового процесса, создается копия страницы, в которую произошла запись.

AM - разрешает флагу АС (EFLAFS) включать режим, в котором не выровненные обращения к памяти на уровне привилегий 3 вызывают исключение #AC.

NW - запрещает сквозную запись во внутренний кэш - данные, записываемые в кэш, не появляются на внешних выводах процессора.

CD - запрещает заполнение кэша. При этом чтение из кэша все равно будет происходить. (При установке CD=0 и NW=1 сразу происходит #GP(код ошибки=0)

PG - включает и выключает режим страничной адресации.

Регистр CR2

Регистр cr2 содержит линейный адрес, вызвавший последний отказ страницы(процессор пишет в cr2, когда происходит #PF).

Регистр CR3

Формат регистра cr3:

Адрес - 20(или 27 при бите PAE=1 в cr4) старших зарядов физического базового адреса каталога страниц.

PCD - запрещение кэширования текущей страницы.

PWT - включение/выключение режима режима Write Back.

Регистр CR4

Формат регистра cr4:

FSR - разрешение команды быстрого сохранения/восстановления состояния FPU/MMX FXSAVE и FXRSTOR (Pentium II).

РМС - разрешение выполнения команды RDPMC для программ на всех уровнях привилегий (если PMC = 0, но только на уровне 0) (Pentium Pro и выше).

PGE - разрешение глобальных страниц (бит 8 атрибута страницы), которые не удаляются из TLB при переключении задач и записи в CR3 (Pentium Pro и выше).

МСЕ - разрешение исключения #МС.

РАЕ - включение 36-битного физического адресного пространства (Pentium Pro и выше).

PSE - включение режима адресации с 4-мегабайтными страницами.

DE - разрешение отладочных прерываний при обращении к портам.

TSD - запрещение выполнения команды RDTSC для всех программ, кроме программ, выполняющихся на уровне привилегий 0.

PVI - разрешение работы флага VIF в защищенном режиме, что может позволить некоторым программам, написанным для уровня привилегий 0, работать на более низких уровнях.

VME - включение расширения режима V86 - разрешение работы флага VIF для V86-приложений.

Регистр флагов

Формат регистра флагов:

ID - если программа может изменить этот флаг, значит процессор поддерживает команду cpuid.

VIP - флаг ожидания виртуального прерывания.

VIF - флаг виртуального прерывания.

AC - флаг контроля за выравниванием. Если AC=1 и AM=1, то ИС17 из-за нарушения выравнивания в RING3 разрешено.

VM - флаг режима виртуального 8086.

RF - флаг возобновления. При RF=1 отладочное прерывание в следующей команде игнорируется. Сбрасывается при успешном завершении каждой команды, кроме команд перехода.

NT - признак вложенной задачи.

IOPL - уровень привилегии в/в. Управляет возможностью доступа к портам в/в и изменения флага IF.

OF - флаг переполнения. Устанавливается в результате переполнения при обработке арифметических операций

DF - флаг направления. При DF=0 направление слева на право(только для строковых команд).

IF - флаг разрешения прерываний. При IF=1 прерывания разрешены.

TF - флаг ловушки. При TF=1 #DB будет выполняться после каждой команды(кроме int).

SF - флаг знака. SF равен старшему биту результата.

ZF - флаг нуля. ZF=1 при нулевом результате.

AF - вспомогательный флаг переноса.

PF - флаг паритета. PF=1 если 8 младших разрядов результата содержат чётное число единиц.

CF - флаг переноса.

Регистры dr0-dr3

Эти регистры содержат линейные адреса точек прерывания.

Регистр dr6

Содежит биты, показывающие причину прерывания #DB. Программа, обслуживающая исключение #DB, должна сама обнулить регистр. Процессор только устанавливает биты в dr6.

Формат регистра dr6:

B0 - устанавливается при прерывании по линейному адресу в регистре dr0.

B1 - устанавливается при прерывании по линейному адресу в регистре dr1.

B2 - устанавливается при прерывании по линейному адресу в регистре dr2.

B3 - устанавливается при прерывании по линейному адресу в регистре dr3.

BD - устанавливается при попытке обращения к отладочным регистрам, когда GD=1.

BS - устанавливается при прерывании #DB из-за бита TF=1 в EFLAGS.

BT - устанавливается при переключении на задачу, в TSS которой установлен бит trap.

Регистр dr7

Регистр управляет процессом отладки.

Формат регистра dr7:

LENn - каждое поле содержит длину соответствующей точки останова.
Код LEN Размер Зона прерывания
00 1 байт По любому линейному адресу
01 2 байта Выровненная по границе слова
10   Не определено(или 8 байт)
11 4 байта Выровненная по границе двойного слова
Код 10 доступен только для процессоров Intel Pentium® и Intel Xeon®, модель 15, семейство 3 или 4.
Если поле R/Wn равно 00(исполнение комманд), то поле LENn тоже должно быть равно 00 (иначе результат не определён).

R/Wn - каждое поле содержит значение, которое определяет тип доступа, который может вызвать исключение #DB.
Код RW Тип доступа
00 Выполнение комманд
01 Запись данных
10 Ввод/вывод через порты(только если DE=1 в cr4)
11 Чтение и запись данных

GD - при GD=1 любое обращение к регистрам при любом уровне привелегии вызывает #DB. Процессор автоматически очищает GD при #DB.

GE и LE - рекомендуется всегда выставлять 1.

Gn - включает соответствующую точку прерывания во всех задачах.

Ln - включает соответствующую точку прерывания в текущей задаче. При переключении задач все биты Ln автоматически сбрасываются.



Вопросы по статье вы можете задать на форуме моего сайта www.hardprog.h15.ru