Регистр статуса - Status register

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

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

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

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

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

Общие флаги

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

Флаг имя Описание
Z Нулевой флаг Указывает, что результат арифметической или логической операции (или, иногда, загрузки) был нулевым.
C Перенести флаг Позволяет добавлять / вычитать числа, превышающие одно слово, путем переноса двоичной цифры из менее значимого слова в наименее значимый бит более значимого слова по мере необходимости. Он также используется для расширения битовых сдвигов и вращения аналогичным образом на многих процессорах (иногда это делается с помощью специального флага X ).
S / N Знак флага
Отрицательный флаг
Указывает, что результат математической операции отрицательный. В некоторых процессорах флаги N и S отличаются друг от друга по разному значению и использованию: один указывает, был ли последний результат отрицательным, а другой указывает, имело ли место вычитание или сложение.
V / O / W Флаг переполнения Указывает, что подписанный результат операции слишком велик, чтобы поместиться в ширину регистра с использованием представления с дополнением до двух .

Другие флаги

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

Флаг имя Описание
H / A / DC Флаг Half-кэрри
Дополнительный флаг
Digit Карри
Десятичная коррекция флаг
Указывает, что перенос битов был произведен между полубайтами (обычно между 4-битными половинами байтового операнда) в результате последней арифметической операции. Такой флаг обычно полезен для реализации арифметических операций BCD на двоичном оборудовании.
п Флаг четности Указывает, является ли количество установленных битов последнего результата четным или нечетным.
я Флаг прерывания На некоторых процессорах этот бит указывает, разрешены или замаскированы прерывания. Если процессор имеет несколько уровней приоритета прерывания , например PDP-11 , несколько битов могут использоваться для обозначения приоритета текущего потока, позволяя прерывать его только аппаратным обеспечением, установленным на более высокий приоритет. В других архитектурах бит может указывать на то, что прерывание в настоящее время активно, и что текущий поток является частью обработчика прерывания .
S Флаг супервайзера На процессорах, которые предоставляют два или более защитных кольца , один или несколько битов в регистре состояния указывают кольцо текущего потока (насколько он надежен или должен ли он использовать операционную систему для запросов, которые могут препятствовать другим потокам). На процессоре только с двумя кольцами один бит может отличить супервизор от режима пользователя.

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

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

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

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

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

        # alow = blow + clow
	addu	alow, blow, clow
        # set 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 инструкций. К счастью, эти два переноса могут быть добавлены друг к другу без риска переполнения, так что ситуация стабилизируется при пяти инструкциях на добавленное слово.

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

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