Системное программное обеспечение. Особенности программирования 32-разрядных процессоров. Рощин А.В. - 23 стр.

UptoLike

Составители: 

23
необходимо включить директиву ассемблера .386Р.
Программа начинается с описания структуры дескриптора сегмента.
В отличие от реального режима, в котором сегменты определяются их
базовыми адресами, задаваемыми программистом в явной форме, в
защищенном режиме для каждого сегмента программы должен быть
определен дескриптор – 8-байтовое поле, в котором в определенном
формате записываются базовый адрес сегмента, его длина и некоторые
другие характеристики (рисунок 1.8) [8].
Рисунок 1.8 – Дескриптор сегмента
Рисунок 1.9 – Селектор дескриптора
Теперь для обращения к требуемому сегменту программист заносит
в сегментный регистр не сегментный адрес, а так называемый селектор
(рисунок 1.9), в состав которого входит номер (индекс) соответствующего
сегмента дескриптора.
Процессор по этому номеру находит нужный дескриптор, извлекает
из него базовый адрес сегмента и, прибавляя к нему указанное в конкрет-
ной команде смещение (относительный адрес), формирует адрес ячейки
памяти. Индекс дескриптора (0, 1, 2 и т.д.) записывается в селектор,
начиная с бита 3, что эквивалентно умножению его на 8. Таким образом,
можно считать, что селекторы последовательных дескрипторов
представляют собой числа 0, 8, 16, 24 и т.д. Другие поля селектора,
которые для нашего случая принимают значения 0, будут описаны ниже.
необходимо включить директиву ассемблера .386Р.
     Программа начинается с описания структуры дескриптора сегмента.
В отличие от реального режима, в котором сегменты определяются их
базовыми адресами, задаваемыми программистом в явной форме, в
защищенном режиме для каждого сегмента программы должен быть
определен дескриптор – 8-байтовое поле, в котором в определенном
формате записываются базовый адрес сегмента, его длина и некоторые
другие характеристики (рисунок 1.8) [8].




                    Рисунок 1.8 – Дескриптор сегмента




                    Рисунок 1.9 – Селектор дескриптора

     Теперь для обращения к требуемому сегменту программист заносит
в сегментный регистр не сегментный адрес, а так называемый селектор
(рисунок 1.9), в состав которого входит номер (индекс) соответствующего
сегмента дескриптора.
     Процессор по этому номеру находит нужный дескриптор, извлекает
из него базовый адрес сегмента и, прибавляя к нему указанное в конкрет-
ной команде смещение (относительный адрес), формирует адрес ячейки
памяти. Индекс дескриптора (0, 1, 2 и т.д.) записывается в селектор,
начиная с бита 3, что эквивалентно умножению его на 8. Таким образом,
можно    считать,    что   селекторы   последовательных   дескрипторов
представляют собой числа 0, 8, 16, 24 и т.д. Другие поля селектора,
которые для нашего случая принимают значения 0, будут описаны ниже.



                                       23