ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Короткі теоретичнi відомості.МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ Національний університет "Львівська політехніка"
Інститут екології, природоохоронної діяльності та туризму ім. В.Чорновола
Кафедра “Загальної екології та екоінформаційних систем”
Інструкція до лабораторної роботи №1
з дисципліни «Мікропроцесорні системи»
Тема."Практичне застосування команд однокристального мікроконтролера. Табличне асемблювання програм, написаних на мові Асемблера"
Для студентів базового напряму 6.0915 „Комп’ютерна інженерія”
Затверджено на засіданні кафедри ЗЕС Протокол № 1 від ____.08.2012 р.
Львів – 2012 Мета роботи. 1.1. Вивчення та практичне застосування команд однокристального мікроконтролера сімейства MCS-51 (МК51). 1.2. Засвоєння методики табличного асемблювання програм, написаних на мові Асемблера
Короткі теоретичнi відомості. 2.1. Система команд МК51 2.1.1. Система команд МК51 містить 111 базових команд, які вигідно розділити по функціональних ознаках на п'ять груп: команди передачі даних, арифметичних операцій, логічних операцій, передачі управління та операцій з бітами. До складу системи команд МК51 входять команди множення, ділення, додавання та віднімання, операції над бітами, операції зі стеком та розширений набір команд передачі керування. Більшість команд (94) мають формат один або два байти і виконуються за один або два машинних цикли. При тактовій частоті 12 МГц тривалість машинного циклу складає 1 мкс. Мікроконтролер оперує командами тринадцяти типів:
Перший байт команди любого типу і формату завжди містить код операції (КОП). Другий та третій байти містять або адреси операндів, або безпосередні операнди. 2.1.2. Типи операндів. Склад операндів МК51 включає в себе операнди чотирьох типів: біти, 4-бітні цифри, байти та 16-бітні слова. МК51 має 128 програмнокерованих прапорців користувача (20 – 2F). Можлива також адресація окремих біт блока регістрів спеціальних функцій і портів (*ACC, *B, *PSW, *P0, *P1, *P2, *P3, *IP (регістр пріоритетів), *IE (регістр маски переривань), *TCON (регістр керування /статусу таймера), *SCON (регістр керування прийомо-передавачем),. Для адресації біт використовується пряма 8-бітна адреса (bit). Непряма адресація біт неможлива. Чотирибітні операнди використовуються тільки при операціях обміну (команди SWAP та XCHD). Восьмибітним операндом може бути комірка пам'яті програм або даних (резидентної або зовнішньої), константа (безпосередній операнд), регістри спеціальних функцій (РСФ), а також порти вводу/виводу. Порти та РСФ адресуються тільки прямим способом. Байти пам'яті можуть адресуватися також непрямим способом через адресні регістри (R0, R1, DPTR та PC). Двобайтні операнди - це константи та прямі адреси, для представлення яких використовуються другий та третій байти команди. 2.1.3. Способи адресації даних. пряма, безпосередня, непряма та неявна. Система команд МК51 допускає велику кількість комбінацій способів адресації операндів в командах, що робить її гнучкою та універсальною. Прапорці результату. Слово стану програми (PSW) включає в себе чотири прапорці: С - перенос, АС - допоміжний перенос, OV - переповнення та Р - паритет. Прапорець паритету напряму залежить від поточного значення акумулятора. Якщо число одиничних біт акумулятора непарне то прапорець Р встановлюється, а якщо парне - скидується. Прапорець Р не може бути змінений примусово. При виконанні операцій множення та ділення прапорець С скидається. Прапорець ОV встановлюється, якщо результат операції додавання/віднімання не вкладається у сім біт і старший (восьмий) біт результату не може інтерпретуватися як знаковий. При виконанні операції ділення прапорець ОV скидується, а у випадку ділення на нуль - встановлюється. При множенні прапорець ОV встановлюється, якщо результат більший 255. Всі команди, в результаті виконання яких модифікуються прапорці, перераховані в таблиці:
В таблиці відсутній прапорець паритету, так як його значення змінюється всіма командами, які змінюють вміст акумулятора. Крім команд, наведених в таблиці, прапорці модифікуються командами, в яких місцем призначення результату визначені PSW або його окремі біти, а також командами операцій над бітами. Символічна адресація. При використанні асемблера МК51 (X8051) для отримання об'єктних кодів допускається використання в програмах символічних імен РСФ, портів та їх визначених біт. Для адресації окремих біт РСФ та портів (така можливість є не у всіх РСФ) можна використати символічне ім'я біту такої структури: <ім'я РСФ або порту>. <номер біта> Наприклад, символічне ім'я п'ятого біта акумулятора буде таким: АСС.5. Символічні імена РСФ, портів та їх біт є зарезервованими словами для асемблера, і їх непотрібно визначати за допомогою директив асемблера. 2.1.4. Група команд передачі даних. Більшу частину команд цієї групи складають команди передачі та обміну байт. Команди пересилки біт представлені в групі команд бітових операцій. Всі команди цієї групи не модифікують прапорців результату, за винятком команд завантаження PSW та акумулятора (прапорець паритету). Передачі даних в МК51 можуть виконуватися без участі акумулятора. Звертання до акумулятора може бути виконано в К51 з використанням неявної та прямої адресації. В залежності від способу адресації акумулятора застосовується одне з символічних імен: А або АСС (пряма адреса). При прямій адресації звернення до акумулятора проводиться як до одного з РСФ, і його адреса вказується у другому байті команди. Використання непрямої адресації акумулятора переважаюче, але не завжди можливе, наприклад при зверненні до окремих біт акумулятора.
2.1.5. Група команд арифметичних операцій. Цю групу утворюють 24 команди, що виконують операції додавання, десяткової корекції, інкременту/декременту байтів множення та ділення байтів. Команди ADD і ADDC допускають додавання акумулятора з великою кількістю операндів. Аналогічно командам АDDC існують чотири команди SUBB, що дозволяють проводити віднімання байтів і багатобайтних двійкових чисел. В МК51 реалізується розширений список команд інкременту/декременту байтів, команда інкременту 16-бітного регістра-вказівника даних. 2.1.6. Група команд логічних операцій. Цю групу утворюють 25 команд, що реалізують логічні операції над байтами. Існує можливість проводити операцію "виключаюче АБО" із вмістом портів. Команда XRL може бути ефективно використана для інверсії окремих біт портів. 2.1.7. Група команд операцій з бітами. Особливістю цієї групи команд є те що вони оперують однобітними операндами. В якості таких операндів можуть бути окремі біти деяких регістрів спеціальних функцій (РСФ) і портів, а також 128 програмно-досяжних прапорців користувача. Існують команди скиду (CLR), встановлення (SETB) та інверсії (CPL) біт, а також кон'юнкції та диз'юнкції біту і прапорця переносу. Для адресації біт використовується пряма восьмирозрядна адреса (bit). Непряма адресація біт неможлива. 2.1.8. Група команд передачі керування. До цієї групи команд відносяться команди, що забезпечують умовне і безумовне розгалуження, виклик підпрограм і повернення з них, а також команда порожньої операції NOP. В більшості команд використовується пряма адресація, тобто адреса переходу повністю (або його частина) міститься в самій команді передачі керування. Можна виділити три різновиди команд розгалуження по розрядності вказаної адреси переходу: * Довгий перехід. Перехід по всьому адресному простору ПП. В команді міститься повна 16-бітна адреса переходу (ad 16). Трибайтна команда довгого переходу містить у мнемокоді літеру L(Long). Всього існують дві такі команди: LJMP - довгий перехід і LCALL - довгий виклик підпрограми. На практиці рідко виникає необхідність переходу в межах цілого адресного простору і частіше використовуються скорочені команди переходу, які займають менше місця в пам'яті. * Абсолютний перехід. Перехід в межах однієї сторінки пам'яті програм розміром 2048 байт. Такі команди містять тільки 11 біт адреси переходу (ad11). Команда абсолютного переходу має формат 2 байти. Початкова літер мнемокоду - А(Absolute). При виконанні команди в обчисленій адресі наступної за порядком команди ((PC)=(PC)+2) 11 молодших біт замінюються на ad11 з тіла команди абсолютного переходу. * Відносний перехід. Короткий відносний перехід дозволяє передати керування в межах -128 - +127 байт відносно адреси наступної команди (команди, що іде за порядком за командою відносного переходу). Існує одна команда безумовного короткого переходу SJMP (Short). Всі команди умовного переходу використовують цей метод адресації. Відносна адреса переходу (rel) міститься у другому байті команди. * Непрямий перехід. Команда JMP @A+DPTR дозволяє передавати керування за непрямою адресою. Ця команда вигідна тим, що надає можливість організації переходу за адресою, яка вираховується самою програмою і невідомою при написанні вихідного тексту програми. * Умовні переходи. Розвинута система умовних переходів дає можливість робити розгалуження на таких умовах: акумулятор містить нуль (JZ); вміст акумулятора не дорівнює нулю (JNZ); перенос дорівнює одиниці (JC); перенос дорівнює нулю (JNC); адресований біт дорівнює одиниці (JB); адресований біт дорівнює нулю (JNB). Для організації програмних циклів зручно користуватись командою DJNZ. В якості лічильника циклів в МК51 може використовуватись не тільки регістр, а й прямоадресований байт (наприклад, комірка РПД). Команда CJNE ефективно використовується в процедурах очікування якоїсь події. Наприклад, команда WAIT: CJNE A,P0,WAIT буде виконуватись доти, доки на лініях порту 0 не встановиться інформація, співпадаюча з вмістом акумулятора. Всі команди цієї групи, за виключенням CJNE і JBC, не діють на прапорці. Команда CJNE встановлює прапорець С, якщо перший операнд виявляється менший другого. Команда JBC скидає прапорець С у випадку переходу. Підпрограми. Для звернення до підпрограм необхідно використати команди виклику підпрограм (LСАLL, ACALL). Ці команди на відміну від команд переходу (LJMP, AJMP) зберігають в стеку адресу повернення в основну програму. Для повернення з підпрограми треба виконати команду RET. Команда RETI відрізняється від команди RET тим, що дозволяє переривання обслуженого рівня.
2.2. Процедура асемблювання програми 2.2.1. В ЕОМ всі команди представлені машинним (двійковим) кодом. Для полегшення запам'ятовування команд в мові Асемблера використовуються мнемокоди команд, які являють собою скорочення від повного англійського найменування команди. Для представлення символьної інформації використовується код КОІ-7. Результатом асемблювання програми, написаної на мові Асемблера є об'єктний код програми, тобто її машинний (двійковий) код. Мова асемблера ізоморфна машинній мові, тобто кожній команді (оператору) мови асемблера відповідає, як правило, одна машинна команда. 2.2.2. Програма на мові асемблера являє собою послідовність операторів, кожний з яких записується в один рядок. Оператор мови асемблера звичайно має чотири поля, однак одне (або більше) з цих полів в конкретному операторі може бути пустим. Поля можуть відділятися одне від одного довільною кількістю пробілів. Перше поле зветься полем міток і використовується для визначення символічних імен даних. Мітка - літерно-числова комбінація, що починається тільки з літери. Закінчується двокрапкою ”:”. Псевдокоманди асемблера не перетворюються в двійкові коди, а тому не можуть мати міток (за виключенням DS, DB, DW). У псевдокоманд, що здійснюють визначення символічних імен, у полі мітки записується символічне ім’я, яке визначається, після якого двокрапка не ставиться. Друге поле (поле операндів) вміщає мнемонічний код операції, що реалізується поточним оператором. Третє поле (поле операндів) задає аргументи виконуваної операції. Операнд може бути заданий безпосередньо або у вигляді його адреси (прямої або непрямої). Безпосередній операнд представляється числом або символічним іменем. Якщо операнд задається числом, перед ним записується символ “ # “. Пряма адреса може бути задана мнемонічним позначенням, числом, символічним іменем. Ознакою непрямої адреси є символ “ @ “. У командах передачі керування операндом може бути число, мітка, непряма адреса. Числа повинні вказуватись з ознакою системи числення. Четверте поле (поле коментарів) не впливає на об'єктну програму і використовується для запису коментарів. Починається з “;”. Програма на мові асемблера звичайно вміщає два типа символів: завчасно визначені і приписані сегментам даних і команд програмістом. В полі операндів можуть задаватися арифметичні або логічні вирази. Асемблер обчислює ці вирази і використовує результат як значення операнду для даного оператора. 2.2.3. Псевдокоманди.. Асемблююча програма транслює вихідну програму в об’єктні коди. Хоча транслююча програма бере на себе багато рутинних завдань програміста, таких, як присвоєння дійсних адрес, перетворення чисел, присвоєння дійснмх значень символьним змінним та ін., прграміст все ж повинен вказати їй деякі параметри: початкову адресу програми, кінець програми тощо. Всю цю інформацію програміст вставляє у вихідний текст своєї програми у вигляді псевдокоманд (директив) Асемблера, які тільки керують процесом трансляції і не перетворюються у коди об’єктної програми. Оператори мови асемблера, які використовуються для керування програмою, можна класифікувати таким чином: визначення імен (EQU, SET, BIT); визначення даних (DB, DW); визначення пам'яті (DS); закінчення асемблювання (END); керування програмними сегментами (ORG). Псевдокоманди визначення імені. Асемблер автоматично присвоює значення іменам, які визначені як мітки команд. Ці значення визначаються такими, що дорівнюють поточному значенню лічильника команд у процесі асемблювання команди. Але у програмі можна визначити інші імена і присвоїти їм значення, використовуючи псевдокоманди EQU, REG i SET. Імена, що визначені псевдокомандами EQU та REG, не можуть бути перевизначені під час поточного процесу асемблювання. Якщо ж ім'я визначене псевдокомандою SET, воно може бути в подальшому багаторазово перевизначене. Імена, визначені псевдокомандами EQU, REG i SET, не повинні відділятись двокрапкою від псевдокоманди. Псевдокоманда EQU присвоює розташованому у полі мітки імені значення у полі операнду. Наприклад, псевдокоманда: ONES EQU FFh помістить ім'я ONES у таблицю символів і надасть йому значення FF. Вираз у полі операнду не може бути зовнішнім іменем або включати зовнішнє ім'я. Обчислення значення виразу у псевдокоманді EQU робиться по модулю 2 16, і, таким чином, воно завжди знаходиться в межах від 0 до 65 535 включно. Псевдокоманда SET присвоює імені у полі мітки значення виразу, розташованого в полі операнду. Асемблер вводить це ім’я в таблицю символів і кожний раз, коли вираз для цього імені обчислюється заново, асемблер заміняє це значення в таблиці. Функції псевдокоманди SET ідентичні функціям псевдокоманди EQU, за виключенням того, що одне й теж саме ім'я може бути багаторазово перевизначено псевдокомандами SET у процесі асемблювання. Значення виразу завжди обчислюється по модулю 2 16.
Не нашли, что искали? Воспользуйтесь поиском:
|