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

Регистр, содержащий флаги, дающие дополнительную информацию о результате в процессоре

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

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

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

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

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

Общие флаги

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

ФлагИмяОписание
ЗНулевой флагУказывает, что результат арифметической или логической операции (или, иногда, загрузки) был равен нулю.
СНести флагПозволяет складывать/вычитать числа, превышающие одно слово, перенося двоичную цифру из менее значимого слова в наименее значимый бит более значимого слова по мере необходимости. Он также используется для расширения битовых сдвигов и вращается аналогичным образом на многих процессорах (иногда выполняется с помощью выделенного флага X ).
Серийный номерЗнак флага
Отрицательный флаг
Указывает, что результат математической операции отрицательный. В некоторых процессорах [2] флаги N и S различаются по значению и использованию: один указывает, был ли последний результат отрицательным, тогда как другой указывает, имело ли место вычитание или сложение.
В / О / БФлаг переполненияУказывает, что знаковый результат операции слишком велик для размещения в регистре с использованием представления в виде дополнения до двух .

Другие флаги

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

ФлагИмяОписание
Н / А / DCФлаг полупереноса
Вспомогательный флаг
Перенос цифр
Флаг корректировки десятичных дробей
Указывает, что был произведен перенос бита между полубайтами (обычно между 4-битными половинами байтового операнда) в результате последней арифметической операции. Такой флаг обычно полезен для реализации арифметических операций BCD на двоичном оборудовании.
ПФлаг паритетаУказывает, является ли число установленных битов последнего результата четным или нечетным.
яФлаг прерыванияНа некоторых процессорах этот бит указывает, включены или замаскированы прерывания. [3] Если процессор имеет несколько уровней приоритета прерываний , например PDP-11 , несколько бит могут использоваться для указания приоритета текущего потока, позволяя прерывать его только оборудованием, установленным на более высокий приоритет. На других архитектурах бит может указывать на то, что прерывание в данный момент активно, и что текущий поток является частью обработчика прерываний .
СФлаг супервайзераНа процессорах, которые предоставляют два или более защитных колец , один или несколько битов в регистре состояния указывают кольцо текущего потока (насколько он доверен или должен ли он использовать операционную систему для запросов, которые могут помешать другим потокам). На процессоре только с двумя кольцами один бит может отличать режим Supervisor от режима User.

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

Флаги состояния позволяют инструкции действовать на основе результата предыдущей инструкции. В конвейерных процессорах, таких как суперскалярные и спекулятивные процессоры, это может создавать опасности, которые замедляют обработку или требуют дополнительного оборудования для их обхода. [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 .
Получено с "https://en.wikipedia.org/w/index.php?title=Status_register&oldid=1128428366"