Сегменты, принцип сегментации.
Числа, устанавливаемые процессором на адресной шине, являются адресами,
то есть номерами ячеек оперативной памяти (ОП). Размер ячейки ОП
составляет 8 разрядов, т.е. 1 байт. Поскольку для адресации
памяти процессор использует 16-разрядные адресные регистры, то это
обеспечивает ему доступ к 65536 (FFFFh) байт или 64К
основной памяти.
Такой блок непосредственно адресуемой памяти
называется сегментом.
Любой адрес формируется из адреса
сегмента (всегда кратен 16, т.е. начинается с границы параграфа)
и адреса ячейки внутри сегмента (этот адрес называется смещением
).
Для адресации большего объема памяти в процессоре 8086
используется специальная процедура пересчета адресов, называемая
вычислением абсолютного (эффективного) адреса.
- Когда процессор выбирает очередную команду на исполнение, в качестве
ее адреса используется содержимое, регистра IP. Этот адрес
называется исполнительным. Поскольку регистр IP
шестнадцатиразрядный, исполнительный адрес тоже содержит 16
двоичных разрядов. Однако адресная шина, соединяющая процессор и
память имеет 20 линий связи.
- Чтобы получить 20-битовый адрес, дополнительные 4
бита адресной информации извлекаются из сегментных регистров.
Сами сегментные регистры имеют размер в 16 разрядов,
а содержащиеся в этих регистрах (CS, DS, SS
или ES) 16-битовые значения называются
базовым адресом сегмента.
Микропроцессор объединяет 16-битовый исполнительный адрес
и 16-битовый базовый адрес следующим образом: он
расширяет содержимое сегментного регистра (базовый адрес) 4
нулевыми битами (в младших разрядах), делая его 20-битовым
(полный адрес сегмента) и прибавляет смещение (исполнительный
адрес). При этом 20-битовый результат является
физическим или абсолютным адресом ячейки памяти.
Регистр |
Базовый адрес |
|
Полный адрес |
сегмента |
xxxx |
xxxx |
xxxx |
xxxx |
0000 |
сегмента |
+ |
Смещение |
xxxx |
xxxx |
xxxx |
xxxx |
Исполнительный адрес |
|
|
xxxx |
xxxx |
xxxx |
xxxx |
xxxx |
Абсолютный адрес |
Существуют три основных типа сегментов:
- сегмент кода – содержит машинные команды.
Адресуется регистром CS;
- сегмент данных – содержит данные, то есть
константы и рабочие области, необходимые программе.
Адресуется регистром DS;
- сегмент стека – содержит адреса возврата в
точку вызова подпрограмм.
Адресуется регистром SS.
При записи команд на языке Ассемблера принято указывать
адреса с помощью следующей конструкции:
<адрес сегмента>:<смещение>
или
<сегментный регистр>:<адресное выражение>