Универсальные регистры

О сегментах.

Сегментный регистр хранит стартовый (начальный) адрес памяти, определенный операционной системой для хранения команд программы (CS), переменных и констант (DS) и стека (SS) – для временного хранения результатов обработки, параметров вызываемых из программы процедур и адресов возврата из вызываемых процедур. На приведенном ниже рисунке графически показана связь сегментных регистров и соответствующих им сегментов. Рисунок отражает принципиальную связь между сегментными регистрами и сегментами программы, откуда следует, что программные сегменты не обязательно располагаются в оперативной памяти в порядке, отображенном на рисунке. Не стоит забывать, что в программе могут задаваться и дополнительные сегменты данных (такие, как ES, а в процессорах 80386 и выше еще и FS и GS), но приведенные 3 сегмента программы присутствуют в любой программе.

Сегмент начинается с границы параграфа (адреса, нацело делящегося на 16, с четырьмя двоичными нулями в младших разрядах значения адреса). Ячейки памяти внутри сегмента нумеруются относительно стартового адреса сегмента. Расстояние в байтах от начала сегмента до любой другой ячейки внутри этого сегмента, называется смещением.

Имена сегментных регистров строго зарезервированы, и поэтому при появлении этих имен в программе процессор обращается к своей внутренней памяти.

 
 
Сегмент стека   Сегмент данных     Сегмент кода   Max адрес

Универсальные регистры - student2.ru Универсальные регистры - student2.ru Оперативное

запоминающее

устройство

       
    Универсальные регистры - student2.ru
 
 
Адрес     Адрес   Адрес

Универсальные регистры - student2.ru Универсальные регистры - student2.ru SS

 
  Универсальные регистры - student2.ru

Универсальные регистры - student2.ru DS

 
  Универсальные регистры - student2.ru

Универсальные регистры - student2.ru Универсальные регистры - student2.ru CS

 
  Универсальные регистры - student2.ru

Рисунок 4.3. Связь сегментов и сегментных регистров.

Регистр CSсодержит адрес первой команды программы. Сумма содержимого этого регистра со значением смещения в указателе инструкций – регистре IP – дает адрес команды программы, которая должна быть передана следующей для исполнения.

Регистр DSсодержит адрес первой переменной или константы, объявленной в программе. Команды используют этот регистр для поиска значений операндов, участвующих в операциях обработки. Этот адрес, сложенный со смещением переменной, дает ссылку на определенную ячейку со значениями исходных данных, промежуточных результатов или выходных данных.

Регистр SSпозволяет реализовать в памяти стек, который программа использует для временного хранения адресов и данных. Адрес из этого регистра складывается со смещением, хранимым в указателе стека SP, и суммарное значение указывает на текущее слово в стеке.

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

Описанные выше правила использования стековых регистров процессор применяет автоматически. Как правило, для целей программирования ссылаться на сегментные регистры не нужно.

Универсальные регистры

Наиболее часто программист оперирует регистрами общего назначения (РОН). К ним относятся регистры AX, BX, CX, DX, а в процессорах, начиная с Intel 80386 и выше – EAX, EBX, ECX, EDX. Регистры ЕхХ – 32-разрядные, хХ – 16-разрядные. Каждый из последних в свою очередь состоит из двух 8-битовых регистров xL и xH. Нижеприведенный рисунок иллюстрирует общую структуру РОН на примере регистра АХ.

Универсальные регистры - student2.ru Универсальные регистры - student2.ru AH Универсальные регистры - student2.ru Универсальные регистры - student2.ru AL

Универсальные регистры - student2.ru

AX

 
  Универсальные регистры - student2.ru

EAX

Рисунок 4.4. Общая структура РОН

Каждый из этих регистров может использоваться для временного хранения любых данных, при этом можно работать с каждым регистром целиком, а можно отдельно с каждой его половиной:

- регистры АН, ВН, СН, DH - старшие байты (Hight);

- регистры AL, BL, CL, DL - младшие байты (Low) соответствующих 2-ух байтовых регистров.

Регистры AL, АН образуют соответственно младший и старший байты условного регистра АХ.

Всеми этими регистрами можно пользоваться при программировании, но ряд команд использует их неявным способом. Например:

регистрАХ, аккумулятор, используется при умножении и делении слов, в операциях ввода-вывода и в некоторых операциях над строками;

регистр AL используется при выполнении аналогичных операций над байтами, а также при преобразовании десятичных чисел и выполнении над ними арифметических операций;

регистр АН используется при умножении и делении байтов;

регистрВХ, базовый регистр, часто используется при адресации данных в памяти; регистрСХ, счетчик, используется как счетчик числа повторений цикла и в качестве номера позиции элемента данных при операциях над строками. Регистр CL используется как счетчик при операциях сдвига и циклического сдвига на несколько битов;

регистрDX, регистр данных, используется при умножении и делении слов. Кроме этого используется в операциях ввода-вывода как номер порта.

Наши рекомендации