Введение

Регистр, содержащий флаги, предоставляющие дополнительную информацию о результате выполнения операции в процессоре. Регистр состояния, регистр флагов или регистр кодов состояния (CCR) – это набор битов флагов состояния процессора. Примеры таких регистров включают регистр FLAGS в архитектуре x86, флаги в регистре слова состояния программы (PSW) в архитектурах IBM System/360 и z/Architecture, а также регистр состояния программы приложения (APSR) в архитектуре ARM Cortex-A. Регистр состояния – это аппаратный регистр, содержащий информацию о состоянии процессора. Отдельные биты считываются и/или записываются инструкциями машинного кода, выполняемыми на процессоре, явно или неявно. Регистр состояния позволяет инструкции выполнять действия в зависимости от результата предыдущей инструкции. Обычно флаги в регистре состояния изменяются в результате арифметических операций и операций над битами. Например, бит Z устанавливается, если результат операции равен нулю, и сбрасывается, если результат отличен от нуля. Другие типы инструкций также могут изменять флаги для индикации статуса. Например, строковая инструкция может это делать, чтобы указать, завершилась ли инструкция из-за нахождения совпадения/несовпадения или из-за достижения конца строки. Флаги считываются последующей условной инструкцией, чтобы указанное действие (в зависимости от процессора, переход, вызов, возврат и т.д.) выполнялось только в том случае, если флаги указывают на определенный результат предыдущей инструкции. Некоторые архитектуры процессоров, такие как MIPS и Alpha, не используют выделенный регистр флагов. Другие не устанавливают и/или не считывают флаги неявно. Такие системы либо вообще не передают неявную информацию о состоянии между инструкциями, либо передают её в явно выбранном регистре общего назначения. Регистр состояния часто может содержать и другие поля, такие как более специализированные флаги, биты разрешения прерываний и аналогичная информация. Во время прерывания состояние текущего потока может быть сохранено (и впоследствии восстановлено) путем сохранения текущего значения регистра состояния вместе со счетчиком команд и другими активными регистрами в стек машины или в другую зарезервированную область памяти.

Общие флаги

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