Регістр стану

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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