Линейный адрес таблицы указывает, в какой области оперативной памяти находится таблица. Размер таблицы считается в байтах, при чём значение битов 0-15 должно быть на единицу меньше реального размера таблицы.
Структура регистра LDTR выглядит следующим образом:
Из всех 10 байт нам доступны лишь младшие два байта (биты 0-15), в которые следует загрузить селектор дескриптора таблицы LDT, находящийся в таблице GDT.
Рисунок 17. Структура данных регистра LDTR
В таком случае общий механизм преобразования логического адреса в линейный происходит по схеме, изображённой на рисунке 18.
Операции над регистрами GDTR, LDTR, IDTR перечислены в следующей таблице:
Рисунок 18. Формирование линейного адреса в защищённом режиме
Подробнее с использованием этих команд познакомимся в следующих статьях.Таблица 1. Операции над регистрами GDTR, LDTR, IDTR
Команда Описание lgdt загрузить регистр GDTR sgdt прочитать значение регистра GDTR lldt загрузить регистр LDTR sldt прочитать значение регистра LDTR lidt загрузить регистр IDTR sidt прочитать значение регистра IDTR
Теперь рассмотрим команды, которые переопределяют сегментные регистры. Команды позволяют переопределить сегментные регистры как явно, так и неявно. Команды явного переопределения сегментных регистров перечислены ниже:
К командам неявного переопределения регистров относятся следующие:Таблица 2. Команды явного переопределения сегментных регистров
Команда Описание mov запись в регистр значения pop извлечение из стека lds загрузка регистра DS les загрузка регистра ES lfs загрузка регистра FS lgs загрузка регистра GS lss загрузка регистра SS
Команды явного переопределения регистров предназначены для операций над регистрами DS, ES, FS, GS, SS. Чтобы попытаться изменить сегментный регистр CS, нам потребуется воспользоваться неявными командами. Теперь мы располагаем достаточной информацией, чтобы реализовать выполнение 32-битного кода. Но это уже будет в следующей части.Таблица 3. Команды неявного переопределения сегментных регистров
Команда Описание call вызов функции jmp прыжок ret возвращение из функции sysenter быстрый системный вызов sysexit быстрый возврат из системного вызова iret выход из обработчика прерывания int, into, int3 вызов прерывания
© SadKo 2006
Начала программирования в защищённом режиме (часть 2)
Дата публикации 24 авг 2017
| Редактировалось 10 янв 2018