Регістр стану (англ. 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