E.0.1. Базовые адреса и формирование линейных адресов.
Базовые адреса содержатся в сегментных регистрах микропроцессоров i8086/88 и в регистрах селекторов сегментов в микропроцессорах x86 (смотри VOLIII(6), "Классификация регистров для сегментации и страничной организации памяти".) Эти регистры шестнадцатиразрядные. Однако образующийся в результате сложения базового и эффективного адреса линейный адрес является 20-ти разрядным. Схема формирования 20-тиразрядного адреса из базового и эффективного показана на рисунке E.0.
Рис. E.0. Образование линейного адреса в микропроцессорах i8086/88 и реальном режиме работы микропроцессоров x86.
Базовые адреса выравнены на границах параграфа (смотри предыдущий подраздел). Поэтому трансляция линейного адреса в физический не вызывает проблем.
Примечание: Это справедливо для микропроцессоров i8086/88. В защищенном режиме работы микропроцессоров значение в сегментном регистре не имеет прямой взаимосвязи с реальным адресом в памяти. Кроме того, сомо понятие "параграф" там не используется.
Следует отметить, что в микропроцессоре i8086 максимальное значение физического адреса составляет FFFFFh (или 1Мбайт - 1 байт). Однако величина максимального значения линейного адреса (сумма максимальных значений базового и эффективного адресов) равна:
(E.1.)
Таким образом максимальный линейный адрес имеет размер 1,062 Мбайт (то есть на 64 Кбайт больше, чем адресное пространство в 1 Мбайт). Поэтому в микропроцессорах i8086/88 происходит "заворачивание" адреса вокруг границы сегмента. (то есть физический адрес (формула E.1.) будет иметь значение 0FFEFh). В микропроцессоре i80286, в резульате ошибки разработчиков, такого заворачивания нет (смотри раздел Верхняя память). В микропроцессорах i80386 и выше это "заворачивание" можно включить, а можно и выключить, Для включения "заворачивания" необходима аппаратная блокировка линии A20 (A20=0) с помощью порта контроллера клавиатуры. Его состоянием можно управлять программно. Смотри также разделы, посвященные опчиям драйвера Himem.sys.
E.0.2. Особенности сегментации памяти в микропроцессоре i8086 (итоги).
1. Сегменты памяти определяются только сегментными регистрами.
2. Начальный адрес сегмента связан с физическим адресом параграфа.
3. Никаких средств правильности использования сегментов нет.
4. Размещение сегментов в памяти достаточно произвольно. Ограничение - только выравнивание на границе параграфа.
5. Сегменты могут частично или полностью перекрываться, или не иметь общих частей.
6. Программа может обращаться к любому сегменту как для считывания, так и для записи данных и команд.
7. Для защиты памяти от несанкционированного доступа других программ требуются специальные "внешние" схемы.
8. Система не делает различий между сегментами данных, кода и стека.
9. Нет никаких препятсятвий для обращения к физически не существующей памяти.
10. При обращении к несуществующей памяти результат непредсказуем (все зависит от разработчика материнской платы и другого аппаратного обеспечения компьютера.)
11. Длина сегмента равна целому числу параграфов.
Дата добавления: 2016-02-20; просмотров: 2210;