- •Архітектура і система команд мікропроцесорів
- •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 недопустиме ім’я регістра
Макрокоманди
Макрокоманда являє собою строку, що містить деяке символічне ім’я – ім’я макрокоманди, призначену для того, щоб бути заміщеною однією або декілька другими строками. Для макрокоманди необхідно задати шаблон-описання (макровизначення). Синтаксис макровизначення:
ім’я_макрокоманди macro список_формальних_аргументів тіло макровизначення
endm
Макровизначення може знаходитися:
o на початку текста програми до сегмента кода;
o в окремому файлі;
o в макробібліотеці (макрокоманди підключаються з допомогою директиви include).
Макровизначення викликаються з допомогою макрокоманди:
ім’я_макрокоманди список фактичних аргументів
В результаті виклику макрокоманда в тексті програми заміщується макророзширенням, а формальні параметри замінюються на фактичні. Цей процес називається макрогенерацією або макророзширенням.
Якщо в програмі деяка макрокоманда викликається декілька разів то необхідно застосовувати директиву local:
local список_ідентифікаторів
Директиву необхідно задавати за заголовком макровизначення. Результатом роботи цієї директиви буде генерація в кожному екземплярі макророзширення унікальних імен для всіх ідентифікаторів, перечислених у список_ідентифікаторів. Ці унікальні імена мають вигляд
??xxxx, де xxxx – шістнадцяткове число. Для першого ідентифікатора в першому екземплярі макророзширення xxxx=0000, для другого – xxxx=0001 і т.д.
Макродирективи
Макродирективи використовуються для модифікації наборів строк або їх послідовності. Їх можна поділити на дві групи:
o директиви повторень WHILE, REPT, IRP, IRPC;
o директиви керування процесом генерації EXITM, GOTO.
Директиви while і rept
Директиви WHILE і REPT використовуються для повторів послідовностей строк.
WHILE константний_вираз послідовність_строк ENDM
REPT константний_вираз послідовність_строк ENDM
При використанні директиви WHILE послідовність_строк повторюється до тих пір, поки значення константний_вираз не буде дорівнювати нулю. Значення константний_вираз повинно змінюватися всередині послідовність_ строк.
При використанні директиви REPT послідовність_строк повторюється стільки разів, скільки задано в значенні константний_вираз. Константний_вираз автоматично зменшується на одиницю після кожної ітерації.
Директиви irp і irpc
IRP формальний аргумент <строка_символів_1, ...,строка_символів_n >
послідовність_строк
ENDM
Директива IRP повторює послідовність_строк стільки разів, скільки строк_символів поміщено в кутові дужки. При i-му повторі формальний параметр замінюється на строка_символів_i із квадратних дужок.
IRPС формальний аргумент <строка_символів >
послідовність_строк
ENDM
Директива IRPС повторює послідовність_строк стільки разів, скільки символів поміщено в кутові дужки. При i-му повторі формальний параметр замінюється на символ_i із квадратних дужок.
Директиви умовної компіляції
Існує два типи директив умовної компіляції:
o директиви компіляції по умові дозволяють міняти процес макрогенерації;
o директиви генерації помилок по умові дозволяють виявляти в процесі макрогенерації помилкові ситуації.
З цими директивами застосовуються директиви керування процесом генерації макророзширень EXITM I GOTO.
Директива EXITM не має операндів, і її дія полягає в тому, що вона негайно зупиняє процес генерації макророзширення, починаючи з того місця, де вона зустрілась у макровизначенні.
Директива GOTO ім’я мітки переводить процес генерації макровизначення у друге місце, припиняючи тим самим послідовне розгортання сток макровизначення. Мітка на яку передається керування, має спеціальний формат:
: ім’я_мітки
