Правила запису програм на мові Асемблер
Кожна команда представляє собою рядок такої конструкції: rn [Мітки:] мнемокод операції операндів (и) [; коментарі] rn [] - поле може бути відсутньою. rn Метка - символічне ім'я комірки пам'яті, починаючи з якої розміщується в пам'яті дана команда. rn В якості операндів можуть використовуватися числа (адреси та дані), зарезервованих і певні символічні імена. rn Для вказівки системи відліку, в якої задається число, використовують буквені індекси після самого числа: B - двійкова, Q - восьмерічная, D або нічого - десяткова, H - шістнадцятковому. rn КОМЕНТАРІ - будь-які символи. rn Поняття про Асемблері rn Асемблер - це програмний засіб, призначений для перетворення вихідного тексту програми, що містить мнемоніческіе імена команд та операндів, в послідовність двійкових кодів, які представляють собою виконуються команди для процесора. rn Таким чином, вхідна інформація для Асемблері представляється у вигляді текстового файлу, а вихідна інформація генерується у вигляді так званого файлу ОБ'ЄКТОВОГО кодів (об'єктного файлу). Крім цього, Асемблер виконує перевірку коректного написання команд. Іноді його називають компілятором (трансляторів) з мови Асемблер. rn В результаті роботи Асемблер є можливість крім об'єктного файлу отримати також файл Лістинг, який містить текстову інформацію про розміщення кодів команд і даних за конкретними адресами пам'яті мікроконтролера або мікропроцесорної системи. rn Програма на мові Асемблер складається з логічних сегментів - блоків з елементів одного типу (команди, дані). Для МК51 ці логічні сегменти безпосередньо відповідають фізичним областям пам'яті (РПП, ВПП, РПД, ВПД, бітів область). rn Для вказівки адрес команд і даних або значень даних зручно використовувати символічні імена (далі - просто імена), які відповідають фізичній або математичного змісту завдання. Використання імен робить програму більш зрозумілою для програміста і його колег, полегшує процес модифікації програми та її налагодження. Ім'я може починатися з літери та містити не більше 32 символів. rn Для сегментного побудови програми та визначення символічних імен адрес і значень даних використовують Директиви Асемблер. Директиви Асемблері НЕ є виконуючим командами, а являють собою інструкції для компілятора з розміщення команд і даних в пам'яті МК або МПС. rn СТРУКТУРА ПРОГРАМИ: програма на мові Асемблер містить такі блоки: rn - Декларативний частина - опис символічних імен даних і адрес, які використовують у програмі, а також директиви виділення пам'яті для змінних і зазначення значень констант (за допомогою директиви Асемблері); rn - блок Ініціалізація - настроювання портів і блоків периферійних функцій на необхідні режими роботи, ініціалізація стека (за допомогою команд); rn - блок РЕАЛИЗАЦИИ алгоритмів і функцій управління (за допомогою команд). rn Директиви визначення символічних імен rn Директива EQU - будь-якого імені ставиться у відповідність операндів. rn Формат директиви: <ім'я> EQU <вираз> rn Наприклад: z1 equ 10 rn z2 equ z1 + 4 rn z3 equ z1 + z2 + 5 rn Імена, визначені директивою EQU, можна використовувати як адресу коду, адреса даних (внутрішніх або зовнішніх) або значення даних. Наприклад: rn MOV A, # z1; Загрузка числа 10 в акумулятор rn MOV A, z1; Пересилання в акумулятор з комірки з адресою 0AH rn Оператори, допустимі для використання в виразах в директивах Асемблер, описані далі. rn Директива DATA - задає ім'я для адреси даних в РПД. rn Формат директиви: <ім'я> DATA <адресний вираз> rn Директива XDATA - задає ім'я для адреси зовнішніх даних (ВПД). rn Формат директиви: <ім'я> XDATA <адресний вираз> rn Директива BIT - задає ім'я для адреси біта з області внутрішнього ОЗП з бітової адресацією. rn Формат директиви: <ім'я> BIT <адреса біти> rn Наприклад: control DATA 2AH rn f1 bit control.3 Адреса у вигляді бітового селектору rn f2 bit f1 + 4; Адресні вираз rn f3 bit 60H; Абсолютний адреса rn Приклади зручного використання символічних імен: rn counter DATA 20H flag BIT P1.7 rn . . . on BIT 30H rn MOV counter, 10. . . rn m1: <дії в циклі> SETB on rn . . . wait: JNB flag, wait rn DJNZ counter, m1 CLR on rn Лічильник адрес (не плутати з лічильником команд (PC)) rn У процесі компіляції Асемблер з кожним сегментом пов'язує свою внутрішню змінну, яка називається лічильником адрес. У цієї змінної підраховується, скільки байтів відведено в пам'яті під кожну команду або число і, відповідно, за якою адресою буде розміщена наступна команда або число. Таким чином, лічильник адрес «стежить» за розміщенням в пам'яті кодів команд і даних. rn Метка команди - це, по суті, символічне ім'я адреси комірки пам'яті, починаючи з якою дана команда розміщена в пам'яті. rn Мітки команд зв'язуються з адресами автоматично в процесі компіляції, і спеціальних директив для цього не існує. rn Директиви управління сегментами програми rn Поява в тексті програми цих директив означає, що розміщені далі команди або дані відносяться до сегменту (типу) пам'яті, вказаною директивою: rn CSEG - початок сегменту кодів (пам'ять програм); rn DSEG - початок сегменту даних в ОЗП РПД; rn XSEG - початок сегменту зовнішніх даних (ВПД). rn Управління значенням лічильника адрес rn При першій появі в тексті програми будь-який з директив управління сегментами Асемблер створює новий лічильник адрес для цього сегменту і встановлює його в нуль. При повторному відкритті сегмента триває рахунок від попереднього значення. rn Існує директива ORG, яка дозволяє програмісту встановлювати потрібні значення лічильника адреси для поточного активного сегменту і таким чином розміщувати коди в пам'яті за потрібне адресами. rn Формат директиви: ORG <адресний вираз> rn Директиви ініціалізації пам'яті DB, DW заповнюють байт або слово (2 байти) вказаним значенням. Використовують для розміщення значень констант в сегменті кодів (тобто в пам'яті програм): rn [ім'я:] DB <значення> [ім'я:] DW <значення> rn Директива резервування (виділення) пам'яті DS для змінної в сегменті зовнішніх або внутрішніх даних (ВПД або ОЗУ РПД): < /p> rn [ім'я:] DS <кількість байтів> rn END - директива визначення кінця програмного модуля. rn Оператори періоду трансляції rn Для зручності запису команд і директив в мові Асемблер допускається задавати числові значення та адреси пам'яті у вигляді виразів, які обчислюються. Значення такого виразу буде визначено компілятором ще під час трансляції, а в код команди буде підставлятися тільки результат цих дій. Допустимими операціями є: +, -, *, /, (), AND, OR, XOR, NOT, LOW - виділення молодшого байта, HIGH - виділення старшого байтів з двухбайтового вирази. rn Наприклад: rn 1) X equ 10; число X = 10 rn Y equ X + 2; число Y = 12 rn Z equ (X + Y) * 4; число Z = 88 rn 2) DSEG rn org 70H rn V1: ds 4; Виділення пам'яті для четирехбайтовой змінної rn . . . rn MOV A, V1 +1; Читання в ACC іншого байтів змінної V1 rn 3) X equ 3704; Оголошення двухбайтового числа rn . . . rn MOV R0, # LOW (X); Запис молодшого байта X в регістр R0 rn MOV R1, # HIGH (X); Запис старшого байтів X в регістр R1 rn У даних матеріалах представлені тільки ті директиви Асемблер, які будуть використовуватися в програмах для лабораторних робіт. rn Повний перелік команд МК51 з необхідними коментарями та зазначенням особливостей використання представлений в посібнику в посібнику, а також у спеціальному буклеті, що надається студентам на лабораторних роботах. rn В даний час значний сегмент ринку Однокристальний мікроконтролерів займає продукція фірми Atmel. Характерна особливість фірми - широке використання високоякісної Flash - технології, яка в останнє десятиріччя витісняє традиційні EPROM. rn Основні характеристики новітніх мікроконтролерів сімейства 8051 фірми Atmel: rn Основні характеристики новітніх мікроконтролерів сімейства 8051 фірми Atmel: rn - використання базового ядра 80С51; rn - гранично низькі ціни на мікроконтролери (одиниці доларів); rn - мікроконтролери з каналом SPI (serial programming interface), що забезпечують можливість внутрісхемного програмування Flash-пам'яті; ця функція дуже зручна у виробництві, особливо дрібносерійним, коли фізична програмування контролерів виконується після їх монтажу; rn - внутрішня пам'ять даних на базі EEPROM (т.зв. Flash-пам'ять даних), що забезпечує зберігання оперативних даних при відключенні живлення мікросхем контролерів; запис в таке енергонезалежній ОЗУ відбувається дещо довше, ніж у звичайні комірки внутрікрістального ОЗУ; rn - можливість роботи на низьких тактова частота (аж до 0 Гц!), що буває важливо в системах реального часу. rn
|