
- •Завдання на курсовий проект.
- •1.Вступ
- •2.Алгор́итм
- •2.1Основні алгоритми функціонування
- •Розглянемо приклад з математики:
- •3.Внутрішня організація
- •4.Формати даних, команд та способи адресації
- •5.Регістри процесора
- •7.Висновок
- •7. Література
- •3. Рэндал э. Брайант, Дэвид о'Халларон. – «Компьютерные системы: архитектура и программирование» издательство «бхв-Петербург»
5.Регістри процесора
Процесор містить дванадцять 16-розрядних регістрів, що програмно-адресуються, які прийнято об'єднувати в три групи : регістри даних, регістри-покажчики і сегментні регістри. Крім того, до складу процесора входять лічильник команд і регістр прапорів, а за функціональним призначенням регістри процесора поділяються на такі:
Регістри даних — використовуються для збереження цілочисельних даних (див. нижче регістри плаваючої коми). В деяких архітектурах, відомих як акумуляторні, такий регістр лише один.
Адресні регістри — зберігають адреси (номери комірок) в пам'яті та використовуються в операціях з пам'яттю. Такі регістри іноді називаються індексними або базовими.
Регістри загального призначення — можуть зберігати і дані, і адреси
Регістри плаваючої коми — призначаються для зберігання даних для обчислень з плаваючою комою
Регістри констант — зберігають константи (наприклад в RISC-архітектурах регістр з порядковим номером нуль зазвичай зберігає константу нуля).
Векторні регістри — зберігають векторні дані та забезпечують векторні обчислення (наприклад, в мультимедійних розширеннях архітектури x86).
Регістри спеціального призначення — зберігають внутрішню інформацію, необхідну для функціонування процесора (лічильник команд, вказівник стеку, регістр стану процесора та ін.).
Рисунок 5.1 Регістри
У групу регістрів даних включаються регістри AX, BX, CX і DX. Програміст може використати їх на власний розсуд для тимчасового зберігання будь-яких об'єктів(даних або адрес) і виконання над ними необхідних операцій. При цьому регістри допускають незалежне звернення до старших(AH, BH, CH і DH) і молодших(AL, BL, CL і DL) половин. Так команда mov, BL, AH пересилає старший байт регістра AX в молодший байт регістра BX, не зачіпаючи при цьому других байтів цих регістрів. Ще раз відмітимо, що спочатку вказується операнд-приймач, а після коми - операнд-джерело, тобто команда виконується як би справа наліво. У багатьох випадках регістри загального призначення цілком еквівалентні, проте прийнятніше в першу чергу використати AX, оскільки багато команд займають в пам'яті менше місця і виконуються швидше, якщо їх операндом є регістр AX(чи його половини AH або AL).
Індексні регістри SI і DI так само, як і регістри даних, можуть використовуватися довільним чином. Проте їх основне призначення - зберігати індекси(зміщення) відносно деякої бази(тобто начала масиву) при вибірці операндів з пам'яті. Адреса бази при цьому зазвичай знаходиться в одному з базових регістрів(BX або BP). Приклади такого роду будуть наведені нижче.
Регістр
BP служить покажчиком бази при роботі з
даними в стекових структурах, про що
буде мова попереду, але може використовуватися
і довільним чином у більшості арифметичних
і логічних операцій або просто для
тимчасового зберігання яких-небудь
даних.
Останній з регістрів-покажчиків, покажчик стека SP, стоїть осібно від інших в тому відношенні, що используеся виключно як покажчик вершини стека - спеціальної структури, яка буде розглянута пізніше.
Регістри SI, DI, BP і SP, на відміну від регістрів даних, не допускають побайтову адресацію.
Чотири сегментні регістри CS, DS, ES і SS зберігають початкові адреси сегментів програми і, тим самим, забезпечують можливість звернення до цих сегментів.
Регістр CS забезпечує адресацію до сегменту, в якому знаходиться код команд програми, регістри DS і ES, - до сегментів даних(таким чином, у будь-якій точці програма може мати доступ до двох сегментів даних, основному і додатковому), а регістр SS - до сегменту стека. Сегментні регістри, природно, не можуть виступати регістрами загального призначення.
Покажчик команд IP " стежить" за ходом виконання програми, вказуючи в кожен момент відносну адресу команди, що йде за виконуваною. Регістр IP програмно недоступний(IP - це просто його скорочена назва, а не мнемонічне позначення, використовуване в мові програмування); нарощування адреси в нім виконує мікропроцесор, враховуючи при цьому довжину поточної команди.
Регістр прапорів, еквівалентний регістру стану процесора інших обчислювальних систем, містить інформацію про поточний стан процесора. Він включає 6 прапорів стану і 3 біта управління станом процесора, які, втім, теж зазвичай називаються прапорами.
Прапор
перенесення CF(Carry Flag) відображає
перенесення або позику при виконанні
арифметичних операцій, а також служить
індикатором помилки при зверненні до
системних функцій.
Прапор паритету PF(Parity Flag) встановлюється в 1, якщо молодші 8 біт результату операції містять парне число двійкових одиниць.
Прапор допоміжного перенесення AF(Auxiliary Flag) використовується в операціях над упакованими двійково-десятковими числами. Він відображає перенесення або позику із старшої тетради(біта 4).
Прапор нуля ZF(Zero Flag) встановлюється в 1, якщо результат операції дорівнює нулю.
Прапор знаку SF(Sign Flag) показує знак результату операції, встановлюючись в 1 при негативному результаті.
Прапор переповнювання OF(Overflow Flag) фіксує переповнювання, тобто вихід результату операції за межі допустимого для цього процесора діапазону значень.
Прапори стану автоматично встановлюються процесором після виконання кожної команди. Так, якщо в регістрі AX міститься число 1, то після виконання команди декремента(зменшення на 1) dec AX вміст AX дорівнюватиме 0, і процесор відразу відмітить цей факт, встановивши в регістрі прапорів біт ZF(прапор нуля). Якщо спробувати скласти два великі числа, наприклад, 58000 і 61000, то встановиться прапор перенесення CF, оскільки число 119000, що виходить в результаті складання, повинні зайняти більше двійкових розрядів, чим поміщається в регістрах або елементах пам'яті, і виникає " перенесення" старшого біта цього числа у біт CF регістра прапорів.
Прапори процесора, що відображають, дають можливість проаналізувати, якщо це треба, результат останньої операції і здійснити " розгалуження" програми : наприклад, у разі нульового результату перейти на виконання
одного фрагмента програми, а у разі ненульового - на виконання іншого фрагмента. Такі розгалуження здійснюються за допомогою команд умовних переходів, які в процесі свого виконання аналізують стан регістра прапорів. Так, команда jz zero здійснює перехід на мітку zero, якщо результат виконання попередньої команди дорівнюватиме нулю(тобто прапор ZF встановлений), а команда jnc okey виконає перехід на мітку okey, якщо попередня команда скинула прапор перенесення CF(чи залишила його в скинутому стані).
Прапор трасування TF(Trace Flag), що управляє, використовується у відладчиках для здійснення покрокового виконання програми. Якщо TF = 1, то після виконання кожної команди процесор реалізує процедуру переривання 1(через вектор переривання з номером 1).
Прапор дозволу переривань IF(Interrupt Flag), що управляє, дозволяє(якщо рівний 1) або забороняє(якщо рівний 0) процесору реагувати на переривання від зовнішніх пристроїв.
Прапор напряму DF(Direction Flag), що управляє, використовується особливою групою команд, призначених для обробки рядків. Якщо DF = 0, рядок обробляється в прямому напрямі, від менших адрес до великих; якщо DF = 1, обробка рядка йде у зворотному напрямі.
Таким чином, на відміну від бітів стану, прапори, що управляють, встановлює або скидає програміст, якщо він хоче змінити налаштування системи(наприклад, заборонити на якийсь час апаратні переривання або змінити напрям обробки рядків).
Процесор
в загальному випадку містить 2 групи
регістрів:
-
Призначені для користувача регістри;
-
Системні регістри.
Системні регістри доступні тільки при роботі в режимі ядра. На етапі визначення структури регістровий пам'яті обираються:
- Число регістрів різних типів та їх розрядність; - Склад і структура регістра прапорців.
Користувальницькі регістри, в свою чергу, поділяються на адресні, цілочисельні і регістри з ПК.
Часто одні й ті ж регістри використовуються як в якості адресних, так і в якості цілочисельних (РЗП). Крім того, зазвичай є деяка кількість керуючих регістрів.
Рисунок. 5.2 Структура зовнішнього співпроцесора