ВУЗ:
Составители:
29
на указанное константой число бит (4). Следующая команда сохраняет
получившееся 32-разрядное значение адреса в регистре EBP. После этого в
регистр BX помещается смещение дескриптора сегмента кода.
Следующими тремя командами (строки 53 – 55) младшее и старшее слова
регистра EAX отправляется в поля base_l и base_m дескриптора gdt_data,
соответственно. Аналогично вычисляются 32-битовые адреса сегментов
команд и стека, помещаемые в дескрипторы gdt_code (строки 57 – 63) и
gdt_stack (строки 65 – 71).
Следующий этап подготовки к переходу в защищенный режим –
загрузка в регистр процессора GDTR (Global Descriptor Table Register,
регистр таблицы глобальных дескрипторов) информации о таблице
глобальных дескрипторов. Эта информация включает в себя линейный
базовый адрес таблицы и ее границу и размещается в 6 байтах поля
данных, называемого псевдодескриптором. Для загрузки GDTR
предусмотрена специальная привилегированная команда lgdt (load global
descriptor table, загрузка таблицы глобальных дескрипторов), которая тре-
бует указания в качестве операнда имени псевдодескриптора. Формат
псевдодескриптора приведен на рисунке 1.10.
Рисунок 1.10 – Формат псевдодескриптора
В нашем примере заполнение псевдодескриптора упрощается
вследствие того, что таблица глобальных дескрипторов расположена в на-
чале сегмента данных, и ее базовый адрес совпадает с базовым адресом
всего сегмента, который уже был вычислен и помещен в дескриптор
gdt_data. В строках 73, 74 базовый адрес и граница помещаются в
требуемые поля pdescr, а в строке 75 командой lgdt загружается регистр
GDTR, сообщая, таким образом, процессору о местонахождение и размер
на указанное константой число бит (4). Следующая команда сохраняет
получившееся 32-разрядное значение адреса в регистре EBP. После этого в
регистр BX помещается смещение дескриптора сегмента кода.
Следующими тремя командами (строки 53 – 55) младшее и старшее слова
регистра EAX отправляется в поля base_l и base_m дескриптора gdt_data,
соответственно. Аналогично вычисляются 32-битовые адреса сегментов
команд и стека, помещаемые в дескрипторы gdt_code (строки 57 – 63) и
gdt_stack (строки 65 – 71).
Следующий этап подготовки к переходу в защищенный режим –
загрузка в регистр процессора GDTR (Global Descriptor Table Register,
регистр таблицы глобальных дескрипторов) информации о таблице
глобальных дескрипторов. Эта информация включает в себя линейный
базовый адрес таблицы и ее границу и размещается в 6 байтах поля
данных, называемого псевдодескриптором. Для загрузки GDTR
предусмотрена специальная привилегированная команда lgdt (load global
descriptor table, загрузка таблицы глобальных дескрипторов), которая тре-
бует указания в качестве операнда имени псевдодескриптора. Формат
псевдодескриптора приведен на рисунке 1.10.
Рисунок 1.10 – Формат псевдодескриптора
В нашем примере заполнение псевдодескриптора упрощается
вследствие того, что таблица глобальных дескрипторов расположена в на-
чале сегмента данных, и ее базовый адрес совпадает с базовым адресом
всего сегмента, который уже был вычислен и помещен в дескриптор
gdt_data. В строках 73, 74 базовый адрес и граница помещаются в
требуемые поля pdescr, а в строке 75 командой lgdt загружается регистр
GDTR, сообщая, таким образом, процессору о местонахождение и размер
29
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »
