Глава 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 ; Процессор перешёл в режим реальных адресов.
На самом деле, если вы просто выполните переход в защищённый режим, как показано на приведенном выше примере, то процессор зависнет. Для работы в защищённом режиме процессор использует дескрипторы сегментов, вместо их адресов (которые находятся в сегментных регистрах), поэтому прежде, чем перевести процессор в защищённый режим, нужно провести некоторые подготовительные работы.
Следующая глава | Оглавление | Вопросы? Замечания? Пишите: sasm@narod.ru |
Copyright © Александр Семенко. |