Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Регистр состояния , регистр флага или код условия регистр ( CCR ) представляет собой набор статуса флага бит для процессора . Примеры таких регистров включают в себя регистр флагов в архитектуре x86 , флаги в слове состояния программы (PSW) регистрации в IBM System / 360 архитектуры через г / Архитектура и регистр состояния прикладной программы (APSR) в -Cortex A ARM архитектуры . [1]

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

Обычно флаги в регистре состояния изменяются в результате арифметических операций и операций с битами. Например, бит Z может быть установлен, если результат операции равен нулю, и сброшен, если он не равен нулю. Другие классы инструкций также могут изменять флаги для индикации состояния. Например, строковая инструкция может сделать это, чтобы указать, была ли инструкция завершена из-за того, что она нашла совпадение / несоответствие, или потому, что она нашла конец строки. Флаги считываются последующей условной инструкцией, так что указанное действие (в зависимости от процессора, переход, вызов, возврат и т. Д.) Происходит только в том случае, если флаги указывают на указанный результат предыдущей инструкции.

Некоторые архитектуры ЦП, такие как MIPS и Alpha , не используют специальный регистр флагов. Другие неявно устанавливают и / или не считывают флаги. Такие машины либо вообще не передают неявную информацию о состоянии между инструкциями, либо передают ее в явно выбранном регистре общего назначения.

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

Общие флаги [ править ]

Это список наиболее распространенных флагов регистров состояния ЦП, реализованных практически во всех современных процессорах.

Другие флаги [ править ]

На некоторых процессорах регистр состояния также содержит такие флаги:

Архитектуры ЦП без арифметических флагов [ править ]

Флаги состояния позволяют инструкции действовать на основе результата предыдущей инструкции. В конвейерных процессорах, таких как суперскалярные и спекулятивные процессоры, это может создавать опасности, которые замедляют обработку или требуют дополнительного оборудования для их обхода. [4]

Некоторые текстовые процессоры с очень длинными командами обходятся без флагов состояния. Одиночная инструкция выполняет тест и указывает, по какому результату этого теста следует предпринять действие, например «Сравнить a с и «Перейти к c, если равно». Результат теста не сохраняется для последующих инструкций.

Другая альтернатива регистру состояния - это инструкции процессора по хранению информации о состоянии в регистре общего назначения, когда программа запрашивает ее. MIPS , AMD 29000 , DEC Alpha и RISC-V являются примерами архитектур, которые предоставляют инструкции сравнения, которые сохраняют результат сравнения в регистре общего назначения в виде одного бита или числового значения 0 или 1. Условные переходы действуют на основе значение в универсальном регистре.

Обычно инструкции сравнения проверяют равенство или знаковую / беззнаковую величину. Для проверки других условий программа использует формулу эквивалентности. Например, MIPS не имеет «бита переноса», но программа, выполняющая сложение нескольких слов, может проверить, не переполнены ли регистры при сложении одного слова, проверяя, меньше ли сумма, чем операнд: [4]

 # = Дуть младший байт регистра АХ общего назначения ЦП + Clow Addu младший байт регистра АХ общего назначения ЦП ,  удар ,  Clow  # множество TMP = 1 , если младший байт регистра АХ общего назначения ЦП <Clow, иначе 0 sltu TMP ,  младший байт регистра АХ общего назначения ЦП ,  Clow Addu Ahigh ,  bhigh ,  Chigh Addu Ahigh ,  Ahigh ,  TMP

В sltuнаборы инструкций tmpк 1 или 0 на основе указанного сравнения двух других операндов. (Здесь регистр общего назначения tmpне используется в качестве регистра состояния для управления условным переходом; скорее, возможное значение 1, указывающее перенос из младшего сложения, добавляется к старшему слову.)

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

См. Также [ править ]

  • Контрольный регистр
  • Флаг процессора (x86)
  • Поле флага

Ссылки [ править ]

  1. ^ "Информационный центр ARM" . infocenter.arm.com . Проверено 18 мая 2019 .
  2. ^ «Руководство по эксплуатации Toshiba 900, глава 3» (PDF) .
  3. ^ "8-битный микроконтроллер Atmel с 4/8/16/32 Кбайт внутрисистемной программируемой флеш-памятью - техническое описание" (PDF) . Технология микрочипов .
  4. ^ a b Маши, Джон (1996-06-04). «Несите биты; ловушка архитектора» . Проверено 5 октября 2013 .