С е г м е н т ы

Сегменты, принцип сегментации.

Числа, устанавливаемые процессором на адресной шине, являются адресами, то есть номерами ячеек оперативной памяти (ОП). Размер ячейки ОП составляет 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.

При записи команд на языке Ассемблера принято указывать адреса с помощью следующей конструкции:

<адрес сегмента>:<смещение>
или
<сегментный регистр>:<адресное выражение>


Программирование на Машинно-Ориентированных Языках.
Преподаватель: Коробов С.А.