Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gosi.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
528.21 Кб
Скачать

17 Назначение системных регистров и глобальной дескрипторной таблицы. Системные регистры.

Системные регистры предназначены для обслуживания ЦП при многозадачной обработке. Для этого ЦП переводится в защищенный режим, однако, прежде чем процессор перейдет в защищенный режим, должна быть определена глобальная дескрипторная таблица GDT (Global Descriptor Table), так как все сегменты и прочие системные объекты должны быть описаны в дескрипторной таблице. 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 (Control Register). Регистры управления состоят, в основном, из вкладок. Рассмотрим, например, бит PE (Protection Enable) регистра CR0, отвечающий за переход процессора в защищенный режим и обратно. Регистры управления предназначены для записи и считывания информации. Они имеют размер 32 бита и оперировать ими можно только целиком, то есть считывается значение целого регистра, изменяются нужные биты и записываются обратно. Единственная команда, которая позволяет доступ к этим регистрам – MOV, в качестве операнда которой, используется 32-разрядный регистр общего назначения. Если установить бит PE=1, то процессор перейдет в защищенный режим, если PE=0 – то в режим реальных адресов.

Пример:

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

mov eax, cr0 ;Копируем в eax содержимое cr0

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

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

режим.

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

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

move ax, cr0

and al, 0feh ; Сбрасываем бит PE.

mov cr0, eax ; Процессор перешел в режим реальных адресов.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]