Система команд мікроконтролера AVR

Результат зберігається у регістрі Rd.



Команди пересилання даних.
Мал. 2.16. Команда LPM.
Команди арифметичних та логічних операцій.
Основними арифметичними операціями є додавання та віднімання двох чисел. Ці команди здебільшого очевидні. Складання та віднімання вмісту двох регістрів проводитися за допомогою команд ADD та SUB. Модифікації цих команд, які враховують значення прапора переносу, дозволяють виконати операції над 8-, 16-, 24- і навіть 32-розрядними числами зі знаком, що зберігаються в регістрах.
Пояснимо функції прапорів негативного результату N (negative), переповнення V (overflow) та знака S (sign), оскільки вони мають деякі особливості та складні розуміння при початковому знайомстві.
Прапор негативного результату N просто копіює значення біта результату 7, який показує, є результат позитивним або негативним числом.
Прапор переповнення V у регістрі SREG вказує на переповнення під час складання чи віднімання чисел зі знаком. Розглянемо приклад: ADD R1, R2 Прапор V буде встановлений в 1, якщо в регістрах R1 і R2 утримуватися позитивні числа, а результат їх складання виявиться більше 127, або обидва числа негативні, а результат буде менше -128. Розглянемо приклад з конкретними значеннями: LDI R1, 100; 100 = 0b01100100 LDI R2, 100; Занести 0b01100100 R1 і R2 ADD R1, R2; Десяткове число 200 у двійковому записі має значення біта 7 рівне 1, що вказує на отримання негативного результату. Отже, після виконання операції додавання прапор N буде встановлений в 1. Але в даному випадку разом з прапором N буде так само встановлений в 1 прапор V, вказуючи, що сталосяпереповнення під час обробки чисел зі знаком.
Якщо вміст R1 = R2 = - 100, то результатом додавання цих чисел буде 0b00111000 у двійковій системі числення, що є позитивним числом. При цьому прапор N буде скинутий в 0, показуючи, що результату позитивний, однак буде встановлено прапор V, що означає, що насправді це не так.
Використання прапора S = N ^ V дозволяє розглядати результат як 9-розрядне число зі знаком, де старшим (знаковим) розрядом і є прапор S. Як було зазначено при описі прапора V, він встановлюється в 1, коли біт 7 результату має неправильне значення, тобто результат не представлений правильним числом зі знаком додаткового коду. Виконавши операцію «ВИКЛЮЧНЕ АБО» над значенням прапора V і біта 7 результату, який зберігається в биті N, ви отримаєте реальний знак результату. У першому прикладі (100 + 100) відбувається установка в 1 прапорів V і N, в результаті прапор S дорівнюватиме нулю (1 ^ 1 = 0). У другому прикладі (- 100 - 100) прапор N скидається в 0, а прапор V встановлюється в 1, тому прапор S дорівнюватиме одиниці, вказуючи на те, що результат негативний.
Прапор S має використовуватися зі старшим байтом числа. При операціях з 16-, 24- та 32-розрядними числами значення прапора S треба перевіряти тільки після завершення останньої операції зі старшим байтом числа. При операціях з молодшими байтами використовується прапор перенесення З, як завжди при виконанні додавання та віднімання.
Команди розгалуження
Команди відносного переходу RJMP і виклику підпрограми RCALL є основними зміни виконання послідовності команд в МК. При цьому вміст програмного лічильника змінюється на величину усунення, яке задається в 12 молодших бітах коду команди.
Ще один класкоманд розгалуження – це команди перепустки. Після перевірки зазначеної умови, ці команди або виконують наступну команду, або пропускають її.
Бітові команди та команди тестування бітів.
Команди скидання (очищення) та встановлення бітів призначені для модифікації регістрів вводу/виводу. Але деякі з них можуть працювати тільки з частиною регістрів вводу/виводу. Це означає, що для певної частини регістрів введення/виводу ви повинні спочатку переписати їх вміст в РОН, модифікувати, а потім знову зберегти в регістрі введення/виводу. Для виконання цієї процедури можна написати спеціальну макрокоманду (макрос).
Часто необхідно переслати біт з одного регістра або змінної до іншого. Це можна зробити наступним чином: BST B,5 ;помістити біт 5 змінно У біт Т регістра SREG BLD A,2 ;зберегти біт Т регістра SREG як біт А.2 Команда SWAP змінює місцями старший та молодший напівбайт регістру. Це корисно, коли ви зберігаєте в регістрі дві цифри, а не одне восьмибітове число. Команди зрушень і циклічних зрушень LSL, LSR, ROL, ROR і ASR корисні як виконання зрушень даних у процесі їх введення виведення, так перевірки значення певного біта в РОН без необхідності виконання 8 окремих операцій тестування бітів. За допомогою циклічного зсуву можна провести індивідуальну перевірку будь-якого біта в заданому місці байта.