Адресация памяти в процессоре 8086

Числа, устанавливаемые процессором на адресной шине, являются адресами, т.е. номерами ячеек оперативной памяти, из которых необходимо считывать очередную команду или данные. Размер ячейки оперативной памяти составляет 8 разрядов, т.е. 1 байт. Поскольку процессор использует 16-разрядные адресные регистры, то это обеспечивает ему доступ к 65536 (FFFFh) байт или 64К (1К=1024 байт) основной памяти. Такой блок непосредственно адресуемой Памяти называется сегментом. Любой адрес формируется из адреса сегмента (всегда кратен 16) и адреса ячейки внутри сегмента (этот адрес называют смещением). На компьютерах, оснащенных процессором 8086, оперативная память обычно имеет размер, равный 640К. Для того чтобы работать с памятью такого размера, процессор осуществляет пересчет адресов с помощью процедуры, называемой вычислением эффективного адреса (рис.2.3).

Физический 20-разрядный адрес вычисляется сложением сдвинутого влево на 4 разряда 16-разрядного адресасегмента оперативной памяти со значением 16-разрядногосмещения относительно начала этого сегмента. Используя 20-разрядные адреса, можно адресовать 1М оперативной памяти ( 1М=1024К= 1048576 байт). В программе на ассемблере полный адрес записывается в виде

ssss:oooo,

 

где SSSS – значение адреса сегмента;

 

 

Рис.2.3. Вычисление эффективного адреса.

 

 

0000 – значение смещения в этом сегменте. Например, физический адрес

можно записать в виде

ooo1:oooo

или

0000:0010.

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

В качестве примера можно Привести физические адреса 00010, 00015 и 00025, представленные в виде двух шестнадцатеричных слов :

Первый адрес Второй адрес Третий адрес

0000:0010 0000:0015 0000:0025

или или или

0001:0000 0001:0005

 

0001:0015

или 0002:0005