Регистры общего назначения

Опубликовано в Архитектура процессора Intel

В отношении функционального назначения регистров, образующих внутреннюю регистровую память процессоров, существуют два противоположных подхода, реализуемых в архитектуре ЭВМ:

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

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

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

Использование любого регистра по его прямому назначению сокращает длину объектного кода программы по сравнению с любым другим использованием регистра, так как использование регистра по назначению, как правило, предполагает его неявную адресацию (адрес регистра не задается, но подразумевается).

Регистры общего назначения

Регистры общего назначения

Функциональная специализация РОН-ов отражается в их наименованиях:

АХ — Accumulator (регистр-аккумулятор) — по умолчанию используется для задания одного из операндов команды и для представления результата.

СХ — Counter (счетчик) — по умолчанию используется, во-первых, как счетчик числа повторения циклов в команде «организация цикла» (LOOP); во-вторых, для задания числа сдвигов в командах сдвигов (его младший байт — CL); в-третьих, для задания числа элементов обрабатываемых строк (цепочек) в командах обработки строк (MOVS, CMPS и т.д.).

DX — Data (регистр данных) — по умолчанию используется как расширение аккумулятора со стороны старших разрядов в командах умножения и деления.

BX — Base (базовый регистр) — по умолчанию используется как базовая компонента эффективного адреса операнда, находящегося в памяти. (В терминологии фирмы Intel под эффективным адресом — Effective Address (ЕА) — понимается адрес операнда, формируемый программой (программный адрес).) Для получения физического адреса ячейки памяти, в которой находится операнд, осуществляется преобразование ЕА на основе простейшей модели сегментированной памяти (механизма сегментации).

SP — Stack Pointer (указатель стека) — по умолчанию используется для адресации вершины стека.

Вершина стека указывает на адрес последнего элемента, записанного в стек.

Стек представляет собой сегмент памяти. Стек растет в область младших адресов. Это означает, что при записи (включении в стек), например, по команде PUSH, сначала производится декремент SP (уменьшение) на два, а затем запись в память по новому значению SP как адреса.

При чтении (извлечении) из стека, например, по команде POP, сначала производится чтение слова по адресу из SP, а затем инкремент (увеличение) содержимого SP на два.

Работа со стеком реализуется на уровне слов, но не байт.

BP — Base Pointer (указатель базы) — по умолчанию используется как базовая компонента эффективного адреса операнда в памяти по аналогии с ВХ. Отличие в использовании содержимого регистров ВХ и ВР как базовых компонент ЕА состоит в том, что при использовании ВХ подразумевается обращение к сегменту данных, а при использовании ВР — к сегменту стека (но не через его вершину).

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

SI — Source Index (индекс источника) — по умолчанию используется для задания индексной компоненты ЕА, а также для адресации элементов строки-источника в командах обработки строк.

DI — Distination Index (индекс приемника) — по умолчанию используется аналогично SI для задания индексной компоненты ЕА, а также для адресации элементов строки-приемника в командах обработки строк.

Группу из восьми РОН принято делить на две части:

  • группа HL (High — Low);
  • группа PI (Pointer — Index).

Группу HL иногда называют регистрами данных, подразумевая ее преимущественное использование для операндов и результатов команд.

Регистры группы HL могут использоваться в командах в двухбайтном (полном) и в байтном (неполном) варианте.

Отдельные байты этих регистров используют то же наименование, что и полный регистр (А, С, D, В) с добавлением приставки L — младший, Н — старший, для соответствующих байтов регистра.

Группа PI или группа указателей-индексов может использоваться только в двухбайтном варианте.

Для адресации РОН, как полных, так и не полных, в машинной команде используются три двоичных разряда