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

Регистр – определенный участок памяти внутри самого процессора от 8 до 64 бит длинной, который используется для хранения информации, обрабатываемой процессором. Некоторые регистры строго специализированы на хранении определенного рода информации.

По типу приема и выдачи информации различают:

  • сдвиговые регистры (последовательный прием и выдача)
  • параллельные (параллельный прием и выдача)

По назначению различают:

  • Аккумуляторы – хранение промежуточных результатов арифметических и логических операций, инструкций ввода-вывода
  • Флаговые – хранение признаков результатов арифметических и логических операций
  • Общего назначения – хранение операндов арифметических и логических выражений, индексы, адреса
  • Индексные – индексы исходящих и целевых элементов массива
  • Указательные – указатели на специальные области памяти, указатели текущей операции, указатели базы, указатели стека
  • Сегментные – адреса и селекторы сегментов памяти
  • Управляющие – информация управляющая состоянием процессора, адреса системных таблиц.



Регистры общего назначения:
ЕАХ (Accumulator) – хранение промежуточных данных
EBX (Base) – хранение базового адреса
ECX (Counter) – регистр-счетчик применяется в командах, производящих некоторые повторяющееся действия, его использование за частую не явно – скрыто в алгоритме работы команды.
EDX (Data) – хранение промежуточных данных
Данные регистры являются 32-разрядными и делятся на две части по 16 бит, старшая часть – не доступна, а младшая тоже делится на две части по 8 бит. Выглядит это следующим образом:






Регистры – указатели:
ESI и EDI – индексы источника и приемника, используются при обработке длинных полей
EBP и ESP – указатели базы и вершины, используются при работе со стеком.
Эти регистры также 32-разрядные и имеют младшие 16-ти разрядные части SI, DI, BP, SP соответственно.


    Сегментные регистры:
    Структура программы разделена на блоки – сегменты, выделяют следующие типы сегментов:

  • Сегмент кода содержит команды программы, адрес сегмента кода с которым в настоящий момент работает программа располагается в сегментном регистре сs.
  • Сегмент данных содержит данные, которыми оперирует программа. Программа одновременно может работать с несколькими сегментами данных. Адрес основного сегмента данных располагается в регистре ds, а дополнительных — в es, gs, fs.
  • Сегмент стека – специальная область памяти, ее адрес располагаться в регистре ss.

Сегментные регистры являются 16-разрядными.



Управляющие регистры:
EIP – Extended Instruction Pointer register (32-разрядный, младшая часть IP – 16-разрядная)
Содержит смещение следующей подлежащей выполнению команды относительно начала сегмента кода. После выполнения команды меняется автоматически. Полный адрес команды формирует пара регистров CS:IP.



Регистры флагов:
RFLAGS — 64-разрядный, EFLAGS(32), FLAGS(16)

Биты этих регистров называются флагами. Различают флаги состояния, управляющие, системные и зарезервированные флаги.

Флаг переноса CF (CarryFlag) идентифицирует перенос или заем при выполнении арифметических операций, а также служит индикатором ошибки при обращении к системным функциям.
Флаг паритета PF (ParityFlag) устанавливается в 1, если младшие 8 бит результата операции содержат четное число двоичных единиц.
Флаг вспомогательного переноса AF (AuxiliaryFlag) используется в операциях над упакованными двоично-десятичными числами. Он идентифицирует перенос или заем из старшей тетрады (бита 4).
Флаг нуля ZF (ZeroFlag) устанавливается в 1, если результат операции равен нулю.
Флаг знака SF (SignFlag) показывает знак результата операции, устанавливаясь в 1 при отрицательном результате.
Флаг переполнения OF (OverflowFlag) фиксирует переполнение, т.е. выход результата операции за пределы допустимого для данного процессора диапазона значений.
Флаги состояния автоматически устанавливаются процессором после выполнения каждой команды.
Управляющий флаг трассировки TF (TraceFlag) используется в отладчиках для осуществления пошагового выполнения программы. Если TF = 1, то после выполнения каждой команды процессор реализует процедуру прерывания 1 (через вектор прерывания с номером 1).
Управляющий флаг разрешения прерываний IF (InterruptFlag) разрешает (если равен 1) или запрещает (если равен 0) процессору реагировать на прерывания от внешних устройств.
Управляющий флаг направления DF (DirectionFlag) используется особой группой команд, предназначенных для обработки строк. Если DF = 0, строка обрабатывается в прямом направлении, от меньших адресов к большим; если DF = 1, обработка строки идет в обратном направлении.

17.07.2015