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

9. Дескриптор сегменту. Види дескрипторів....

Дескриптор  — це 64-битная (восьмибайтная) структура даних, яка може зустрічатися в таблицях GDT і LDT. Дескриптор здатний описувати сегмент коду, сегмент даних, сегмент стану задачі, бути шлюзом виклику, пастки, переривання або задач. В GDT також може знаходитися дескриптор LDT.

Дескриптор сегмента даних або коду (детально розглянутий в главе  6.1)

байт  7:  биты 31  –  24 бази сегмента

байт  6:

бит  7:  бит гранулярности (0  — ліміт в байтах, 1  — ліміт в 4-кілобайтних одиницях)

бит  6:  бит розрядності (0  — 16-битный, 1  — 32-битный сегмент)

бит  5:  0

бит  4:  зарезервировано для операційної системи

биты  3  –  0:  биты 19  –  16 ліміту

байт  5:  (байт доступу)

бит  7:  бит присутність сегмента

биты  6  –  5:  уровень привілеїв дескриптора (DPL)

бит  4:  1 (тип дескриптора  — не системний)

бит  3:  тип сегмента (0  — даних, 1  — коду)

бит  2:  бит підлеглості для коду, біт розширення вниз для даних

бит  1:  бит дозволи читання для коду, біт дозволу запису для даних

бит  0:  бит доступу (1  — до сегмента було звертання)

байт  4:  биты 23  –  16 бази сегмента

байты  3  –  2:  биты 15  –  0 бази

байты  1  –  0:  биты 15  –  0 ліміту

Якщо в дескрипторі біт 4 байта доступу рівний 0, дескриптор називається системним. В цьому випадку біти 0  –  3 байта доступу визначають один з шістнадцяти можливих типів дескриптора (табл.  22).

Таблиця 22. Типи системних дескрипторів

0

Зарезервований тип

8

Зарезервований тип

1

Вільний 16-битный TSS

9

Вільний 32-битный TSS

2

Дескриптор таблиці LDT

А

Зарезервований тип

3

Зайнятий 16-битный TSS

В

Зайнятий 16-битный TSS

4

16-битный шлюз виклику

З

32-битный шлюз виклику

5

Шлюз задачі

D

Зарезервований тип

6

16-битный шлюз переривання

Е

32-битный шлюз переривання

7

16-битный шлюз пастки

F

32-битный шлюз пастки

Дескриптори шлюзів

Дальні CALL або JMP на адресу з будь-яким зсувом і з селектором, вказуючим на дескриптор шлюзу виклику, приводять до передачі управління за адресою, указаною в дескрипторі. Звичайно такі дескриптори використовуються для передачі управління між сегментами з різними рівнями привілеїв (див. главу  10.7).

CALL або JMP на адресу з селектором, вказуючим на шлюз задачі, приводять до перемикання задач (див. главу  10.8).

Шлюзи переривань і пасток використовуються для виклику обробників відповідно переривань і виключень типу пастки (див. главу  10.5).

байты  7  –  6:  биты 31  –  16 зсуви (0 для 16-битных шлюзів і шлюзу задачі)

байт  5:  (байт доступу)

бит  7:  бит присутність сегмента

биты  6  –  5:  DPL  — рівень привілеїв дескриптора

бит  4:  0

биты  3  –  0:  тип шлюзу (3, 4, 5, 6, 7, В, З, Е, 7)

байт  4:

биты  7  –  5:  000

биты  4  –  0:  00000 або (для шлюзу виклику) число подвійних слів, які будуть скопійовані із стека зухвалої задачі в стек викликається

байты  3  –  2:  селектор сегмента

байты  1  –  0:  биты 15  –  0 зсуви (0 для шлюзу задачі)

Дескриптори TSS і LDT

Ці два типи дескрипторів застосовуються в багатозадачному режимі, про який розказано далі. TSS  — сегмент стану задачі, використовуваний для зберігання всієї необхідної інформації про кожну задачу в багатозадачному режимі. LDT  — таблиця локальних дескрипторів, своя для кожної задачі.

Формати цих дескрипторів співпадають з форматом дескриптора для сегмента коду або даних, за винятком того, що біт розрядності завжди рівний нулю і, природно, системний біт рівний нулю, і біти 3  –  0 байта доступу містять номер типу сегмента (1, 2, 3, 9, В). Команди JMP і CALL на адресу з селектором, відповідним TSS незайнятої задачі, приводять до перемикання задач.

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