| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Структура дескриптора сегментов. |
| Автор: Compositum 19.12.2010, 17:39 |
| Добрый день. Читаю о дескрипторе сегментов. Возник вопрос, касательно размещения информации о начале/конце сегмента. Скрин: ![]() Верхнее изображение взято мною 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 | ||
Понял, спасибо! А почему в том случае, когда флаг G установлен в 1, за единицу измерения (при определении размера смещения последней ячейки сегмента) принимается именно 4096 байт (т.е. 2 в 12 степени), а не что-то другое? |
| Автор: JAPH 19.12.2010, 20:36 |
| Здесь уже могу только догадываться, что на кого повлияло, но благодаря именно такому коэффициенту 20-битного поля хватает для задания предела в 4Г. Плюс к тому 4К это размер страницы. |
| Автор: Compositum 19.12.2010, 21:04 | ||
Да, похоже на то, что шаг, величиной в 4096 приняли из-за размер страницы. Благодарю за ответы! |