Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Системные регистры.
Системные регистры предназначены для обслуживания ЦП при многозадачной обработке. Для этого ЦП переводится в защищенный режим, однако, прежде чем процессор перейдет в защищенный режим, должна быть определена глобальная дескрипторная таблица GDT (GlobalDescriptorTable), так как все сегменты и прочие системные объекты должны быть описаны в дескрипторной таблице. GDT - это область памяти, в которой находятся дескрипторы.GDT должна располагаться в пределах первого мегабайта адресного пространства, так как перевести процессор в защищенный режим можно только из режима реальных адресов. Подразумевается, что GDT будет выровнена на границу 8 байт, т.к. дескрипторы, из которых она состоит, имеют восьмибайтный размер. Такое выравнивание позволит процессору максимально быстро обращаться к дескрипторам, а следовательно – увеличивает производительность. Число дескрипторов, определенных в GDT может быть любым в пределах от 0 до 8192. Нулевой дескриптор, то есть, определенный в самом начале GDT, процессор не использует. Если все же в программе встречается обращение к нулевому дескриптору, то процессор генерирует исключение и не позволяет доступ к этому дескриптору. В связи с этим, рекомендуется использовать нулевой дескриптор как шаблон, на основе которого программа может создавать новые дескрипторы. GDT используется процессором все время пока он находится в защищенном режиме. Параметры GDT хранятся в специальном 48 разрядном регистре GDTR.
Адреса GDT – адрес по которому размещена таблица.
Предел GDT – максимальное смещение относительно ее начала.
Для загрузки значений в регистр GDTR используется команда LGDT, операндом этой команды является 48-разрядное значение адреса памяти, где размещается адрес и предел GDT. Следует отметить, что размер GDT желательно не менять в процессе выполнения программы в защищенном режиме. Если программа будет динамически создавать новые дескрипторы, то размер GDT лучше всего заранее задать достаточно большим, например – 64 Кб (это максимальный размер). При этом следует учитывать, что при обращении процессора к несуществующим дескрипторам его поведение непредсказуемо, скорее всего, он зависнет.
Все 32-разрядные процессоры, начиная с Intel80386, имеют набор системных регистров, предназначенных для использования в защищенном режиме, среди них есть регистр управления CR0-CR4 (ControlRegister). Регистры управления состоят, в основном, из вкладок. Рассмотрим, например, бит PE (ProtectionEnable) регистра CR0, отвечающий за переход процессора в защищенный режим и обратно. Регистры управления предназначены для записи и считывания информации. Они имеют размер 32 бита и оперировать ими можно только целиком, то есть считывается значение целого регистра, изменяются нужные биты и записываются обратно. Единственная команда, которая позволяет доступ к этим регистрам – MOV, в качестве операнда которой, используется 32-разрядный регистр общего назначения. Если установить бит PE=1, то процессор перейдет в защищенный режим, если PE=0 – то в режим реальных адресов.
Пример:
1.Перевод процессоров в защищенный режим.
moveax, cr0;Копируем в eax содержимое cr0
oral, 1;Устанавливаем в копии 0 бит, которые соотв. 0 биту в CR0, то есть PE
movcr0, eax; Записываем в cr0 обновленное значение, проц. Перешел в защищенный
режим.
; 1 команда программы, которая выполнится в защищенном режиме
2.Перевод процессора в режим реальных адресов.
move ax, cr0
and al, 0feh; Сбрасываембит PE.
movcr0, eax; Процессор перешел в режим реальных адресов.
Если просто выполнить переход в защищенный режим, как в примере, то процессор зависнет, для работы в защищенном режиме, процессор использует дескрипторы сегментов вместо их адресов, поэтому прежде чем перевести процессор в защищенный режим нужно провести определенные подготовительные работы.
Дата публикования: 2015-01-24; Прочитано: 484 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!