Какой дескриптор сегмента возвращает команда сборки Intel "sgdt" - PullRequest
0 голосов
/ 24 января 2019

Я хочу реализовать 32-битное сопоставление с 4 ГБ плоской памяти для приложения, для этого мне нужно получить и обновить дескриптор сегмента данных и дескрипторы сегмента кода. Используя команду сборки "sgdt", я могу получить таблицу глобальных дескрипторов, но я не уверен, что это CS или DS или какой-либо другой дескриптор. Буду очень признателен, если кто-нибудь поможет мне справиться с этой путаницей.

Я полагаюсь на GRUB, чтобы установить GDT, поэтому я не знаю точное местоположение, куда он поместил все дескрипторы сегментов. Просматривая записи таблицы GDT, я вижу 5 одинаковых записей сегмента кода и 6 одинаковых записей сегмента данных, при этом базовый адрес каждой записи установлен на «0», а предел каждого набора равен «0xfffff». Можете ли вы сказать мне причину этих повторяющихся записей? И из этих просмотров, можете ли вы подтвердить, что режим плоской памяти уже установлен GRUB?

1 Ответ

0 голосов
/ 30 января 2019

Отвечая на мой собственный вопрос после получения отличного ответа в разделе комментариев.Таблица GDT содержит записи для дескрипторов сегмента в защищенном режиме. Сегмент кода и сегмент данных идентифицируются путем считывания значения регистра сегмента кода / регистра сегмента данных, где он содержит индекс для определенного сегмента (также называемый селектором сегмента) в таблице GDT.

...