Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Примеры

ПРЕДУПРЕЖДЕНИЕ Относится ко всем встречающимся в курсе структурам, в том числе к дескрипторам! Поля, занимающие больше одного байта, находятся в стандартном для Intel x86 формате Little Endian, то есть в байте с младшим адресом расположена менее значимая часть числа (например, число 12345678h будет представлено последовательностью байт 78h 56h 34h 12h). Применительно к дескриптору сегмента кода/данных, это означает следующее: - в нулевом байте – младшие 8 разрядов Segment Limit, в первом – от 8-го до 15-го. - во втором байте – младшие 8 разрядов Base Address, в третьем – от 8-го до 15-го, в четвёртом – от 16-го до 23-го.

Дескриптор сегмента данных, размер сегмента 4 Гб, базовый адрес 0, Read/Write:

db 0FFh; Segment Limit db 0FFh db 0; base address db 0 db 0 db 10010010b; 1001, C/D – 0, 0, R/W – 1, 0 db 10001111b; G - 1, 000, Limit - 1111 db 0; base address

Дескриптор сегмента данных, размер сегмента 64 Кб, базовый адрес 0, Read/Write:

db 0FFh; Segment Limit db 0FFh db 0; base address db 0 db 0 db 10010010b; 1001, C/D – 0, 0, R/W – 1, 0 db 00000000b; G - 0, 000, Limit - 0000 db 0; base address

Дескриптор сегмента кода, размер сегмента 64 Кб, базовый адрес 12345678h, Execute/Read:

db 0FFh; Segment Limit db 0FFh db 78h; base address db 56h db 34h db 10011010b; 1001, C/D – 1, 0, R/W – 1, 0 db 00000000b; G - 0, 000, Limit - 0000 db 12h; base address

Как видите, определять дескрипторы таким образом вполне возможно и даже не слишком сложно. Но всё-таки, когда основной принцип уже понятен, удобнее использовать вот такую структуру:

segment_descriptor struct limit_low dw 0; Младшие два байта поля Segment limit base_low dw 0; Младшие два байта поля Base Address base_high0 db 0; Второй байт поля Base Address type_and_permit db 0; Флаги. Этот байт отвечает за то, кто и как может ; использовать дескриптор. Подробнее – в следующих ; главах. flags db 0; Ещё одни флаги base_high1 db 0; Старший байт поля Base Address segment_descriptor ends

Глобальная таблица дескрипторов

Если внимательно посмотреть на примеры дескрипторов, приведённые выше, несложно заметить, что это всего лишь объявления некоторых восьмибайтных структур. Но просто объявить в своей программе такую структуру и мысленно назвать её дескриптором совершенно недостаточно для того, чтобы начать использовать описываемый этим дескриптором сегмент. Потому что процессор читать мысли не умеет и задумку не поймёт... Для того чтобы процессор понял, дескриптор должен находиться в глобальной таблице дескрипторов (Global Descriptor Table, GDT).

ПРИМЕЧАНИЕ А почему бы вместо этого не увеличить размер сегментных регистров до восьми байт, чтобы туда влезал дескриптор? Об этом ниже, в разделе «Селекторы и сегментные регистры».

Таблица дескрипторов состоит из двух частей:

  • Собственно таблица – область памяти, содержащая дескрипторы.
  • Специальный регистр, содержащий указатель на таблицу и объясняющий процессору, что это не просто какая-то «область памяти», а именно таблица дескрипторов.

Рассмотрим по частям.

<== предыдущая лекция | следующая лекция ==>
Свойства сегмента | Регистр
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.