Сегментные регистры

Организация и использование памяти микропроцессорами Intel имеет специфику, которая заключается в том, что МП аппаратно поддерживает структурную организацию программы при ее расположении в памяти из нескольких непрерывных частей с определенным назначением, которые называются сегментами (сегментированная организация памяти). В общем случае любая программа состоит из сегмента кода (содержит код программы), сегмента данных (содержит обрабатываемые программой данные), сегмента стека (содержит стек программы) и дополнительного сегмента данных (также может содержать обрабатываемые программой данные). Минимально программа может состоять из одного сегмента (сегмента кода). Важно отметить, что физически сегменты друг от друга ничем не отличаются (это в любом случае ячейки памяти, заполненные нулями и единицами) и их назначение определяет сам программист.

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

Для доступа к сегменту кода служит регистр CS (Code segment register) – сегментный регистр кода, сегменту данных – регистр DS (Data segment register) – сегментный регистр данных, сегменту стека – SS (Stack segment register) – сегментный регистр стека и дополнительному сегменту данных – регистр ES (Extension data segment register) – дополнительный сегментный регистр данных.

В большинстве случаев для доступа к определенной информации в памяти МП сам использует необходимые сегментные регистры. Для выборки из памяти следующей исполняемой команды используется регистр CS. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре DS. Если необходимо использовать дополнительный сегмент данных, то адрес его начала (регистр ES) необходимо указывать в команде явно.

Работа стека будет рассмотрена ниже. Пока можно заметить, что это область памяти, работа с которой основана на следующем принципе: последний записанный в эту область элемент выбирается первым (LIFO – Last In, First Out или FILO – First In, Last Out). При работе со стеком также неявно используется регистр SS.

Запись в сегментные регистры возможна только через промежуточный регистр общего назначения.