Регистры процессора

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

Перечислим основные регистры и кратко определим их назначение.

Сегментные регистры (CS, DS, SS, ES).

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

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

Регистр сегмента стека (SS) содержит начальный адрес сегмента стека.

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

Регистры общего назначения (AX, BX, CX, DX). Особенность этих регистров состоит в том, что возможна адресация их как одного целого слова, так и однобайтовой части. Левый байт является старшей частью (High), а правый - младшей частью (Low) соответствующего регистра. Например, двухбайтовый регистр CX состоит из двух однобайтовых CH и CL, и ссылки на регистр возможны по любому из этих трех имен.

Разберем назначение каждого из регистров.

Регистр AX. Он является основным сумматором и применяется для всех операций ввода-вывода, некоторых операций над строками и некоторых арифметических операций. Например, команды умножения, деления и сдвига предполагают использование регистра AX. Некоторые команды генерируют более эффективный код, если они имеют ссылки на регистр AX.

Регистр BX. Он является базовым регистром. Это единственный регистр общего назначения, который может использоваться в качестве "индекса" для расширенной адресации. Также он используется при организации вычислений.

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

Регистр DX. Он является регистром данных и применяется для некоторых операций ввода-вывода и тех операций умножения и деления над большими числами, которые используют регистровую пару DX:AX.

Регистровые указатели (SP, BP). Они обеспечивают системе доступ к данным в сегменте стека. Реже используются в арифметических операциях.

Регистр SP. Указатель стека обеспечивает использование стека в памяти, позволяет временно хранить адреса и иногда данные. Этот регистр связан с регистром SS для адресации стека.

Регистр BP. Указатель базы облегчает доступ к параметрам (данным и адресам, переданным через стек).

Индексные регистры (SI, DI). Оба индексных регистра могут применяться для расширенной адресации и для использования в арифметических операциях.

Регистр SI. Этот регистр является индексом источника данных и применяется для некоторых операций над строками. В этом случае он адресует память в паре с регистром DS.

Регистр DI. Этот регистр является индексом назначения и применяется также для строковых операций. В данном случае он используется совместно с регистром ES.

Регистр командного указателя (IP). Он содержит смещение на команду, которая должна быть выполнена. Обычно этот регистр в программе не применяется, но он может изменять свое значение при использовании отладчика в процессе тестирования программы.

Флаговый регистр (иногда мы будем обозначать его через FLAGS). Девять из шестнадцати бит флагового регистра являются активными и определяют текущее состояние машины и результаты выполнения команд: