stringtranslate.com

Регистр состояния

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

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

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

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

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

Общие флаги

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

Другие флаги

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

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

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

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

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

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

 # alow = Blow + Clow addu Alow , Blow , Clow # Установить tmp = 1 if alow < Clow, else 0 sltu tmp , alow , clow addu ahigh , bhigh , chigh addu ahigh , ahigh , tmp         

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

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

Смотрите также

Рекомендации

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