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

UptoLike

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

26
старшем полубайте байта attr_2 (в частности, бит дробности). Для всех
наших сегментов значение этого полубайта равно 0.
Сегмент данных data (строка 18 листинга), который для удобства
изучения функционирования программы расположен в начале программы,
до сегмента команд, объявлен с типом использования use16 (так же будет
объявлен и сегмент команд). Этот описатель объявляет, что в данном
сегменте будут по умолчанию использоваться 16-битовые адреса. Если бы
мы готовили нашу программу для работы под управлением операционной
системы защищенного режима, реализующей все возможности
микропроцессора, тип использования был бы use32. Однако наша
программа будет запускаться под управлением DOS, которая работает в
реальном режиме с 16-битовыми адресами и операндами.
Сегмент данных начинается с описания важнейшей системной
структурытаблицы глобальных дескрипторов. Как уже отмечалось
выше, обращение к сегментам в защищенном режиме возможно только
через дескрипторы этих сегментов. Таким образом, в таблице
дескрипторов должно быть описано столько дескрипторов, сколько
сегментов использует программа. В нашем случае в таблицу включены,
помимо обязательного нулевого дескриптора, всегда занимающего первое
место в таблице, четыре дескриптора для сегментов данных, команд, стека
и дополнительного сегмента данных, который мы наложим на видеобуфер,
чтобы обеспечить возможность вывода в него символов. Порядок
дескрипторов в таблице (кроме нулевого) не имеет значения.
Помимо единственной таблицы глобальных дескрипторов,
обозначаемой GDT от Global Descriptor Table, в памяти может находиться
множество таблиц локальных дескрипторов (LDT от Local Descriptor
Table). Разница между ними в том, что сегменты, описываемые
глобальными дескрипторами, доступны всем задачам, выполняемым
процессором, а к сегментам, описываемым локальными дескрипторами,
старшем полубайте байта attr_2 (в частности, бит дробности). Для всех
наших сегментов значение этого полубайта равно 0.
        Сегмент данных data (строка 18 листинга), который для удобства
изучения функционирования программы расположен в начале программы,
до сегмента команд, объявлен с типом использования use16 (так же будет
объявлен и сегмент команд). Этот описатель объявляет, что в данном
сегменте будут по умолчанию использоваться 16-битовые адреса. Если бы
мы готовили нашу программу для работы под управлением операционной
системы     защищенного       режима,   реализующей     все     возможности
микропроцессора, тип использования был бы use32. Однако наша
программа будет запускаться под управлением DOS, которая работает в
реальном режиме с 16-битовыми адресами и операндами.
        Сегмент данных начинается с описания важнейшей системной
структуры – таблицы глобальных дескрипторов. Как уже отмечалось
выше, обращение к сегментам в защищенном режиме возможно только
через    дескрипторы   этих    сегментов.    Таким   образом,    в   таблице
дескрипторов должно быть описано столько дескрипторов, сколько
сегментов использует программа. В нашем случае в таблицу включены,
помимо обязательного нулевого дескриптора, всегда занимающего первое
место в таблице, четыре дескриптора для сегментов данных, команд, стека
и дополнительного сегмента данных, который мы наложим на видеобуфер,
чтобы обеспечить возможность вывода в него символов. Порядок
дескрипторов в таблице (кроме нулевого) не имеет значения.
        Помимо    единственной     таблицы     глобальных     дескрипторов,
обозначаемой GDT от Global Descriptor Table, в памяти может находиться
множество таблиц локальных дескрипторов (LDT от Local Descriptor
Table). Разница между ними в том, что сегменты, описываемые
глобальными дескрипторами, доступны всем задачам, выполняемым
процессором, а к сегментам, описываемым локальными дескрипторами,


                                        26