|
|||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Асемблерна мова мікроконтролера 8051
Оператором мови ассемблера мікроконтролера 8051 (мови АСМ51) є рядок вихідного тексту мікроконтролерної програми (МК-програми), що має наступний формат:
Поле <команда/директива> є головним полем рядка і складається з поля <операція> і поля <операнда>, розділених пробілом. Поле <операція> містить мнемонічне позначення команди або директиви асемблера, що є скороченням (абревіатурою) повного англійського найменування виконуваної дії. Наприклад: MOV - move - переслати, JMP - jump - перейти, DB - define byte - визначити байт. Крім того, поле <операція> може містити символічне ім'я асемблерної макрокоманди. Поле <операнда> залежить від поля <операція> і може вказувати групу розділених комами операндів, або може бути виключене взагалі. Операнди асемблерних команд визначають тип використовуваних даних (біт, байт, 2-байтовое слово), спосіб адресації цих даних і адреси переходів в області пам'яті програм мікроконтролера. Розрізняють наступні способи адресації даних: реєстровий, прямий, реєстровий-регістровий, непрямо-реєстровий і безпосередній. Реєстрова адресація забезпечує звертання по байтовому вмісту регістрів A, B чи регістрів R0-R7 обраного банку, по 2-байтовому вмісту регістра DPTR і до бітового вмісту прапора переносу C, при цьому в якості операндів використовуються прийняті імена перерахованих програмно доступних елементів, а також символічні імена (тільки для регістрів R0-R7), обумовлені користувачем. Пряма адресація застосовується для звертання по байтовому вмісту 128-ми осередків резидентної пам'яті даних чи 21-го регістра спеціальних функцій, а також до бітового вмісту 16-ти осередків РПД чи 11-ти РСФ, що допускають побітове звертання (мал.2). При прямій адресації даних у поле <операнди> вказуються прямі адреса використовуваних осередків РПД, регістра спеціальних функцій біта. Ця адреса може бути задана числом, символічним ім'ям, вираженням, ім'ям (тільки для РСФ і бітів РСФ). Імена регістрів спеціальних функцій приведені в табл.2.1, а імена бітів РСФ - у табл.2.3, табл.2.5-2.8. Крім того, ім'я біта РСФ може бути представлено структурним видом: (ім'я РСФ).(номер біта). Наприклад, ім'я п'ятого біта регістра TCON можна записати як TCON.5, ім'я другого біта акумулятора - як A.2 і т.д. За допомогою регістрової-непрямо-реєстрової адресації забезпечується звертання по байтовому вмісту 128-ми комірках РПД, при цьому адреса використовуваної комірки визначається вмістом покажчика стека SP чи одного з регістрів R0, R1 обраного банку. Регістрова непрямо-реєстрова адресація використовується також для звертання до зовнішньої пам'яті даних. У цьому випадку регістром-покажчиком може бути 16-розрядний покажчик даних DPTR чи один зі згаданих вище регістрів R0, R1. Для роботи з даними, "зашитими" у виді констант у пам'ять програм мікроконтролера, застосовується регістрова непрямо-реєстрова адресація по сумі: базовий регістр (вміст DPTR чи програмного лічильника PC) плюс індексний регістр (вміст акумулятора A). Будь-яка така константа може бути обрана за адресою, що обчислюється додаванням умісту DPTR (PC) із умістом A. Операнд, що визначає регістрову-непрямо-реєстрову адресацію даних, задається ім'ям покажчика або символічним ім'ям (тільки для R0 і R1) з обов'язковим префіксом @. При безпосередній адресації дані, призначені для обробки, безпосередньо вказуються в поле (операнди(і можуть бути представлені в ньому числом, символічним ім'ям або вираженням з обов'язковим префіксом #. Аналогічним образом (за винятком префікса #) представляється операнд, що визначає адреса переходу в пам'яті програм мікроконтролера. У якості операндів асемблерних директив і макрокоманд звичайно використовуються числа, символічні імена, вираження, імена програмно доступних елементів мікроконтролера (тільки для директиви REG і макрокоманд), а в ряді випадків мнемоніки мови АСМ51 (тільки для макрокоманд). Символічні імена, що є операндами команд або директив, повинні бути обов'язково визначені за допомогою відповідних директив (EQU, VAR чи REG) мови АСМ51. Крім того, символічне ім'я адреси в пам'яті програм може бути визначено використанням цього імені в поле (мітка) однієї з рядків вихідного тексту МК-програми. Відзначимо, що коректне символічне ім'я повинне бути представлене комбінацією букв і цифр латинського алфавіту і починатися з букви, при цьому зазначена комбінація допускає використання символу підкреслення. Застосовувані в якості операндів числа приводяться з вказівкою системи числення (СЧ), для чого використовується суфікс (латинська буква, що стоїть після числа): B - для двійкової СЧ, Q - для вісімкової СЧ, D - і H - відповідно для десяткової і шістнадцяткової СЧ. Число без суфікса вважається десятковим. Вираз, який використовується в полі (операнді), обчислюється в процесі трансляції вихідної МК-програми і являє собою сукупність символічних імен і (або) чисел (у форматі 2-байтних слів), що містять наступні основні оператори: "+" - додавання (третій рівень пріоритету); "-" - віднімання (третій рівень пріоритету); "(" - множення (четвертий рівень пріоритету); "/" - ділення (четвертий рівень пріоритету); "((" - зведення в ступінь (п'ятий рівень пріоритету); .OR. - ЧИ (перший рівень пріоритету); .AND. - І (другий рівень пріоритету); .XOR. - що виключає ЧИ (перший рівень пріоритету); .NOT. - заперечення (шостий рівень пріоритету); "<" (">") - виділення молодшого (старшого) байта 2-байтного слова (шостий рівень пріоритету). Оператор з більш високим рівнем пріоритету виконується в першу чергу. Якщо у вираженні присутні оператори з однаковим рівнем пріоритету, то обчислення виробляються ліворуч праворуч. Щоб змінити зазначений порядок виконання розрахунків допускається використовувати дужки. Як приклад приведемо вираження <.NOT.13H+1, що реалізує процедуру перетворення числа 13H у додатковий код і еквівалентне числу 0EDH, що буде отримано при трансляції вихідної МК-програми. Поле <мітка> не є обов'язковим, відокремлюється від поля <команда/директива> пробілом і може містити символічне ім'я безпосередніх даних, одного з регістрів R0-R7, прямої адреси, чи макророзширення адреси переходу в пам'яті програм. Якщо мітка закінчується двокрапкою, то вона може бути розташована в будь-якім місці рядка, у противному випадку мітка повинна починатися на початку рядка. Поле <коментар> містить пояснення різного характеру - може пояснювати застосування тієї чи іншої команди директиви, містити опис алгоритму чи ділянки МК-програм в цілому й ін. Це поле не є обов'язковим і при використанні повинне починатися символом;.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |