Навигация сайта

  • Главная
  • Статьи
  • Учебники
  • Программы
  • Друзья сайта

Глава 8. Регистры управления

Все 32-разрядные процессоры, начиная с i386, имеют набор системных регистров, предназначенных для использования в защищённом режиме. Среди них есть регистры управления (Control Registers) CR0, CR1, CR2, CR3 и CR4.
Регистры управления, в основном, состоят из флагов. Назначение и использование каждого флага достаточно сложно и требует отдельного рассмотрения. Для начала мы рассмотрим только один бит PE регистра CR0, отвечающего за переход процессора в защищённый режим и обратно. Полный список с описаниями регистров CRi приводится в приложении "Регистры управления CRi".
Регистры управления предназначены для считывания и записи информации. Они имеют размер в 32 бита и оперировать ими можно только целиком - считали значение целого регистра, изменили нужные биты и записали обратно. Единственная команда, которой позволен доступ к этим регистрам - это MOV, в качестве операнда которой используется 32-разрядный регистр общего назначения.
В дальнейших главах мы будем рассматривать переход в защищённый режим и возврат из него в режим реальных адресов, для чего будем использовать только один бит из регистра CR0 - это нулевой бит, который называется PE (Protection Enable). Если установить этот бит в 1, процессор перейдёт в защищённый режим, если сбросить - то в режим реальных адресов.
Процессор после аппаратного сброса переходит в режим реальных адресов и бит PE сброшен.
Вот примеры использования бита PE:

1. Переводим процессор в защищённый режим.

mov eax,cr0 ; Копируем в EAX содержимое регистра CR0.

or al,1 ; Устанавливаем в копии 0-й бит, который
; соответствует 0-му биту CR0, т.е. биту PE.

mov cr0,eax ; Записываем в CR0 обновлённое значение.
; Процессор перешёл в защищённый режим.

... ; 1-я команда программы, которая выполнится
; в защищённом режиме.

2. Переводим процессор в режим реальных адресов.

mov eax,cr0
and al,0feh ; Сбрасываем бит PE.
mov cr0,eax ; Процессор перешёл в режим реальных адресов.


На самом деле, если вы просто выполните переход в защищённый режим, как показано на приведенном выше примере, то процессор зависнет. Для работы в защищённом режиме процессор использует дескрипторы сегментов, вместо их адресов (которые находятся в сегментных регистрах), поэтому прежде, чем перевести процессор в защищённый режим, нужно провести некоторые подготовительные работы.

 

 

Техническая поддержка и аудит сайта.