Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Структура дескриптора сегментов.


Автор: Compositum 19.12.2010, 17:39
Добрый день.
Читаю о дескрипторе сегментов. Возник вопрос, касательно размещения информации о начале/конце сегмента. 
Скрин:
user posted image

Верхнее изображение взято мною http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D1%80_%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%B0. Нижнее - это детализация верхного изображения, выполненная мною для большей наглядности: разбил на 4 части, по два байта каждая и пронумеровал по порядку все биты.

Из схемы видно, что адрес начала сегмента прописан в битах 16-39 и 56-63. Т.е. для того, чтобы получить полный линейный адрес начала сегмента, необходимо выполнить конкатенацию этих битов? Почему линейный адрес не прописывается подряд, например с 16 по 47? Для чего такое разбиение? Аналогичное разбиение видим для адреса конца сегмента - он так же разбит на два блока битов: 0-15 и 48-51. Чем обусловлено такое непоследовательное размещение?

Благодарю за внимание.
С уважением Андрей.

Автор: JAPH 19.12.2010, 19:13
Так сложилось исторически. Впервые защищенный режим появился в 80286, где дескрипторы были по 8 байт, но два старших были зарезервированы. В 80386 ввели поддержку адресации 4Г памяти, и для этого расширили поля базы и лимита, но для обеспечения обратной совместимости младшие 6 байт дескриптора оставили без изменений.

Автор: Compositum 19.12.2010, 19:55
Цитата(JAPH @ 19.12.2010,  19:13)
Так сложилось исторически. Впервые защищенный режим появился в 80286, где дескрипторы были по 8 байт, но два старших были зарезервированы. В 80386 ввели поддержку адресации 4Г памяти, и для этого расширили поля базы и лимита, но для обеспечения обратной совместимости младшие 6 байт дескриптора оставили без изменений.

Понял, спасибо! А почему в том случае, когда флаг G установлен в 1, за единицу измерения (при определении размера смещения последней ячейки сегмента) принимается именно 4096 байт (т.е. 2 в 12 степени), а не что-то другое? 

Автор: JAPH 19.12.2010, 20:36
Здесь уже могу только догадываться, что на кого повлияло, но благодаря именно такому коэффициенту 20-битного поля хватает для задания предела в 4Г. Плюс к тому 4К это размер страницы.

Автор: Compositum 19.12.2010, 21:04
Цитата(JAPH @ 19.12.2010,  20:36)
Здесь уже могу только догадываться, что на кого повлияло, но благодаря именно такому коэффициенту 20-битного поля хватает для задания предела в 4Г. Плюс к тому 4К это размер страницы.

Да, похоже на то, что шаг, величиной в 4096 приняли из-за размер страницы.

Благодарю за ответы!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)