Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 12.05.2015
Сообщений: 37
1

Не могу понять действие сегментных регистров в защищенном режиме

17.11.2018, 16:01. Показов 2501. Ответов 1

Author24 — интернет-сервис помощи студентам
Добрый день! Пытаюсь разобраться с сегментными регистрами и возник ряд вопросов. Если я правильно понимаю, эти регистры в защищенном режиме указывают не на сам адрес в памяти, а не глобальную или локальную таблицу дескрипторов в которых лежат нужные адреса (или нет?).

1) Если это так, то значит, деление на cs, ds и т.д. происходит в самой таблице дескрипторов или как?
2) Как программа понимает, какую из таблиц нужно использовать?
3) Возможно ли как-то в процессе отладки, к примеру, с помощью GDB посмотреть содержание этих таблиц?
4) В реальном режиме они сразу указывают на точный адрес?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2018, 16:01
Ответы с готовыми решениями:

Ошибка в DOS-BOXо - на любое действие пишет "эта операция недопустима в защищенном режиме"
Проблема в следующем-установлена винда 7 х64.Нужно запустить программу(не игра),написанную под...

Обменять содержимое сегментных регистров DS и ES
Вот задачка: Обменять содержимое сегментных регистров DS и ES. У меня получилось вот так: MOV...

Связь сегментных регистров с сегментами
При написании *.com програм адреса в сегментные регистры заносятся директивой assume assume...

Вывести значение сегментных регистров на экран
Как вывести значения сегментных регистром на экран?

1
Эксперт Hardware
Эксперт Hardware
6104 / 2348 / 390
Регистрация: 29.07.2014
Сообщений: 3,109
Записей в блоге: 4
17.11.2018, 23:01 2
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата Сообщение от AleK135 Посмотреть сообщение
Если это так, то значит, деление на cs, ds и т.д. происходит в самой таблице дескрипторов или как?
..примерно так-оно и есть.
В таблице GDT прописаны 8-байтные дескрипторы, которые описывают сегменты памяти (в РМ сегменты называют секциями). Дескрипторы отличаются лишь (1)размерами описываемых секций (база всегда =0, а лимит может быть произвольным), второе - атрибутами защиты этих секций (R/W/Exec), и третье - типом (секция кода/данных/TSS).

Когда система загружает EXE-файл в память, ядро проверяет, от куда происходит запуск - из пространства юзера (диапазон 00010000..7FFFFFFF), или ядра (80000000..FFFFFFFF). В зависимости от этого, система записывает в сегментный регистр 2-байтный селектор, где указывается 2-битное поле защиты DPL 0=ядро, или 3=юзер. Если это сегмент-данных(DS/ES/SS), то поле называют DPL. Если сегмент-кода(CS), то CPL (Descriptor_ или Current_Privelege_Level).

Теперь по этому селектору, система выбирает соответствующий дескриптор из таблицы GDT, и копирует этот дескриптор из таблицы в скрытую/8-байтную часть сегментного регистра - итого в нём получается уже 10-байт, из которых программисту "виден" только 2-байтный селектор. По сути селектор - это порядковый номер (смещение) дескриптора в таблице GDT (нулевой не используется, а минимальный 8 принадлежит ядерному сегменту-кода CS=8). Процессор обращается к GDT только 1-раз при запуске приложения, и скопировав дескриптор в сегм.регистр, забывает о GDT вообще (в течении одной задачи).

Адрес таблицы GDT хранится в спец/регистре процессора GDTR. Кроме него есть ещё LDTR (локальная таблица выбирается битом(3) селектора), IDTR (регистр базы таблицы-прерываний), TR (базовый рег. сегмента задачи Task) и прочие. Вся эта кухня описывается в манах Интела том(2), или можешь почитать на русише здесь: Память компьютера
3
17.11.2018, 23:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2018, 23:01
Помогаю со студенческими работами здесь

Загрузить в стек содержимое всех сегментных регистров
Сделать на Си с ассемблерной вставкойЗагрузить в стек содержимое всех сегментных регистров и сумм...

Не могу понять действие строки из кода
Помогите, не могу понять что делает эта строка из кода: Result := 0; for I := 1 to...

Таймер в режиме захвата. Не могу понять что не так
Мучаю stmf429I-disco. Простая задача: TIM3 генерирует ШИМ-сигнал, TIM4 считает период следований...

Память в защищенном режиме
Всем доброго дня! Я, наконец, сдал основные экзамены и теперь снова могу заняться столь интересным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru