
- •Мікропроцесорна техніка
- •Мікропроцесорна техніка
- •Вступ....................................................................................5
- •Типові 8- та 16- розрядні мікропроцесори
- •5. Організація взаємодії мп з зовнішнім
- •1 Основні терміни. Структура та функціонування мікропроцесорної системи
- •2. Представлення чисел і елементи двійкової арифметики в цифрових пристроях
- •2.1 Позиційні системи числення
- •Шістнадцяткова система
- •Двійкова арифметика
- •Форми представлення чисел
- •3 Загальна характеристика та класифікація мп. Родини та комплекти мп.
- •Огляд мікропроцесорів відомих фірм-виробників
- •4 Типові 8- та 16- розрядні мікропроцесори для побудови мпс
- •4.1 Восьмирозрядний мікропроцесор 8080а
- •4.1.1 Архітектура і режими роботи мікропроцесора Архітектура мікропроцесора к580вм80а
- •4.1.2 Проектування центрального процесора
- •4.1.3 Система команд мп
- •4.2.1 Загальна характеристика ,архітектура та функціонування мікропроцесор
- •Архітектура мікропроцесора
- •Адресування пам'яті і організація вводу-виводу
- •Режими адресації
- •4.2.2 Система команд мікропроцесора вм86
- •5. Організація взаємодії мп з зовнішнім середовищем.
- •5.1 Інтерфейс
- •5.2 Порти вводу-виводу
- •5.3 Організація взаємодії елементів мпс
- •5.4 Типові методи вводу-виводу інформації в мпс
- •5.5 Інтерфейс з пзп
- •Інтерфейс з озп
- •Інтерфейс портів вводу/виводу
- •5.8 Загальні засади синтезу дешифраторів зовнішніх пристроїв
- •6 Пам’ять мікропроцесорних пристроїв
- •6.1 Основні характеристики і класифікація запам’ятовуючих
- •6.2 Надоперативні і оперативні запам’ятовуючі пристрої
- •6.3 Постійні запам’ятовуючі пристрої
- •Запам’ятовуючі пристрої з послідовним доступом
- •6.4 Організація модулів пам'яті мпс
- •7. Інтерфейсні віс для проектування мпс
- •7.1 Програмований адаптер паралельного інтерфейсу
- •7.2 Програмований зв’язковий адаптер
- •7.3 Програмований інтервальний таймер
- •8 Однокристальні мікроЕом
- •8.1.1 Мікроконтролер мк 51
- •Арифметико-логічний пристрій
- •Доступ до зовнішньої і резидентної пам’яті
- •Типи операндів та способи адресації
- •Команди логічних операцій
- •Команди операцій з бітами
- •Команди передачі керування
- •8.1.2 Родина мк52
- •8.1.3 Перспективна розробка фірми analog devices
- •8.2 Мікроконтролери фірми microchip
- •Основи програмування на мові Асемблера
- •Формат бланка асемблерної програми
- •9.2 Директиви асемблера
- •9.3 Макрокоманди
- •10 Загальні засади і особливості програмування та відлагодження мікропроцесорних пристроїв
- •10.1.2 Етапи проектування мпс
- •10.2.1 Системи програмування
- •10.2.2 Засоби трансляції і компіляції
- •10.2.3 Засоби редагування зв’язків і компоновки
- •10.3 Засоби відлагодження мікропроцесорних систем
- •Засоби для контролю та відлагодження аз мпс
- •10.3.1 Засоби відлагодження мікропроцесорних програм
- •10.3.2 Засоби комплексного відлагодження мпс
- •11.Когутяк м.І.Мікропроцесорний комплект к580 і його використання в керуванні.Навчальний посібник.- Івано-Франківськ ,2000.-96с.
- •13. Когутяк м. І.Однокристальні мікроЕом.Родина мк51 .Навчальний посібник.- Івано-Франківськ ,2000.-56с
9.3 Макрокоманди
При програмуванні виникає ситуація, коли деяка група команд, з невеликими модифікаціями повторюється в програмі декілька разів. Цю групу команд допускається виділити один раз як велику команду-макрокоманду з своєю мнемонікою, яка не входить в систему команд МП. Всякий раз програма-асемблер замінює її ланцюжком команд означених макрокомандою.
Розглянемо загальні засади використання макрокоманд на простих прикладах. Нехай в прикладній програмі декілька разів треба передати вміст регістра (D,E) в покажчик стеку SP. Однією командою це здійснити неможливо, оскільки в системі команд МП така команда відсутня. Необхідна передача реалізується ланцюжком команд XCHG,SPHL,XCHG. Визначимо приведену послідовність команд як макрокоманду з мнемонікою SPDE:
Мітка |
Код |
Операнд |
Коментар |
SPDE |
MACRO |
|
; Макрокоманда SPDE |
|
XCHG |
|
; передає вміст (D,E) |
|
SPHL |
|
; в покажчик стеку |
|
XCHG |
|
|
|
ENDM |
|
|
|
*** |
|
|
|
SPDE |
|
; Передати із (D,E) в SP |
|
*** |
|
|
|
SPDE |
|
; Передати із (D,E) в SP |
|
*** |
|
|
Підкреслимо, що означена мнемоніка SPDE фігурує в полі мітки, а MACRO i ENDM є спеціальними директивами асемблера. Після означення макрокоманду SPDE можна використовувати як звичайну команду, розміщуючи її в полі мнемоніки.
Означимо далі макрокоманду SHV, яка зсуває вміст акумулятора вправо з записом у вільні біти нулів.
Число зсувів міститься в регістрі D:
Мітка |
Код |
Операнд |
Коментар |
SHV |
MACRO |
|
|
LOOP: |
RRC |
|
;Макрокоманди SHV простого |
|
ANI |
7FH |
; зсуву |
|
DCR |
D |
; акумулятора вправо |
|
JNZ |
LOOP |
; Константа зсуву в |
|
ENDM |
|
; регістрі D |
Наступний фрагмент показує використання даної макрокоманди для зсуву вправо вмісту комірки ІТЕМ на три біти:
Мітка |
Код |
Операнд |
Коментар |
|
LDA |
ITEM |
; Завантаження в акумулятор |
|
MVI |
D,3 |
; Задання числа зсувів |
|
SHV |
|
; Зсув на 3 біти |
|
STA |
ITEM |
; Запам’ятовування в пам’яті |
При виконанні даного фрагмента модифікується значення індикатора С (в команді RRC), а вміст регістра D є лічильником зсувів.
Можна розширити можливості макрокоманди SHV, якщо при означенні її не вказувати ні конкретний регістр-лічильник, ні число зсувів, а задати їх при безпосередньому зверненні до макрокоманди. Тобто мати макрокоманду з формальними параметрами. Макрокоманда SHV з двома параметрами (регістр REG, число зсувів VOL) визначається у такий спосіб:
Мітка |
Код |
Операнд |
Коментар |
SHV |
MACRO |
REG, VOL |
; Приклад означення |
|
MVI |
REG, VOL |
; макрокоманди |
LOOP: |
RRC |
|
|
|
ANI |
7FH |
; SHV з двома |
|
DCR |
REG |
; параметрами |
|
JNZ |
LOOP |
|
|
ENDM |
|
|
Тепер при зверненні до SHV в різних місцях прикладної програми можна використовувати як лічильник будь-який вільний регістр і задавати змінне число зсувів. Наприклад, для зсуву вмісту комірки ITEM по 5 бітів з регістром-лічильником L, необхідно записати:
Мітка |
Код |
Операнд |
Коментар |
|
LDA |
ITEM |
; Зсув вмісту |
|
SHV |
L, 5 |
; комірки з адресою ITEM |
|
STA |
ITEM |
; на п’ять розрядів вправо |
Ознайомившись із загальними принципами використання макрокоманд, зробимо строге визначення кожного етапу, зв’язаного з означенням, зверненням і розширенням макрокоманд.
Означення макрокоманд. Означення макрокоманди має такий формат:
Мітка |
Код |
Операнд |
Коментар |
<ім’я> |
MACRO |
<список параметрів> |
|
|
*** |
|
|
|
Тіло |
макрокоманди |
|
|
*** |
|
|
|
ENDM |
|
|
В полі мітки знаходиться ім’я (символьне позначення або мнемоніка), введена програмістом. А поле операнда-список формальних параметрів, називають також аргументами. Параметри розділюються комами і в загальному випадку можуть бути виразами. Група операторів між директивами MACRO i ENDM, називається тілом макрокоманди, може містити будь-які машинні команди, директиви (крім MACRO i ENDM), коментарі і звернення до інших макрокоманд, коли допускаються вкладені макрокоманди. Параметри визначаються при кожному зверненні до макрокоманди.
Звернення до макрокоманд. Звернення до означеної раніше в програмі макрокоманди має такий вигляд:
Міта |
Код |
Операнд |
|
[мітка: ] |
<ім’я> |
<список параметрів> |
|
В полі мнемоніки міститься ім’я макрокоманди, яке фігурує в полі мітки директиви MACRO, а в полі операнд-список фактичних параметрів. Значення параметрів підставляються в тіло макрокоманди зліва направо у відповідності з полем операнда директиви MACRO. Якщо у зверненні є менше параметрів, ніж у визначенні макрокоманди, то решта параметрів вважаються пустими, а якщо більше-
лишні ігноруються.
Розширення макрокоманд. Оператори, що утворюються в результаті підстановки фактичних параметрів в тіло макрокоманд, називають розширенням макрокоманди. Розширення має містити тільки допустимі оператори мови асемблера. Означимо, наприклад, макрокоманду STACK таким чином:
Мітка |
Код |
Операнд |
Коментар |
STACK |
MACRO |
R1 |
|
|
PUSH |
R1 |
; Завантажити в стек |
|
ENDM |
|
; вміст регістра R1 |
Допустимими значеннями R1 є B,D,H,PSW, тому звернення STACK SP є помилковим.
Для запобігання конфліктам, що пов’язані з багаторазовим визначенням міток, програма-асемблер рахує мітки в макрокомандах локальними, тобто чинними в межах конкретного розширення. При необхідності створення глобальної мітки, необхідно закінчити мітку двома двокрапками замість однієї. Глобальна мітка може зустрічатись тільки один раз.
На завершення розглянемо макрокоманду IXAD індексної адресації. Вона завантажує в регістри (H,L) базову адресу BASE і добавляє до неї значення 16-бітового індекса, який зберігається в регістровій парі RP:
Мітка |
Код |
Операнд |
Коментар |
IXAD |
MACRO |
RP,BASE |
|
|
LHI |
H,BASE |
; Завантаження базової адреси |
|
DAD |
RP |
; Індексування |
|
ENDM |
|
|
Якщо базова адреса зберігається в двох суміжних комірках пам’яті з адресою BASE, то замість команди LXI необхідно використати команду LHLD BASE.
Асемблер для 16-розрядного процесора 8086 має свої особливості , які пов’язані з сегментацією пам’яті . Тому базовий асемблер доповнений низкою псевдооператорів для роботи з ними.