Сегментация памяти и вычисление адресов — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Сегментация памяти и вычисление адресов

2017-07-01 423
Сегментация памяти и вычисление адресов 0.00 из 5.00 0 оценок
Заказать работу

Пространство памяти емкостью 1 Мбайт представляется как набор сегментов, определяемых программным путем. Сегмент состоит из смежных ячеек памяти и является независимой и отдельно адресуемой единицей памяти емкостью 64 Кбайт. Каждому сегменту программой назначаются начальный (базовый) адрес, являющийся адресом первого байта сегмента в пространстве памяти. Начальные адреса четырех сегментов, выбранных в качестве текущих, записываются в сегментные регистры CS, DS, SS, ES. Для обращения к команде и данным, находящимся в других сегментах, необходимо изменить содержимое сегментных регистров, что позволяет использовать все пространство памяти емкостью 1 Мбайт. Частный случай загрузки всех сегментных регистров нулями приводит к организации памяти характерной для МП580ВМ80, т.е фактически к отказу от сегментации памяти.

В сегментном регистре хранится 16 старших битов 20-разрядного начального адреса сегмента. Четыре младших бита принимаются равными нулю и дописываются справа к содержимому сегментного регистра при вычислении физических адресов ячеек памяти. Поэтому начальные адреса сегментов всегда кратны 16. Поскольку других ограничений на размещение сегментов в памяти нет, сегменты могут быть соседними (смежными), неперекрывающимися, частично или полностью перекрывающимися. Физическая ячейка памяти может принадлежать одному или нескольким сегментам.

Физический адрес сегмента памяти представляет 20-битовое число в диапазоне 00000-FFFFF, которое однозначно определяет положение каждого байта. Логический адрес ячейки памяти состоит из двух 16-битовых беззнаковых значений: начального адреса сегмента, который называют базой или сегментом, и внутрисегментного смещения, определяющего расстояние от начала сегмента до этой ячейки. Для вычисления физического адреса база сегмента сдвигается на 4 бита влево и суммируется со смещением. Перенос из старшего бита, который может возникнуть при суммировании, игнорируется (рисунок 6.1).

 

 
  Рисунок 6.1 ― Схема вычисления физического адреса  

 

Это приводит к так называемой кольцевой организации памяти, при которой за ячейкой FFFFF следует ячейка с нулевым адресом. Аналогичную кольцевую организацию имеет и каждый сегмент.

Команды всегда выбираются из текущего сегмента кода в соответствии с логическим адресом CS:IP. Стековые команды всегда обращаются к текущему сегменту стека по адресу SS:SP. Если при вычислении эффективного адреса EA используется регистр BP, то обращение производится также к стековому сегменту, а ячейки стекового сегмента рассматриваются как ОЗУ с произвольной выборкой. Операнды, как правило, размещаются в текущем сегменте данных, и обращение к ним организуется по адресу DS:EA. Однако программист может заставить МП обратиться к переменной, находящейся в другом текущем сегменте.

По умолчанию предполагается, что цепочка-источник находится в текущем сегменте данных, а ее смещение задается регистром SI. Цепочка - получатель обязательно располагается в текущем дополнительном сегменте, а смещение берется из регистра DI. Команды обработки цепочки автоматически модифицируют содержимое индексных регистров SI и DI по мере продвижения по цепочке в направлении, задаваемом флагом DF. Источники логического адреса для различных типов обращения к памяти приведены в табл. 6.1.

Таблица 6.1 – Источники логического адреса

 

Тип обращения к памяти Сегмент (умолчание) Вариант Смещение
Выборка команд CS нет IP
Стековые операции SS нет SP
Переменная DS CS, SS, ES EA
Цепочка-источник DS CS, SS, ES SI
Цепочка-приемник ES нет DI
как базовый регистр ES CS, SS, DS EA

 

Смена сегментного регистра осуществляется с помощью однобайтового префикса замены сегмента 001SR110, который ставится первым байтом команды. Двухбитовое поле SR содержит код сегментного регистра, используемого для вычисления физического адреса в данной команде: 00 – регистр EA; 01 – CS; 10 – SS; 11 – DS.

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


Поделиться с друзьями:

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.