Введение
Регистр, содержащий флаги, предоставляющие дополнительную информацию о результате выполнения операции в процессоре. Регистр состояния, регистр флагов или регистр кодов состояния (CCR) – это набор битов флагов состояния процессора. Примеры таких регистров включают регистр FLAGS в архитектуре x86, флаги в регистре слова состояния программы (PSW) в архитектурах IBM System/360 и z/Architecture, а также регистр состояния программы приложения (APSR) в архитектуре ARM Cortex-A. Регистр состояния – это аппаратный регистр, содержащий информацию о состоянии процессора. Отдельные биты считываются и/или записываются инструкциями машинного кода, выполняемыми на процессоре, явно или неявно. Регистр состояния позволяет инструкции выполнять действия в зависимости от результата предыдущей инструкции. Обычно флаги в регистре состояния изменяются в результате арифметических операций и операций над битами. Например, бит Z устанавливается, если результат операции равен нулю, и сбрасывается, если результат отличен от нуля. Другие типы инструкций также могут изменять флаги для индикации статуса. Например, строковая инструкция может это делать, чтобы указать, завершилась ли инструкция из-за нахождения совпадения/несовпадения или из-за достижения конца строки. Флаги считываются последующей условной инструкцией, чтобы указанное действие (в зависимости от процессора, переход, вызов, возврат и т.д.) выполнялось только в том случае, если флаги указывают на определенный результат предыдущей инструкции. Некоторые архитектуры процессоров, такие как MIPS и Alpha, не используют выделенный регистр флагов. Другие не устанавливают и/или не считывают флаги неявно. Такие системы либо вообще не передают неявную информацию о состоянии между инструкциями, либо передают её в явно выбранном регистре общего назначения. Регистр состояния часто может содержать и другие поля, такие как более специализированные флаги, биты разрешения прерываний и аналогичная информация. Во время прерывания состояние текущего потока может быть сохранено (и впоследствии восстановлено) путем сохранения текущего значения регистра состояния вместе со счетчиком команд и другими активными регистрами в стек машины или в другую зарезервированную область памяти.
A status register, flag register, or condition code register (CCR) is a collection of status flag bits for a processor. Examples of such registers include FLAGS register in the x86 architecture, flags in the program status word (PSW) register in the IBM System/360 architecture through z/Architecture, and the application program status register (APSR) in the ARM Cortex A architecture. The status register is a hardware register that contains information about the state of the processor. Individual bits are implicitly or explicitly read and/or written by the machine code instructions executing on the processor. The status register lets an instruction take action contingent on the outcome of a previous instruction. Typically, flags in the status register are modified as effects of arithmetic and bit manipulation operations. For example, a Z bit may be set if the result of the operation is zero and cleared if it is nonzero. Other classes of instructions may also modify the flags to indicate status. For example, a string instruction may do so to indicate whether the instruction terminated because it found a match/mismatch or because it found the end of the string. The flags are read by a subsequent conditional instruction so that the specified action (depending on the processor, a jump, call, return, or so on) occurs only if the flags indicate a specified result of the earlier instruction. Some CPU architectures, such as the MIPS and Alpha, do not use a dedicated flag register. Others do not implicitly set and/or read flags. Such machines either do not pass implicit status information between instructions at all, or they pass it in an explicitly selected general purpose register. A status register may often have other fields as well, such as more specialized flags, interrupt enable bits, and similar types of information. During an interrupt, the status of the thread currently executing can be preserved (and later recalled) by storing the current value of the status register along with the program counter and other active registers into the machine stack or some other reserved area of memory.
Общие флаги
Это список наиболее распространенных флагов регистра состояния процессора, реализованных почти во всех современных процессорах. FlagNameDescriptionZ Флаг нуля Указывает, что результат арифметической или логической операции (или, иногда, загрузки) был равен нулю. C Флаг переноса Позволяет складывать/вычитать числа, превышающие размер одного слова, путем переноса двоичного разряда из менее значимого слова в наименее значимый бит более значимого слова при необходимости. Он также используется для расширения битовых сдвигов и вращений аналогичным образом на многих процессорах (иногда это делается с помощью выделенного флага X). S / N Флаг знака / Флаг отрицательности Указывает, что результат математической операции отрицательный. В некоторых процессорах флаги N и S различны по значению и применению: один указывает, был ли последний результат отрицательным, а другой указывает, была ли выполнена операция вычитания или сложения. V / O / W Флаг переполнения Указывает, что знаковый результат операции слишком велик для представления в ширине регистра, используя дополнительный код.