Регістр стану (англ. Program State Word — PSW, англ. Flag Register — RF, англ. Condition Code Register — CCR) — це частина процесора, що зберігає важливу інформацію про стан обчислювальної системи, наприклад, біти-прапорці, які характеризують результати виконання арифметичних чи логічних операцій та порівнянь[1]. Залежно від архітектурних особливостей, вміст регістра стану може бути частиною так званого контексту, що записується в стек при перериванні, або це покладено на плечі програміста.

Часто система команд передбачає спеціальні інструкції для читання та запису бітів регістра стану, оскільки вони застосовуються зі специфічною метою: для зміни природного порядку слідування команд та управління процесором.

Призначення прапорців ред.

Прапорці необхідні для визначення шляху виконання та використовуються командами переходів. Наприклад, якщо певна операція дала нульовий результат, виконується одна група інструкцій, інакше — інша[1]. В наведеному нижче прикладі перехід здійснюється за умови активності ознаки нульового результату.

MOV AX, 15
MOV BX, 0Fh
CMP AX, BX
JZ label
; if not zero
label:
; if zero

Іншим випадком використання прапорців є управління режимами роботи процесора. Спеціалізовані біти можуть дозволяти чи забороняти переривання, активувати певний режим або керувати процесами.

Найчастіше вживані прапорці ред.

В таблиці нижче наведено найбільш вживані ознаки процесорів.

Мнемоніка Назва Опис
Z Прапорець нуля (англ. Zero flag) Встановлюється, якщо результат арифметичної чи логічної операції рівний нулю.
C Прапор переносу (англ. Carry flag) Використовується для додавання/віднімання чисел, більших за розрядну сітку мікропроцесора. Інколи застосовується для збереження витісненого біту при логічних, арифметичних та циклічних зсувах.
S Прапорець знаку (англ. Sign flag) Дублює старший біт машинного слова, що зазвичай використовується як знак.
N Прапорець негативного результату (англ. Negative flag) Встановлюється, якщо результат арифметичної операції від'ємний.
O Прапорець переповнення (англ. Overflow flag) Використовується для позначення ситуації, коли двійкове число занадто велике для збереження в регістрі результату.

Інші прапорці ред.

Окрім вищезазначених, використовуються наступні прапорці:

Мнемоніка Назва Опис
P Прапорець парності (англ. Parity flag) Встановлюється, якщо кількість одиниць в результаті останньої операції була парною.
I Прапорець переривання (англ. Interrupt flag) Використовується для заборони/дозволу переривань.
S Прапорець супервізора (англ. Supervisor flag) Означає, що процесор знаходиться в режимі супервізора, і, на відміну від режиму простого користувача, відкрито доступ до спеціальної функціональності, необхідної для операційної системи.
A Прапорець часткового переносу (англ. Auxiliary carry flag) Встановлюється, якщо в результаті останньої арифметичної операції з'явився перенос між тетрадами (між 4 та 5 бітом в байті). Найчастіше використовується для реалізації операції над числами в форматі BCD.
F0 та F1 Прапорці користувача Зберігають певні ознаки, доступ забезпечується спеціальними командами.

Регістр стану в різних процесорних архітектурах ред.

Архітектура x86 ред.

В даній архітектурі роль регістра стану виконує регістр EFLAGS.

Мікропроцесори RISC ред.

Процесори архітектури SPARC мають можливість працювати як з 32-х, так і з 64-х розрядними операндами. Ця архітектура особливість була відображена в регістрі стану (англ. Condition Code Register), що складається з двох частин — xcc (англ. Extended Condition Code — для 64-х розрядних чисел) та icc (для 32-х розрядних)[2]. Якщо ж розглянути чотирибітні половинки цього регістра, то можна помітити, що вони ідентичні і складаються з прапорців переносу, переповнення, нуля та від'ємного результату.

Проте, наприклад, процесори PowerPC мають свої архітектурні особливості. Його 32-х розрядний регістр стану CR (англ. Condition Register) поділяється на 8 чотирибітних груп — CR0..CR7[2]. Кожна з них має в своєму складі біти, що визначають негативний, позитивний, нульовий результат та прапорець переносу. Іншою особливістю даної архітектури є наявність спеціальних бітів (в CR1), що визначають ознаки результату з плаваючою комою[джерело?].

В архітектурі процесорів ARM існує 6 регістрів стану, що мають 32 біти, проте лише один — CPSR (англ. Current Program Status Register) доступний програмісту в усіх режимах[2]. Він складається з прапорців негативного результату, переповнення, нуля, переносу та заборони переривань, а також зберігає номер режиму, в якому знаходиться процесор (для цього відводиться 5 біт).

Мікроконтролери ред.

Мікроконтролер ATmega103 родини AVR має в своєму складі регістр SREG (англ. Status Register), що зберігає 8 прапорців: переносу, нуля, від'ємного результату, переповнення, знаку, переносу між тетрадами, заборони переривань та біт користувача[3].

Див. також ред.

Примітки ред.

  1. а б Donald D. Givone, Robert P. Roesser Microprocessors/microcomputers An introduction. — McGraw-Hill Book Company, 1980 (англ.)
  2. а б в Sivarama P. Dandamudi Guide to RISC processors for Programmers and Engineers. — Springer Science+Business Media, Inc., 2005. — ISBN 0-387-21017-2. (англ.)
  3. Бродин В. Б., Калинин А. В. Системы на микроконтроллерах и БИС программируемой логики. — М.: ЭКОМ, 2002. — 400 с. — ISBN 5-7163-0089-8. (рос.)

Література ред.

  • Rafiquzzaman M. Microprocessors and microcomputer development systems. Designing microprocessor-based systems. — Harper & Row, Publishers, Inc., 1984. — ISBN 0-06-045312-5. (англ.)
  • Жабін В. І., Жуков В. А., Ткаченко В. В., Клименко І. А. Мікропроцесорні системи: Навчальний посібник. — К.: СПД Гуральник О. Ю., 2009. — 492 с. — ISBN 978-966-2340-00-6.