
- •Архітектура і система команд мікропроцесорів
- •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 недопустиме ім’я регістра
Директиви компіляції по умові
Дозволяють організовувати вибіркову трансляцію програми. Є 10 типів умовних директив компіляції, які можна об’єднати в 4 групи:
o директиви IF і IFE – умовна трансляція по результату обчислення логічного виразу;
o директиви IFDEF і IFNDEF – умовна трансляція по факту визначення символічного імені;
o директиви IFB і IFNB – умовна трансляція по факту визначення фактичного аргументу при виклику макрокоманди.
Умовні директиви компіляції мають однаковий синтаксис:
IFxxx логічний_вираз або аргументи фрагмент програми_1
ELSE
фрагмент програми_2 ENDIF
IF (E) логічний_вираз фрагметн_програми_1 ELSE
фрагметн_програми_2 ENDIF
Директиви if і ife
Якщо в директиві IF логічний вираз істинний (фальш – нуль, істина – не нуль) то транслюється фрагметнт_програми_1, інакше – фрагметнт_програми_2.
Якщо в директиві IFE логічний вираз фальш (фальш – нуль, істина – не нуль) то транслюється фрагметнт_програми_1, інакше – фрагметнт_програми_2.
Директиви ifdef і ifndef
IF(N)DEF символічне_ім’я фрагметн_програми_1 ELSE
фрагметн_програми_2 ENDIF
Директива IFDEF перевіряє чи описане в програмі символічне_ім’я і якщо так, то транслюється фрагметн_програми_1, інакше - фрагметн_програми_2.
Дія IFNDEF обернена до IFDEF.
Директиви ifb і ifnb
IF(N)B аргумент фрагметн_програми_1 ELSE
фрагметн_програми_2 ENDIF
Директиви перевіряють фактичні параметри, що передаються в макрос. Директива IFB перевіряє рівність аргументів пропуску. Аргументом може бути ім’я або число. Якщо аргумент дорівнює пропуску (тобто аргумент не був заданий при виклику макрокоманди), то транслюється фрагмент_програми_1, інакше – фрагмент_програми_2.
Дія IFBN обернена до IFB.
Директиви ifidn, ifidni, ifdif і ifdifi
Директиви дозволяють не тільки перевірити наявність або значення аргументів, но і виконати їх ідентифікацію як строк символів.
IFIDN(I) аргуменm_1, аргумент_2
фрагметн_програми_1
ELSE
фрагметн_програми_2 ENDIF
IFIDN(I) аргуменm_1, аргумент_2
фрагметн_програми_1
ELSE
фрагметн_програми_2 ENDIF
Директива IFIDN порівнює символьні значення аргумент_1 і аргумент_2 з врахуванням великих і малих букв. Якщо строки співпадають, то транслюється фрагмент_програми_1, інакше – фрагмент_програми_2. Дія IFDIF обернена до IFIDN.
Директиви IFIDNI, IFDIFI аналогічні до вищенаведених, але не враховують різниці між великими і малими буквами.
9.4. Директиви генерації помилок
Директиви генерації помилок поділяються на дві групи:
безумовні директиви, які генерують помилку трансляції без перевірки яких небудь умов;
умовні директиви, які генерують помилку трансляції після перевірки певних умов.
Директива безумовної генерації помилки – ERR (.ERR). Набір умов, на які реагують директиви умовної генерації помилок, такий же, як і для директив умовної компіляції.
Директиви .ERRB (ERRIFB) і .ERRNB (ERRIFNB):
.ERRB (ERRIFB) <ім’я_формального_параметра> - генерація помилки, якщо
<ім’я_формального_параметра> пропущено.
.ERRNB (ERRIFNB) <ім’я_формального_параметра> - генерація помилки, якщо
<ім’я_формального_параметра> присутнє.
Директиви .ERRDEF(ERRIFDEF) і .ERRNDEF(ERRIFNDEF):
.ERRDEF(ERRIFDEF) символічне_ім’я – якщо вказане символічне_ім’я визначене до видачі директиви, то генерується помилка;
.ERRNDEF(ERRIFNDEF) символічне_ім’я – якщо вказане символічне_ім’я не визначене до видачі директиви, то генерується помилка.
Директиви .ERRDIF (ERRIFDIF) і .ERRIDN (ERRIFIDN):
.ERRDIF (ERRIFDIF) <строка_1><строка_2> - генерується помилка, якщо дві строки, з врахуванням різниці великих і малих букв, не співпадають.
.ERRIDN (ERRIFIDN) <строка_1><строка_2> - генерується помилка, якщо дві строки, з врахуванням різниці великих і малих букв, співпадають.
.ERRIFDIFI (ERRIFIDNI) – аналогічні вищенаведеним, але ігнорується різниця великих і малих букв.
Директиви .ERRE(ERRIFE) і .ERRNZ(ERRIF):
.ERRE(ERRIFE) константний_вираз – генерується помилка, якщо константний_вираз
фальшивий (дорівнює нулю).
.ERRNZ(ERRIF) константний_вираз – генерується помилка, якщо константний_вираз
істинний (не дорівнює нулю).
Директиви DISPLAY і %OUT – виводять повідомлення під час трансляції програми.
Наприклад:
display недопустимы аргументи макрокоманди!