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

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

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

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

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

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

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

Содержание
  • 1 Общие флаги
  • 2 Другие флаги
  • 3 Архитектуры ЦП без арифметических флагов
  • 4 См. Также
  • 5 Ссылки
Общие флаги

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

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

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

ФлагИмяОписание
H/ A/ DCФлаг полупереноса. Вспомогательный флаг. Перенос цифр. Флаг настройки десятичной дробиУказывает, что перенос битов был произведен между полубайтами (обычно между 4-битными половинами байтовый операнд) в результате последней арифметической операции. Такой флаг обычно полезен для реализации арифметических операций BCD на двоичном оборудовании.
PФлаг четности Указывает, является ли количество установленных битов последнего результата четным или нечетным.
IФлаг прерывания На некоторых процессорах этот бит указывает, разрешены или замаскированы прерывания. Если процессор имеет несколько уровней приоритета прерываний, таких как 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, указывающее перенос из сложения младшего разряда, добавляется к старшему -order word.)

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

См. Также
Ссылки
Последняя правка сделана 2021-06-09 10:13:39
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте