stringtranslate.com

Регистр статуса

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

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

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

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

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

Общие флаги

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

Другие флаги

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

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

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

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

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

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

 # alow = blow + clow addu alow , blow , clow # установить tmp = 1, если alow < clow, иначе 0 sltu tmp , alow , clow addu ahigh , bhigh , chigh addu ahigh , ahigh , tmp         

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

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

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

Ссылки

  1. ^ "Информационный центр ARM". infocenter.arm.com . Получено 2019-05-18 .
  2. ^ "Toshiba 900 Operation Manual, chap. 3" (PDF) . Архивировано из оригинала (PDF) 2006-01-15.
  3. ^ "8-битный микроконтроллер Atmel с 4/8/16/32 Кбайт внутрисистемной программируемой флэш-памятью - Техническое описание" (PDF) . Microchip Technology .
  4. ^ ab Mashey, John (1996-06-04). "Carry bits; The Architect's Trap" . Получено 2013-10-05 .