Иллюстрированный самоучитель по Assembler


Основы защищенного режима - часть 12


Обсуждая в начале этого раздела основы защищенного режима, мы не затронули многие, в том числе принципиальные вопросы, с которыми придется столкнуться при написании работоспособной программы. Необходимые пояснения будут даны в конце этого раздела.


Пример 4-4. Программирование защищенного режима


.586Р ;Разрешение трансляции всех команд МП 586

;Структура для описания дескрипторов сегментов

dcr struc ;Имя структуры

limit dw 0 ;Граница (биты 0...15)

base_l dw 0 ;База, биты 0...15

base_m db 0 ;База, биты 16...23

attr_l db 0 ;Байт атрибутов 1

attr_2 db ;Граница (биты 16...19) и атрибуты 2

base_h db 0 ;База, биты 24...31

dcr ends ;

data segment use16 ;

;Таблица глобальных дескрипторов GDT

gdt_null dcr <0,0,0,0,0,0> ;Селектор 0-обязательный

;нулевой дескриптор

gdt_data dcr <data_size-l,0,0,92h,0,0> ;Селектор 8,

;сегмент данных

gdt_code dcr <code_size-l,0,0,98h,0,0>;Селектор 16,

;сегмент команд

gdt_stack dcr <511,0,0,92h,0,0> ;Селектор 24 -

;сегмент стека

gdt_screen dcr <4095,B000h,OBh,92h,0,0> ;Селектор 32,

;видеобуфер

pdescr df 0 ;Псевдодескриптор для команды Igdt

data_size=$-gdt_null ;Размер сегмента данных

data ends ;Конец сегмента данных

text segment use16 ;Сегмент команд, 16-разрядный режим

assume CS:text,DS:data;

main proc ;

xor EAX,EAX ;Очистим ЕАХ

mov AX,data ;Загрузим в DS сегментный

mov DS,AX ;адрес сегмента данных

;Вычислим 32-битовый линейный адрес сегмента данных

;и загрузим его в дескриптор сегмента данных в GDT.

;В регистре АХ уже находится сегментный адрес.

;Умножим его на 16 сдвигом влево на 4 бита

shl ЕАХ,4 ;В ЕАХ линейный базовый адрес

mov EBP, ЕАХ ;Сохраним его в ЕВР для будущего

mov BX,offset gdt_data ;В ВХ адрес дескриптора

mov [BX].base_l,AX ;Загрузим младшую часть базы

rol ЕАХ,16 ;Обмен старшей и младшей половин ЕАХ

mov [BX].base_m,AL ;Загрузим среднюю часть базы

;Вычислим 32-битовый линейный адрес -сегмента команд

;и загрузим его в дескриптор сегмента команд в GDT

хог ЕАХ, ЕАХ ;Очистим ЕАХ




Начало  Назад  Вперед



Книжный магазин