OSDev Wiki
Регистрация
Advertisement

Управляющий регистр CR0 включает ряд флагов, управляющих различными режимами работы микропроцессора. Он появился в процессоре 80386, однако его непосредственным предком, ставшим его младшей половиной, было слово состояния машины (MSW), появившееся в процессоре 80286.

Современный формат регистра CR0 показан на рисунке:

CR0

Разряды регистра CR0 имеют следующее назначение.

PE Разрешение защиты (бит 0). Когда установлен, включает защищённый режим работы процессора. При его сбросе процессор возвращается в реальный режим. В микропроцессоре 80286 программно сбросить этот разряд было невозможно.
MP Контроль сопроцессора (бит 1). Управляет реакцией инструкции WAIT/FWAIT на флаг TS регистра CR0. Когда оба флага установлены, эта инструкция будет генерировать исключение #NM (вектор 7). Если же MP сброшен, инструкция WAIT/FWAIT игнорирует состояние флага TS.
EM Эмуляция сопроцессора (бит 2). Когда установлен, означает, что математический сопроцессор отсутствует, когда сброшен — что присутствует. Установка этого флага вызывает генерацию исключения #NM (вектор 7) при попытке выполнить любую команду сопроцессора или набора MMX, а также почти любую команду SSE (исключением являются команды PAUSE, PREFETCHn, SFENCE, LFENCE, MFENCE, MOVNTI и CLFLUSH, игнорирующие состояние этого флага).
TS Задача переключена (бит 3). Устанавливается процессором при каждом переключении задач, сбрасывается программно (загрузкой CR0 или специальной командой CLTS). Этот флаг влияет на выполнение команд сопроцессора, MMX и SSE по нижеследующим правилам:
  • Если флаг TS установлен, а EM (бит 2 регистра CR0) сброшен, при попытке выполнения любой из команд сопроцессора и наборов MMX и SSE возникает исключение #NM (вектор 7). Исключением из этого правила являются команды PAUSE, PREFETCHn, SFENCE, LFENCE, MFENCE, MOVNTI и CLFLUSH, игнорирующие состояние флага TS, а также WAIT/FWAIT (см. ниже).
  • Если флаг TS установлен, а флаги MP (бит 1 регистра CR0) и EM сброшены, исключение #NM при попытке выполнения команд WAIT/FWAIT не возникает. В противном случае эти команды также вызывают исключение #NM.
  • Если флаг EM установлен, установка TS не оказывает влияния на выполнение команд сопроцессора, MMX и SSE.
ET Тип расширения (бит 4). Показывает наличие (установлен) или отсутствие (сброшен) математического сопроцессора. Во всех процессорах, начиная с Pentium, всегда установлен. Программно этот разряд изменить нельзя.
NE Ошибка сопроцессора (бит 5). Когда установлен, разрешает «естественный» механизм уведомления об ошибках, возникающих при работе сопроцессора; когда сброшен, об ошибках сообщается в стиле, принятом в IBM PC, когда сопроцессор был внешней микросхемой — через контроллер прерываний.
WP Защита от записи (бит 16). Когда установлен, запрещает запись в страницы, доступные прикладным программам только на чтение, со стороны кода, выполняющегося на нулевом текущем уровне привилегий (CPL). Если этот флаг сброшен, код нулевого уровня может выполнять запись в такие страницы. Этот механизм облегчает создание новых процессов методом «копирования при записи», что используется в Unix-подобных ОС.
AM Маска выравнивания (бит 18). Разрешает контроль выравнивания операндов. Если установлен этот флаг и бит AC в регистре флагов, то при попытке обратиться к невыровненным операндам из программы, работающей на третьем текущем уровне привилегий (CPL), возникнет прерывание #AC (вектор 17). Если хотя бы один из указанных флагов сброшен или же выполняется программа с численно меньшим текущем уровне привилегий, обращение к невыровненным операндам прерывания не вызывает.
NW Запрет сквозной записи (бит 29). Управляет работой кэша (подробно об этом говорится в разделе Управление кэшированием).
CD Запрет кэширования (бит 30). Управляет работой кэша (подробно об этом говорится в разделе Управление кэшированием).
PG Страничный режим (бит 31). Установка этого разряда включает страничный механизм процессора, сброс — отключает его. Установка флага PG при сброшенном PE вызывает общее нарушение защиты (#GP, вектор 13).
Advertisement