ВУЗ:
Составители:
28
физический адрес страницы известен, он равен B8000h. Младшие 16
разрядов базы (число 8000h) заполняют слово base_l дескриптора, биты
16... 19 (число 0bh) – байт base_m. Биты 20...31 базового адреса равны 0,
поскольку видеобуфер размещается в первом мегабайте адресного
пространства.
Перед переходом в защищенный режим процессору надо будет
сообщить физический адрес таблицы глобальных дескрипторов и ее
размер (точнее, границу). Размер GDT определяется на этапе трансляции в
строке 30.
Назначение оставшихся строк сегмента данных станет ясным в
процессе рассмотрения программы.
Сегмент команд text (строка 41 листинга) начинается, как и всегда,
оператором segment, в котором указывается тип использования use16, так
как мы составляем 16-разрядное приложение. Указание описателя usel6.He
запрещает использовать в программе 32-битовые регистры.
Фактически вся программа примера, кроме ее завершающих строк, а
также фрагмента, выполняемого в защищенном режиме, посвящена
подготовке перехода в защищенный режим. Прежде всего, надо завершить
формирование дескрипторов сегментов программы, в которых остались
незаполненными базовые адреса сегментов. Базовые (32-битовые) адреса
определяются путем умножения значений сегментных адресов на 16.
Сначала производится очистка 32-разрядного аккумулятора (строка 44),
так как в нем будет сформирован позднее базовый 32-разрядный адрес
(фактически эта команда нужна для очистки старшего слова расширенного
аккумулятора). После обычной инициализации сегментного регистра DS
(строки 45, 46), которая позволит нам обращаться к полям данных
программы (в реальном режиме!) выполняется сдвиг на 4 разряда
содержимого регистра EАХ. Эта операция выполняется командой shl
EAX,4. Команда сдвигает влево содержимое 32-разрядного аккумулятора
физический адрес страницы известен, он равен B8000h. Младшие 16 разрядов базы (число 8000h) заполняют слово base_l дескриптора, биты 16... 19 (число 0bh) – байт base_m. Биты 20...31 базового адреса равны 0, поскольку видеобуфер размещается в первом мегабайте адресного пространства. Перед переходом в защищенный режим процессору надо будет сообщить физический адрес таблицы глобальных дескрипторов и ее размер (точнее, границу). Размер GDT определяется на этапе трансляции в строке 30. Назначение оставшихся строк сегмента данных станет ясным в процессе рассмотрения программы. Сегмент команд text (строка 41 листинга) начинается, как и всегда, оператором segment, в котором указывается тип использования use16, так как мы составляем 16-разрядное приложение. Указание описателя usel6.He запрещает использовать в программе 32-битовые регистры. Фактически вся программа примера, кроме ее завершающих строк, а также фрагмента, выполняемого в защищенном режиме, посвящена подготовке перехода в защищенный режим. Прежде всего, надо завершить формирование дескрипторов сегментов программы, в которых остались незаполненными базовые адреса сегментов. Базовые (32-битовые) адреса определяются путем умножения значений сегментных адресов на 16. Сначала производится очистка 32-разрядного аккумулятора (строка 44), так как в нем будет сформирован позднее базовый 32-разрядный адрес (фактически эта команда нужна для очистки старшего слова расширенного аккумулятора). После обычной инициализации сегментного регистра DS (строки 45, 46), которая позволит нам обращаться к полям данных программы (в реальном режиме!) выполняется сдвиг на 4 разряда содержимого регистра EАХ. Эта операция выполняется командой shl EAX,4. Команда сдвигает влево содержимое 32-разрядного аккумулятора 28
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »