Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_на_ассембл_для_WINLOWS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
907.78 Кб
Скачать

1.2.2. Дескрипторы сегментов

Дескрипторы - это объекты, находящиеся в соответствующих таблицах, на которые указывают селекторы сегмента. Они представляют собой 8-байтовые блоки, содержащие атрибуты области линейных адресов, то есть сегмента. Эти атрибуты включают 32-разрядный линейный базовый адрес сегмента, 20-разрядную длину и дробность сегмента, уровень защиты, привилегии по чтению, записи и выполнению, размер операндов по умолчанию (16-или 32-разрядные) и тип сегмента. Вся информация об атрибутах дескриптора содержится в 12 битах дескриптора сегмента. Сегменты в целом имеют три поля атрибутов: бит Р присутствия, биты DPL уровня привилегий дескриптора и бит S дескриптора сегмента.

S - бит системного сегмента – определяет, является ли сегмент системным (S=0), или же сегментом программы или данных (S=1).

Дескрипторы сегментов хранятся либо в таблице GDT либо в таблице LDT, которые процессор адресует с помощью регистров GDTR или LDTR соответственно.

Дескриптор сегмента обеспечивает процессор информацией, которая нужна ему для отображения логического адреса в линейный адрес. Эти дескрипторы создаются не прикладными программами, а компиляторами, редакторами связей, загрузчиками или операционной системой. На рис. 1.7 показан общий формат дескриптора сегмента, размер его – 8 байтов.

Дескриптор сегмента имеет следующие поля: база определяет место сегмента внутри линейного 4Г байт адресного пространства. Процессор объединяет три фрагмента базового адреса для формирования одного 32-разрядного значения; граница определяет размер сегмента.

Процессор связывает две части поля границы для формирования 20-разрядного результата. Затем он интерпретирует поле границы одним из двух способов в зависимости от состояния бита дробности:

1) в единицах байтов для определения границы до 1М байт;

2) в единицах страниц по 4К байт для определения границы до 4Г байт.

При загрузке поле границы сдвигается влево на 12 бит и в младшие биты вставляются единицы.

Бит дробности (G-гранулярность) – старший бит поля атрибутов. Если установлен, граница интерпретируется в единицах по 4К байт, если сброшен – в байтах.

31 0

База сегмента 0-15

Граница сегмента 15-0

База сегмента 24-31

Атри-буты

Граница сегмента 19-16

Атрибуты

База сегмента 16-23

Рис. 1.7. Общий формат дескриптора сегмента

1.2.3 Адресное пространство режима реального адреса

Физическая память организована в виде последовательности 8-разрядных ячеек - байтов. Каждому байту присвоен уникальный адрес. В реальном режиме реализована сегментная модель памяти. Сегментные регистры содержат информацию о базовом адресе сегмента. Процесс формирования физического адреса проще всего проследить на примере получения адреса команды. При определении физического адреса процессор сдвигает содержимое сегментного регистра CS на 4 двоичных разряда (умножает на 16) и складывает результат сдвига со смещением – содержимым регистра IP, логическим адресом команды внутри сегмента (рис.1.8). Поэтому адресное пространство реального режима вне зависимости от возможностей процессора имеет размер 1М байт.

Р ис.1.8. Формирование физического адреса в реальном режиме