Разделы:
Best links:
Системные регистры
Рис. 4.5. Формат регистра GDTR.
Адрес начала GDT - это тот адрес, по которому размещена таблица. Предел таблицы GDT - это максимальное смещение относительно её начала. Например, создаётся GDT, состоящую из 3-х дескрипторов - для сегментов кода, стека и данных. Общее число дескрипторов будет равно четырём, потому что первым по счёту будет идти нулевой дескриптор, а за ним уже остальные три:
|
Смещение от начала GDT |
Назначение дескриптора |
|
0 |
Нулевой |
|
8 |
Сегмент кода |
|
16 |
Сегмент стека |
|
24 |
Сегмент данных |
Размер GDT в данном случае будет равен 32 байтам, следовательно, предельное смещение в таблице будет равно 31 - это и есть предел GDT.
Для загрузки значения в регистр GDTR используется команда LGDT. Операндом этой команды является 48-разрядное значение адреса в памяти, где размещается адрес и предел GDT. Можно также сохранить содержимое GDTR командой SGDT, указав в операнде адрес 48-разрядной переменной в памяти. Следует отметить, что размер GDT желательно не менять в процессе выполнения программ в защищённом режиме. Если программа будет динамически создавать новые дескрипторы, то размер GDT лучше всего заранее задать достаточно большим, например, 64 Кб (максимальный размер). Однако, следует учитывать, что при обращении процессора к несуществующим дескрипторам, его поведение непредсказуемо, хотя оно, скорее всего, закончится зависанием.
Все 32-разрядные процессоры, начиная с Intel80386, имеют набор системных регистров, предназначенных для использования в защищённом режиме. Среди них есть регистры управления (Control Registers) CR0, CR1, CR2, CR3 и CR4.
Регистры управления, в основном, состоят из флагов. Назначение и использование каждого флага достаточно сложно и требует отдельного рассмотрения. Для начала мы рассмотрим только один бит PE (Protection Enable) регистра CR0, отвечающего за переход процессора в защищённый режим и обратно. Полный список с описаниями регистров управления можно найти, например на www.sasm.narod.ru/docs/pm.
Регистры управления предназначены для считывания и записи информации. Они имеют размер 32 бита и оперировать ими можно только целиком - считывается значение целого регистра, изменяются нужные биты и записывается обратно. Единственная команда, которой позволен доступ к этим регистрам - это MOV, в качестве операнда которой используется 32-разрядный регистр общего назначения.
предыдущаяследующая© Copyright, 2009.
Для связи: info@dgs-srl.com.