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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

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

2017-07-01 446
Сегментация памяти и вычисление адресов 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.

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


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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



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

0.006 с.