Регістр стану
Регістр стану (англ. 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[ред. | ред. код]
Цей розділ потребує доповнення. (серпень 2013) |
В даній архітектурі роль регістра стану виконує регістр 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 біт).
Мікроконтролери[ред. | ред. код]
Цей розділ потребує доповнення. (серпень 2013) |
Мікроконтролер ATmega103 родини AVR має в своєму складі регістр SREG (англ. Status Register), що зберігає 8 прапорців: переносу, нуля, від'ємного результату, переповнення, знаку, переносу між тетрадами, заборони переривань та біт користувача[3].
Див. також[ред. | ред. код]
Примітки[ред. | ред. код]
- ↑ а б Donald D. Givone, Robert P. Roesser Microprocessors/microcomputers An introduction. — McGraw-Hill Book Company, 1980 (англ.)
- ↑ а б в Sivarama P. Dandamudi Guide to RISC processors for Programmers and Engineers. — Springer Science+Business Media, Inc., 2005. — ISBN 0-387-21017-2. (англ.)
- ↑ Бродин В. Б., Калинин А. В. Системы на микроконтроллерах и БИС программируемой логики. — М.: ЭКОМ, 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.
Це незавершена стаття з інформатики. Ви можете допомогти проєкту, виправивши або дописавши її. |