Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Конференция «Технологии управления данными 2018»
СУБД, платформы, инструменты, реальные проекты.
29 ноября 2018 г.

E.0. Сегментная организация памяти в микропроцессорах i8086/88 и в реальном режиме работы микропоцессоров x86.

В микропроцессорах i8086/88 сегментация памяти осуществляется простым способом. Все адресное пространство в 1 Мбайт разбивается на несколько (от 16 до 65536) смежных блоков памяти. Каждый такой блок может иметь размер от 16 байт до 64 Кбайт и выравнивается на шестнадцатибайтной границе. Блок памяти длиной в 16 байт и выравненный на 16-ти байтной границе называется параграфом. Для обращения к любому адресу в памяти необходимо знать его физический адрес, который в микропроцессорах i8086/88 и реальном режиме работы микропроцессоров x86 совпадает с его линейным адресом.

В общем случае для формирования линейного адреса необходимо знать базу (Base, Segment) и смещение (Offset) этого адреса. В микропроцессорах i8086/88 оба компонента линейного адреса являются шестнадцатиричными.

Для микропроцессоров x86 в реальном режиме работы смещение (Offset) является одновременно эффективным адресом. Эффективные адреса формируются в Intel-совместимых микропроцессорах с помощью регистров данных (смотри VOLIII(6), "Системные регистры центрального процессора".) Эффективный адрес формируется следующим образом.: к восьми или шестнадцатиразрядному смещению в программе добавляется 16-ти разрядное содержимое базового регистра и 16-ти разрядное содержимое индексного регистра. (смотри VOLIII(6) "Классификация регистров данных").

Примечания: 1. Разрядность смещения должна соответствовать разрядности регистра, куда пересылаются данные.

2. Обычно в базовом регистре содержится начальный адрес блока извлекаемых данных, а в индексном регистре -- длина извлекаемой записи, умноженная на порядковый номер (от 0 до N-1) записи.

Система команд в микропроцессорах x86 устроена так, что для образования эффективного адреса необходимо обязательное присутствие только одного его компонента. Таким образом любой компонент: база, индекс, смещение -- или даже оба из них могутбыть опущены.

Примечание: Необходимые сочетания индексных, базовых регистров и разрядности смещения не произвольны, а резервируются фирмой Intel в своих разработках. Подробнее о формировании эффективных адресов смотри [В,С. Петрухин,, стр. 103-106 для реального режима, стр. 110-114 для защищенного режима].

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. Длина сегмента равна целому числу параграфов.

Назад | Содержание | Вперед

 

Новости мира IT:

Архив новостей

Последние комментарии:

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...