
- •Архітектура і система команд мікропроцесорів
- •1. Архітектура еом
- •1. 1. Поняття про архітектуру еом
- •1.2. Програмна модель мікропроцесора Intel Pentium III
- •Сегментні регістри
- •Регістри стану і керування
- •1.4. Організація пам’яті
- •Сегментована модель пам’яті
- •Формування фізичного адреса в реальному режимі
- •Типи даних
- •Формат команд
- •Типи переривань
- •Структура програми на асемблері
- •Синтаксис асемблера
- •Директиви сегментації
- •Прості типи даних
- •Системи числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Перевод із десяткової і шістнадцяткової системи у двійкову
- •Перевод із десяткової і двійкової у шістнадцяткову систему
- •Числа із знаком
- •Структура машинної команди
- •Способи задання операндів
- •Адресація пам’яті
- •Функціональна класифікація машинних команд
- •Команди обміну даними
- •Команди пересилання даних
- •Ввід-вивід в порт
- •Робота з адресами і вказівниками
- •Перетворення даних
- •Робота із стеком
- •Арифметичні цілочисельні команди
- •Цілі двійкові числа
- •Додавання двійкових чисел без знаку
- •Додавання двійкових чисел із знаком
- •Віднімання двійкових чисел без знаку
- •Віднімання двійкових чисел із знаком
- •Множення двійкових чисел без знаку
- •Множення двійкових чисел із знаком
- •Ділення двійкових чисел без знаку
- •Ділення двійкових чисел із знаком
- •Команди перетворення типів
- •4.2. Десяткові числа
- •Неупаковані bcd-числа
- •Упаковані bcd-числа
- •Логічні команди
- •Логічні команди
- •Команди зсуву
- •Лінійний зсув
- •Циклічний зсув
- •Додаткові команди зсуву
- •Команди передачі керування
- •Команди безумовного переходу;
- •Команди безумовного переходу
- •Процедури
- •Умовні переходи
- •Команда порівняння cmp
- •Команди умовного переходу і прапори
- •Команди умовного переходу і регістр ecxlcx
- •6.4. Організація циклів
- •Ланцюжкові команди
- •Пересилання ланцюжків
- •Порівняння ланцюжків
- •Сканування ланцюжків
- •Завантаження ланцюжків
- •Формування ланцюжків
- •Ввід-вивід елементів у порт
- •Складні структури даних
- •Доступ до елементів масиву
- •Двомірні масиви
- •8.2. Структури
- •Описання шаблона структури
- •Визначення даних з типом структури
- •Методи роботи із структурою
- •Об’єднання
- •Визначення екземпляру запису
- •Робота з записами
- •Макрозасоби мови асемблера
- •Макрокоманди
- •Макродирективи
- •Директиви while і rept
- •Директиви irp і irpc
- •Директиви умовної компіляції
- •Директиви компіляції по умові
- •Директиви if і ife
- •Директиви ifdef і ifndef
- •Директиви ifb і ifnb
- •Директиви ifidn, ifidni, ifdif і ifdifi
- •9.4. Директиви генерації помилок
- •%Out недопустиме ім’я регістра
Регістри стану і керування
В МП включено декілька регістрів, які постійно містять інформацію як про стан самого МП, так і програми, команди якої в даний момент завантажені на конвеєр.
До цих регістрів відносяться: o регістр прапорів eflags/flags; o регістр вказівника команди eip/ip.
Використовуючи ці регістри, можна отримувати інформацію про результати виконання команд і впливати на стан самого мікропроцесора. Розглянемо призначення і вміст цих регістрів:
o eflags/flags (flag register) – регістр прапорів. Розрядність 32/16 бітів. Окремі біти мають певне функціональне призначення і називаються прапорами. Молодша частина цього регістру повністю аналогічна регістру flags для i8086. На рис. 1.3 показано вміст регістра eflags.
Виходячи із особливостей використання, прапори регістра eflags/flags можна розділити на три групи:
o 8 прапорів стану. Ці прапори можуть змінитися після виконання машинних команд. Прапори стану регістра eflags відображають особливості результату виконання арифметичних або логічних операцій. Це дає можливість аналізувати стан обчислювального процесу і реагувати на нього з допомогою команд умовних переходів і викликів підпрограм. В табл. 1.1 наведено прапори станів і їх призначення.
o 1 прапор керування. Позначається як df (Directory flag). Він знаходиться у десятому регістрі eflags і використовується ланцюжковими командами. Значення df визначає напрямок поелементної обробки: від початку строки до кінця (df=0), від кінця до початку (df=1). Для роботи з прапором існує команда cld (зняти прапор) і std (встановити прапор).
o 5 системних прапорів, що керують вводом/виводом, маскованими перериваннями, відладкою, переключенням між задачами і віртуальним режимом роботи i8086. Прикладним програмам не рекомендується модифікувати без необхідності ці прапори. В табл. 1.2 перечисленні системні прапори і їх призначення.
Рис.1.3. Вміст регістра eflags
Прапори стану
Таблиця 1.1.
Мнемоніка прапора |
Прапор |
Номер біта в eflags |
Зміст і призначення |
cf |
Прапор переносу (Carry flag) |
0 |
1-арифметична операція зробила перенос із старшого біта результату. Старшим є 7-й, 15-й і 31-й біт в залежності від розмірності операнду 0 – переносу не було |
pf |
Прапор паритету (Parity Flag) |
2 |
1-вісім молодших розрядів (цей прапор тільки для 8-ми молодших розрядів любого операнду) результату містять парне число одиниць 0-вісім молодших розрядів результату |
|
|
|
містять непарне число одиниць |
af |
Допоміжний прапор переносу (Auxiliary carry Flag) |
4 |
Тільки для команд, що працюють з BCD- числами. Фіксує позичання із молодшої тетради результату: 1- в результаті операції додавання відбувся перенос із розряду 3 в старший розряд або при відніманні було позичання в розряд 3 молодшої тетради із значення в старшій тетраді; 0-переноса і позичання в (із) 3 розряд(у) молодшої тетради результату не було. |
zf |
Прапор нуля (Zero Flag) |
6 |
1-результат нульовий 0-результат ненульовий |
sf |
Прапор знаку (Sign Flag) |
7 |
Відображає стан старшого біта результату (біти 7, 15, 31 для 8, 16, 32-розрядних операндів відповідно): 1-старший біт результату дорівнює 1; 0-старший біт результату дорівнює 0 |
of |
Прапор переповнення (Overflaw Flag) |
11 |
Прапор of використовується для фіксування факту втрати значущого біта при арифметичних операціях: 1-в результаті операції відбувається перенесення (позичання) в (із) старшого, знакового біта результату (біти 7, 15, 31 для 8, 16, 32-розрядних операндів): 0-в результаті операції не відбувається перенесення (позичання) в (із) старшого, знакового біта результату. |
iopl |
Рівень привілей ввода-вивода |
12,13 |
Використовується у захищеному режимі роботи МП для контролю доступу до команд вводу-виводу, в залежності від привілейованості задачі |
Системні прапори
Таблиця 1.2.
Мнемоніка прапора |
Прапор |
Номер біта в eflags |
Зміст і призначення |
tf |
Прапор трасування (Trace Flag) |
8 |
Призначений для покрокової роботи МП: 1-МП генерує переривання з номером 1 після виконання кожної машинної команди. Може використовуватися при відладці програми, зокрема відладчиками; 0-звичайна робота |
if |
Прапор переривання (Interrupt enable Flag) |
9 |
Призначений для дозволу або заборони (маскування) апаратних переривань (переривань по входу INTR): 1-апаратні переривання дозволені; 0-апаратні переривання заборонені |
rf |
Прапор відновлення (Resume Flag) |
16 |
Використовується при обробці переривань від регістрів відладки |
vm |
Прапор віртуального 8086 |
17 |
Признак роботи МП в режимі віртуального 8086: |
|
(Virtual 8086 Mode) |
|
1-процесор працює в режимі віртуального 8086; 0-процесор працює в реальному або захищеному режимі |
ac |
Прапор конролю вирівнювання (Alignment Check) |
18 |
Призначений для дозволу контролю вирівнювання при звертанні до пам’яті. Використовується сумісно з бітом am в системному регістрі cr0. Наприклад, Pentium дозволяє розміщувати команди і дані з любого адресу. Якщо потрібно контролювати вирівнювання даних і команд по адресах кратним 2 або 4, то встановлення даних бітів приведе до того, що всі звернення по некратних адресах будуть збуджувати виняткову ситуацію |
vif |
Прапор віртуального переривання (Virtual Interrupt Flag) |
19 |
При певних умовах (одна із яких – робота МП у V-режимі) є аналогом прапору if. Прапор vif використовується сумісно з прапором vip. Прапор появився у МП Pentium |
vip |
Прапор відкладеного віртуального переривання (Virtual Interrupt flag) |
20 |
Встановлюється в 1 для індикації відкладеного переривання. Використовується при роботі у V-режимі сумісно з прапором vif. Прапор появився у МП Pentium |
id |
Прапор ідентифікації (Identification flag) |
21 |
Використовується для того, щоб показати факт підтримки МП інструкції cpuid. Якщо програма може встановити або очистити цей прапор, це означає що дана модель МП підтримує інструкцію cpuid |