- •Архітектура і система команд мікропроцесорів
- •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 недопустиме ім’я регістра
Способи задання операндів
Операнд задається неявно (на мікропрограмному рівні). В таких командах використовуються об’єкти по замовчуванню (регістри, прапори).
Операнд задається в команді (безпосередній операнд). Безпосередній операнд може бути тільки другим операндом (джерелом).
Операнд знаходиться в одному із регістрів. В якості регістрів можуть використовуватися:
32-розрядні EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP;
16-розрядні AX, BX, CX, DX, SI, DI, SP, BP;
8-розрядні AH, AL, BH, BL, CH, CL, DH, DL;
сегментні CS, DS, SS, ES, FS, GS.
Операнди розміщуються в пам’яті. Найбільш складний спосіб розміщення операндів, але забезпечує найбільшу гнучкість. Дозволяє реалізувати два типи адресації: пряму і непряму. Непряма адресація має наступні різновиди:
непряма базова;
непряма базова із зміщенням;
непряма індексна із зміщенням;
непряма базова індексна;
непряма базова індексна із зміщенням.
Операндом є порт вводу-виводу. Крім адресного простору оперативної пам’яті, МП підтримує адресний простір вводу-виводу, який використовується для доступу до пристроїв вводу-виводу. Об’єм його складає 64 Кбайт. Конкретне значення адресу в межах цього простору називається портом. Фізично порту відповідає апаратний регістр, доступ до якого здійснюється командами in і out. Регістри, що адресуються з допомогою порта вводу-виводу можуть мати розрядність 8, 16 і 32 біти, але для конкретного порта розрядність фіксована.
Операнд знаходиться у стеку.
Більшість команд має два операнди. Перший із них приймач, другий – джерело. Один операнд може знаходитися в регістрі або пам’яті, а другий обов’язково у регістрі або безпосередньо у команді. Тому у двооперандній команді можливі наступні об’єднання операндів:
регістр – регістр;
регістр – пам’ять;
безпосередній операнд – регістр;
безпосередній операнд – пам’ять.
Є виняток для команд:
робота із ланцюжками (дані переміщаються із пам’яті в стекову пам’ять);
робота із стеком (дані переміщаються із пам’яті в стек);
команда множення (використовується неявний операнд).
Адресація пам’яті
Пряма адресація – ефективний адрес міститься у самій команді і для його формування не використовується ніяких додаткових джерел і регістрів. Ефективний адрес береться безпосередньо із поля зміщення команди. Пряма адресація буває двох типів:
o абсолютна пряма адресація. Ефективний адрес є частиною машинної команди, але формується він тільки із поля зміщення в команді. Для формування фізичного адресу це поле додається до зсунутого на 4 біти значення сегментного регістра. Наприклад:
mov ax, dword ptr [0000];записати слово з адресу ds:[0000] в регістр
Така адресація застосовується рідко, так як коміркам присвоюють імена. Зміщення цих імен зберігається в полі зміщення команди. Таким чином ефективний адрес зберігається в самій команді. Наприклад:
data segment
name dw 5 ;записати слово по адресу ds:0000 в пам’ять
…
data ends code segment
…
mov ax, name ; записати слово name по фізичному адресу ds:0000
o відносна пряма адресація. Використовується в командах умовних переходів для вказання відносного адреса переходу. Обчислюється зміщення мітки відносно наступної команди після переходу і додається до вмісту регістра ip (вказівник команд). Наприклад:
jc m1 mov al, 2
…
m1: ; зміщення мітки обчислюється відносно команди mov
Непряма базова адресація – ефективний адрес може знаходитися в любому із регістрів загального призначення (крім esp/sp, ebp/bp). Синтаксично це виражається у включенні імені регістра у дужки. Наприклад mov ax, [ecx] пересилає в регістр ax вміст слова по адресу із сегмента даних із зміщенням із регістра ecx.
Непряма базова (регістрова) із зміщенням – забезпечує доступ до даних з відомим зміщенням відносно базового адресу. Наприклад: mov ax, [ecx+3h] пересилає в регістр ах слово по адресу ecx+3h. Команда mov ax, mas[dx] пересилає в регістр aх слово по адресу dx плюс mas (ідентифікатору mas присвоюється значення зміщення відносно початку сегмента даних).
Непряма індексна із зміщенням – подібна до непрямої базової із зміщенням і добавлена можливість масштабування індексного регістра. Наприклад, в команді mov ax, [esi*2] значення ефективного адреса обчислюється виразом mas+(esi)*2. Використовується для організації масивів з розмірами елементів 1, 2, 4, 8 байт.
Непряма базова індексна – ефективний адрес формується як сума вмісту двох регістрів загального призначення: базового і індексного. Наприклад: mov eax, [esi][edx] формує адрес із двох компонентів (esi)+(edx).
Непряма базова індексна із зміщенням – ефективний адрес формується як сума трьох складових: вміст базового регістру, індексного регістру і поле зміщення в команді. Наприклад команда mov eax, [esi+5][edx] пересилає у регістр eax подвійне слово по адресу (esi) + 5 + (edx). Команда add ax, mas[esi][ebx] додає до регістру ax вміст слова по адресу mas + (esi) + (ebx).
