Лекции по Вычислительным машинам, системам и сетям   

2. Микропроцессорный комплект К1810

2.5. Сегментация памяти

Как уже отмечалось выше, МП 8086 имеет 20 адресных линий, т.е. может адресовать ОП объемом 1 Мбайт. Эта память логическим образом разбивается на сегменты, объемом 64 Кбайт каждый, которые могут располагаться практически в любом месте памяти. Одновременно МП может работать с четырьмя такими сегментами. Они называются:

- сегмент кода, в котором располагается программа, выполняемая МП;

- сегмент стека, в котором организуется стек;

- сегмент данных, в котором располагаются данные;

- дополнительный сегмент, обычно используемый как дополнительный сегмент данных.

Каждому из этих сегментов ставится в соответствие находящийся внутри МП 16-разрядный сегментный регистр. Сегментный регистр cs соответствует сегменту кода, ss – сегменту стека, ds – сегменту данных и es – дополнительному сегменту.

Содержимое сегментного регистра задает начальный (базовый) адрес соответствующего сегмента в ОП. Однако сегментный регистр 16 разрядный, а адрес ОП должен быть 20-разрядным. Чтобы из шестнадцати разрядов получить двадцать, содержимое сегментного регистра при формировании адреса ОП сдвигают на 4 разряда влево (умножают на 16). Например, пусть cs = 2231h, тогда начальный адрес сегмента кода равен 22310h. Можно сделать вывод, что начальный адрес любого сегмента всегда кратен шестнадцати. Это единственное ограничение на расположение сегментов в памяти. Других ограничений не существует, то есть сегменты могут быть полностью независимы друг от друга, а могут частично и даже полностью перекрываться.

При выполнении команды, если в ней требуется обращение к памяти, МП формирует по адресному коду, заданному в команде, так называемый эффективный адрес (Аэф). Например, пусть

ds = 2200h, bx = 1000h, si = 0770h

и выполняется команда: mov ax,[bx+si+2], тогда

Аэф = (bx)+(si)+2 = 1000h+0770h+2 = 1772h.

Сформированный Аэф рассматривается как внутрисегментное смещение, поэтому далее МП формирует физический адрес (Аф) по следующей формуле:

Аф = (сегментный регистр)×16+Аэф.

Аф и является адресом ячейки ОП, к которой обращается МП. Для нашего примера (по умолчанию здесь в качестве сегментного регистра берется сегментный регистр ds):

Аф = (ds)×16+Аэф = 22000h+1772h = 23772h.

В процессе формирования Аэф возможно возникновение переноса из старшего разряда. При этом данный перенос попросту отбрасывается. Таким образом, после Аэф = ffffh идет Аэф = 0000h. Иначе говоря, достигнув конца сегмента, автоматически переходим на его начало. Это кольцевая организация сегмента. Существует только один способ выйти за пределы текущего сегмента – сменить содержимое соответствующего сегментного регистра.

В процессе формирования Аф возможно возникновение переноса из старшего разряда. Как и в предыдущем случае, этот перенос попросту отбрасывается, Получается кольцевая организация памяти. Иначе говоря, никаким способом невозможно сформировать адрес за пределами 1 Мбайта.



*****
Новосибирск © 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.