
- •Мікропроцесорна техніка
- •Мікропроцесорна техніка
- •Вступ....................................................................................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с
-
Основи програмування на мові Асемблера
Мова асемблера є мовою символьного кодування, яка дозволяє суттєво спростити процес програмування МПС. Головна його перевага в тому, що асемблер допускає представлення всіх елементів програми в символьній (буквено-цифровій) формі, яка відображає їх зміст. Перетворення символьних найменувань в двійкові коди машинної мови (об`єктна програма) забезпечує спеціальна програма, яку називають асемблером. Програма-асемблер діє як ‘компоновщик’, що об’єднує елементи програми в конкретні машинні команди.
Символьні імена, що вводяться при програмуванні на асемблері, мають багато синонімічних назв-ідентифікатори, символи, мітки тощо. В асемблері прийнято символічне позначення адреси називати міткою, а символьне позначення коду операції - кодом.
Довжина символьних найменувань, що містить букви і цифри, обмежена 5-6 символами, першим з яких завжди є буква. Для кожного МП деякі символьні найменування фіксовані і часто їх називають ключовими словами. До них відносяться мнемоніки кодів операцій, директиви асемблера і найменування внутрішніх регістрів. Інші символьні позначення означує програміст у відповідності з контекстом програми. Числові дані допускається представляти у двійковій, вісімковій, десятковій і шістнадцятковій системах числення.
Алфавітом допустимих символів в асемблері прийнятий код ASCII (Американський Стандартний Код для обміну інформацією), який містить латинські букви (тільки заголовні), цифри, розділювачі (:,;,,), знаки математичних операцій і спеціальні символи, наприклад CR-повернення каретки. Кожний символ представляється 7 бітами і зберігається в 1 байті пам’яті..
Приведений далі опис асемблера характерний для 8-розрядних процесорів та мікроконтролерів, проте він є ядром асемблерів для мікропроцесорів вищого гатунку.
-
Формат бланка асемблерної програми
Асемблерна програма записується у вигляді послідовності команд, які називають також операторами і реченнями асемблера; для кожної команди відводиться одна стрічка.
Стандартний блок асемблерної програми містить такі поля:
Мітка |
Код |
Операнд |
Коментар |
Іноді поле ‘операнд’ поділяють на два поля ( операнд1 і операнд2). Найчастіше використовують формат з фіксованими полями, кожне з яких має певне число символів в цьому полі.
Поле мітки. Необов’язкове символьне позначення в полі мітки асоціюється з 16-бітовою адресою тієї комірки пам’яті, в яку буде розміщений перший байт відміченої команди. Мітка використовується як адреса переходів команд передачі керування і звільняє програміста від необхідності оперувати абсолютними адресами пам’яті.
Мітка має довжину від одного до п’яти або шести символів, першим з яких є обов’язково буква. Мітка не може містити знаків пунктуації і розділювачі (пробіли). За останнім символом мітки ставиться двокрапка. Міткою не можуть бути ключові слова. Приклади допустимих міток:
AGAN:, A15:, C5FA:, M1:.
Оскільки мітка асоціюється з адресами пам’яті, їх не можна дублювати.
Допускається вводити для одного і того ж оператора декілька міток:
Мітка |
Код |
Операнд |
Коментар |
LOOP1: |
|
|
|
LOOP2: |
RAL |
|
|
|
*** |
|
|
|
JMP |
LOOP1 |
|
|
*** |
|
|
|
JNZ |
LOOP2 |
|
|
*** |
|
|
Команди JMP i JNZ передають керування (перша-безумовно, друга - при Z=0) одній і тій же комірці пам’яті з командою RAL. Міткам LOOP1 і LOOP2 асемблер присвоює однакове числове значення.
При програмуванні, як правило, вводять мітки для тих команд, яким необхідно передати керування.
Поле мнемоніки (коду). В полі мнемоніки записують символьне позначення виконуваної команди (код операції). Більшість мнемонік представляють собою абревіатури речень, що характеризують основні функції команди, наприклад:
MOV (MOVe)-передати, переслати;
ACI (Add with Carry Immediate)-додавання з переносом безпосереднє;
JNZ (Jump if Non Zero)-перейти, якщо не нуль;
XCHG (Exchange)-обміняти.
Часто довжина поля мнемоніки не перевищує чотирьох позицій, а між ним і сусіднім зправа полем операнда необхідний хоч би один пробіл.
Поле операнда. В цьому полі розміщуються дані, які є операндами (операндом) команди. Таким чином, вміст поля операнда може інтерпретуватися у відповідності з функцією команд. Операндами можуть бути адреси пам’яті, внутрішні регістри МП, адреси портів вводу і виводу, числові символьні константи. Деякі команди, що оперують повними внутрішніми регістрами, мають пусте поле операнда:
Мітка |
Код |
Операнд |
Коментар |
|
СМА |
|
; інвертувати акумулятор |
|
RAL |
|
;; ; з сув вправо через перенос |
|
XTHL |
|
; обмін ( H, L) і SP |
Програма - асемблер має знайти двійковий еквівалент вмісту поля операнда і підставити його ( в залежності від типу команди) в певні біти коду операції, в другий байт 2- байтової команди або у другий і третій байт 3- байтових команд. Обраховане двійкове значення вмісту поля операнда вирівнюється зправа і має вкладатись в діапазон, визначений змістом команди. В іншому випадку фіксується хибне поле операнда.
Поле операнда стандартного асемблера МП 8080 може містити інформацію таких типів: числові і символьні безпосередні дані, внутрішні регістри і регістрові пари, адреси пам’яті. Розглянемо способи визначення інформації вказаних типів.
Шістнадцяткові дані. Шістнадцяткове число в полі операнда має починатись з цифр 0-9 і завершуватись буквою Н (Нех). Число, яке починається з букв А-F, доповнюється зліва нулем. Приклади завдання шістнадцяткових чисел:
Мітка |
Код |
Операнд |
Коментар |
STORE: |
STA |
8000Н |
; Запам’ятати в комірці 8000 |
|
MVI |
С,ОААН |
; Запам’ятати в регістр |
|
ANI |
|
; С код 10101010 |
COMP: |
CPI |
10Н 290Н |
; Виділення четвертого біта ; Недопустимий операнд |
Десяткові дані. Десяткове число в полі операнду закінчується необов’язково буквою D (Decimal). Приклади завдання десяткових чисел:
Мітка |
Код |
Операнд |
Коментар |
|
MVI |
B,15 |
; Завантажити в регістр В ; код 00001111 |
|
ADI |
1 D |
; інкремент акумулятора |
|
ANI |
64 |
; виділення шостого біту |
|
IN |
32 |
; ввід із порту з адресою ; 00100000 |
Вісімкові дані. Кожне вісімкове число в полі операнда закінчується буквою О (Octal). Частіше вісімкову систему ідентифікують буквою Q, щоб відрізнити букву О від цифри 0. Приклади вісімкових чисел:
Мітка |
Код |
Операнд |
Коментар |
|
ORI |
200Q |
; Установка старшого біта |
|
SUI |
1Q |
; Декремент акумулятора |
|
MVI |
H,777Q |
; Хибний операнд |
Двійкові дані. Двійкове число в полі операнда закінчується буквою В(Binary). Приклади визначення двійкових чисел:
Мітка |
Код |
Операнд |
Коментар |
|
OUT |
1111B |
; Вивід в порт з адресою 15 |
|
XRI |
10000000B |
; Інверсія знакового біта |
|
ANI |
11011111B |
; Обнулення п’ятого біта |
Символьні константи. В полі операнда допускається використання зовнішнього алфавіту, взятого в апострофи.
Програма-асемблер підставляє замість такого операнда відповідний двійковий код символа:
Мітка |
Код |
Операнд |
Коментар |
|
CPI |
‘.’ |
; Порівняти з кодом крапки |
|
MVI |
D,’T’ |
; Завантажити код букви Т |
Ідентифікатори внутрішніх регістрів. В полі операнда потрібно вказувати символьне ім’я, яке визначене в асемблері і зв’язане з внутрішньою архітектурою мікропроцесора. В мову асемблера МП 8080 включені ідентифікатори внутрішніх регістрів В,С,D,E,H,L,M,A з відповідними їм двійковими кодами від 000 до 111.
Приклади використання таких ідентифікаторів:
Мітка |
Код |
Операнд |
Коментар |
|
MOV |
A,E |
; Передати з регістра Е в А |
|
ADD |
L |
; Добавити вміст регістра L |
|
SUB |
M |
; Відняти вміст комірки ; пам’яті, адресованої парою ; HL |
Замість ідентифікаторів внутрішніх регістрів допускається використання їх адреси в будь-якій системі числення. Наприклад, наступні команди еквівалентні: MOV A,B; MOV 7,0; MOV 111B,0H, тощо.
В командах, які оперують 16-бітовими значеннями, використовуються ідентифікатори внутрішніх 16-бітових регістрів В,D,H,PSW,SP. Приклади таких команд:
Мітка |
Код |
Операнд |
Коментар |
|
LXI |
H,0FF00H |
; Ініціалізація пари HL |
|
INX |
SP |
; Інкремент покажчика стека |
|
PUSH |
PSW |
; Завантаження в стек вмісту ; А- і F-регістрів |
Для однокристальних мікроЕОМ (наприклад МК8051) є певні особливості.Операнд може задаватись безпосередньо або через його адресу (прямо чи опосередковано). Безпосередній операнд задається числом (MOV A, #15) або символьним іменем (ADDC A, #OPER2) з обов’язковим префіксом безпосереднього операнда (#). Пряма адреса операнда може бути задана мнемонічним позначенням (IN A, P1), числом (INC 40), символьним іменем (MOV A, MEMORY). Покажчиком опосередкованої адресації служить префікс @. В командах передачі керування операндом може бути число (LCALL 0135H), (JMP@A+DPTR) (JMP LABEL), (JMP¤-2, де ¤-поточний вміст лічильника команд).
Мітки. В командах передачі керування можна вказувати мітки, які введені програмістом в полі мітки команд. Мітки в полі операнда замінюється абсолютно адресою переходу. Приклади:
Мітка |
Код |
Операнд |
Коментар |
|
JMP |
DONE |
; Перехід до мітки DONE |
|
*** |
|
|
|
CALL |
SWAP |
; Виклик підпрограми SWAP |
|
*** |
|
|
SWAP: |
RAR |
|
|
|
*** |
|
|
|
*** |
|
|
|
MOV |
A,M |
|
Символьні адреси, які фігурують в командах передачі керування, мають один раз задаватись в полі мітки деякого оператора, інакше асемблер видає повідомлення про хибну мітку.
Поточне значення програмного лічильника. В командах передачі керування допускається відносна адресація, тобто адреса переходу визначається (сумою або різницею) поточного вмісту лічильника PC, яке визначається символом
¤ і вказаного в операторі зміщення. Зміщення може задаватися в будь-якій із розглянутих форм визначення числових значень. Приклади відносної адресації:
Мітка |
Код |
Операнд |
Коментар |
|
JMP |
¤+20H |
; Перехід за адресою ;GOTO+20H (‘вперед’) |
|
JNZ |
¤-80 |
; Адреса переходу= МORE-80 ; (‘назад’) |
Вирази. Складнішими конструкціями є вирази. Вони містять, як елементи, всі розглянуті вище типи даних, які зв’язуються арифметичними і логічними операторами. Аргументами виразів служать 15-бітові цілі, а значення виразів визначаються 16-бітовими цілими без знаку. Значення виразу має відповідати змісту операції, що визначена в полі мнемоніки.
Результатами арифметичних операторів додавання (+), віднімання (-), множення (*), ділення (/) вважаються, відповідно, арифметична сума, різниця, добуток і частка аргументів. Результатом операції MOD є ціла частка від ділення першого (лівого) аргумента на другий. Унарний оператор ‘мінус’ означає віднімання аргумента від нуля.
Допустимими логічними операторами є такі:
-унарний оператор NOT, який інвертує кожний біт аргумента;
-оператори AND, OR, XOR, які виконують відповідно, побітну кон’юнкцію, диз’юнкцію і додавання по mod2 аргументів;
-оператори зсуву вправо SHR і вліво SHL, які зсувають перший аргумент на число бітів, визначених значенням другого аргумента; звільнені при зсуві біти заповнюються нулями.
Приклади допустимих виразів в полі операнда:
Мітка |
Код |
Операнд |
Коментар |
|
MVI |
B,30+40H/2 |
; Завантаження числа 62 |
|
SUI |
34 MOD 3 |
; Декремент акумулятора |
Оператори MOD,NOT та інші треба розмежовувати від аргумента пробілом. У виразах іноді допускається використання дужок.
Оператори у виразах підпорядковуються ієрархії: множення, ділення, MOD, зсуви, додавання, віднімання; заперечення, кон’юнкція, диз’юнкція, додавання по mod2.
Введення виразів суттєво ускладнює програму-асемблера, тому вони при програмуванні використовуються рідко.
Поле коментаря. Поле коментаря починається з розділювача (крапка з комою або коса риска), повністю ігнорується програмою-асемблером, тому в ньому розміщують будь-який текст. Зміст цього поля пояснює дії, які виконує команда в конкретній програмі. Коментарем може бути ціла стрічка, яка починається з розділювача.