Регистр статуса - Status register
А регистр статуса, регистр флагов, или же регистр кода состояния (CCR) представляет собой набор статусов флаг биты для процессор. Примеры таких регистров включают Регистр ФЛАГОВ в архитектура x86, флаги в слово состояния программы (PSW) зарегистрируйтесь в Архитектура IBM System / 360 через z / Архитектура, и регистр состояния прикладной программы (APSR) в ARM Cortex-A архитектура.[1]
Регистр статуса - это регистр оборудования который содержит информацию о состоянии процессор. Отдельные биты неявно или явно считываются и / или записываются Машинный код инструкции, выполняемые на процессоре. Регистр состояния позволяет инструкции выполнять действия в зависимости от результата предыдущей инструкции.
Обычно флаги в регистре состояния изменяются в результате арифметических операций и операций с битами. Например, бит Z может быть установлен, если результат операции равен нулю, и сброшен, если он не равен нулю. Другие классы инструкций также могут изменять флаги для индикации состояния. Например, строковая инструкция может сделать это, чтобы указать, была ли инструкция завершена из-за того, что она обнаружила совпадение / несоответствие, или потому, что она нашла конец строки. Флаги считываются последующей условной инструкцией, так что указанное действие (в зависимости от процессора, переход, вызов, возврат и т. Д.) Происходит только в том случае, если флаги указывают на указанный результат предыдущей инструкции.
Некоторые архитектуры ЦП, такие как MIPS и Альфа, не используйте специальный регистр флагов. Другие неявно устанавливают и / или не считывают флаги. Такие машины либо не проходят скрытый информация о состоянии между инструкциями вообще, или они передают ее в явно выбранный регистр общего назначения.
Регистр статуса часто может иметь и другие поля, такие как более специализированные флаги, прерывать разрешающие биты и подобные типы информации. Во время прерывания состояние потока, выполняющегося в данный момент, может быть сохранено (и позже вызвано) путем сохранения текущего значения регистра состояния вместе с счетчик команд и другие активные регистры в машинный стек или какая-то другая зарезервированная область памяти.
Общие флаги
Это список наиболее распространенных флагов регистров состояния ЦП, реализованных практически во всех современных процессорах.
Флаг | Имя | Описание |
---|---|---|
Z | Нулевой флаг | Указывает, что результат арифметической или логической операции (или, иногда, загрузки) был нулевым. |
C | Перенести флаг | Позволяет добавлять / вычитать числа, превышающие одно слово, путем переноса двоичной цифры из менее значимого слова в младший бит при необходимости более значимого слова. Он также используется для расширения битовые сдвиги и вращается аналогичным образом на многих процессорах (иногда через специальный Икс флаг). |
S / N | Подписать флаг Отрицательный флаг | Указывает, что результат математической операции отрицательный. В некоторых процессорах[2] флаги N и S различаются по своему значению и использованию: один указывает, был ли последний результат отрицательным, а другой указывает, имело ли место вычитание или сложение. |
V / О / W | Флаг переполнения | Указывает, что подписанный результат операции слишком велик, чтобы поместиться в ширину регистра, используя два дополнения представление. |
Другие флаги
На некоторых процессорах регистр состояния также содержит такие флаги, как эти:
Флаг | Имя | Описание |
---|---|---|
ЧАС / А / ОКРУГ КОЛУМБИЯ | Флаг полуперти Вспомогательный флаг Digit Carry Флаг настройки десятичной дроби | Указывает, что между грызет (обычно между 4-битными половинами байтового операнда) в результате последней арифметической операции. Такой флаг обычно полезен для реализации BCD арифметические операции на двоичном оборудовании. |
п | Флаг четности | Указывает, является ли количество установленных битов последнего результата четным или нечетным. |
я | Флаг прерывания | На некоторых процессорах этот бит указывает, разрешены или замаскированы прерывания.[3] Если у процессора несколько прерывать уровни приоритета, такие как PDP-11, несколько битов могут использоваться для указания приоритета текущего потока, позволяя прерывать его только аппаратным обеспечением с более высоким приоритетом. На других архитектурах бит может указывать на то, что прерывание в настоящее время активно, и что текущий поток является частью обработчик прерывания. |
S | Флаг супервайзера | На процессорах с двумя или более защитные кольца, один или несколько битов в регистре состояния указывают на кольцо текущего потока (насколько он доверенный или должен ли он использовать операционную систему для запросов, которые могут препятствовать другим потокам). На процессоре только с двумя кольцами один бит может отличить супервизор от режима пользователя. |
Архитектуры ЦП без арифметических флагов
Флаги состояния позволяют инструкции действовать на основе результата предыдущей инструкции. В конвейерный процессоры, такие как суперскалярный и спекулятивный процессоров, это может создать опасности это медленная обработка или требуется дополнительное оборудование для их решения.[4]
Немного очень длинное командное слово процессоры обходятся без флагов состояния. Одна инструкция выполняет тест и указывает результат этого теста, который нужно предпринять, например Сравнить. а с б и перейти к c если равно. Результат теста не сохраняется для последующих инструкций.
Другая альтернатива регистру состояния - это инструкции процессора по хранению информации о состоянии в регистре общего назначения, когда программа запрашивает ее. MIPS, 29000 драм, DEC Alpha, и RISC-V являются примерами архитектур, которые предоставляют инструкции сравнения, которые сохраняют результат сравнения в регистре общего назначения в виде одного бита или числового значения 0 или 1. Условные переходы действуют на основе значения в регистре общего назначения.
Обычно инструкции сравнения проверяют равенство или величину со знаком / без знака. Для проверки других условий программа использует формулу эквивалентности. Например, MIPS не имеет «бита переноса», но программа, выполняющая сложение нескольких слов, может проверить, не переполнены ли регистры при сложении одного слова, проверяя, меньше ли сумма, чем операнд:[4]
# алоу = удар + клоуна адду позволить, дуть, шут # установить tmp = 1, если alow слту tmp, позволить, шут адду высота, bhigh, вздох адду высота, высота, tmp
В слту
наборы инструкций tmp
в 1 или 0 на основе указанного сравнения двух других операндов. (Здесь регистр общего назначения tmp
не используется в качестве регистра состояния для управления условным переходом; скорее возможное значение 1, указывающее перенос из младшего сложения, добавляется к старшему слову.)
Эта схема становится менее удобной при добавлении трех и более слов, поскольку есть два добавления при вычислении б + с + tmp
, любой из которых может генерировать перенос, который должен быть обнаружен двумя слту
инструкции. К счастью, эти два переноса могут быть добавлены друг к другу без риска переполнения, поэтому ситуация стабилизируется на уровне пяти инструкций на добавленное слово.
Смотрите также
Рекомендации
- ^ «Информационный центр АРМ». infocenter.arm.com. Получено 2019-05-18.
- ^ «Руководство по эксплуатации Toshiba 900, глава 3» (PDF).
- ^ "8-битный микроконтроллер Atmel с 4/8/16/32 Кбайт внутрисистемной программируемой флеш-памятью - техническое описание" (PDF). Технология микрочипов.
- ^ а б Маши, Джон (1996-06-04). «Несите биты; ловушка архитектора». Получено 2013-10-05.