Командна система за микроконтролер AVR

показва

Резултатът се съхранява в регистър Rd.

командна

система

микроконтролер

Команди за трансфер на данни.

Фиг. 2.16. LPM команда.

Команди за аритметични и логически операции.

Основните аритметични операции са събиране и изваждане на две числа. Тези команди са предимно обясними. Събирането и изваждането на съдържанието на два регистъра се извършва с помощта на инструкциите ADD и SUB. Модификациите на тези инструкции, които вземат предвид стойността на флага за пренасяне, ви позволяват да извършвате операции с 8-, 16-, 24- и дори 32-битови числа със знак, съхранени в регистри.

Нека обясним функциите на флаговете за отрицателен резултат N (отрицателен), overflow V (препълване) и знак S (знак), тъй като те имат някои особености и са трудни за разбиране при първоначално запознаване.

Флагът за отрицателен резултат N просто копира стойността на бит 7 от резултата, който показва дали резултатът е положително или отрицателно число.

Флагът за препълване V в SREG показва препълване по време на добавяне или изваждане със знак. Разгледайте този пример: ADD R1, R2 Флагът V ще бъде зададен на 1, ако регистрите R1 и R2 съдържат положителни числа и резултатът от тяхното добавяне е по-голям от 127, или и двете числа са отрицателни и резултатът е по-малък от -128. Разгледайте пример с конкретни стойности: LDI R1, 100 ;100 = 0b01100100 LDI R2, 100 ;Въведете 0b01100100 R1 и R2 ДОБАВИ R1, R2 ;R1 = R1 + R2 = 200 = 0b11001000 Десетично число 200 в двоична система записът има стойност на бит 7, равна на 1, което показва отрицателен резултат. Следователно, след извършване на операцията по добавяне, флагът N ще бъде зададен на 1. Но в този случай, заедно с флага N, флагът V също ще бъде зададен на 1, което показва какво се е случилопрепълване при обработка на подписани числа.

Ако съдържанието на R1 = R2 = - 100, тогава резултатът от събирането на тези числа ще бъде 0b00111000 в двоична система, което е положително число. След това флагът N ще бъде нулиран на 0, което показва, че резултатът е положителен, но флагът V ще бъде зададен, което показва, че не е.

Използването на флага S = N ^ V ви позволява да разглеждате резултата като 9-битово число със знак, където най-значимият (знаков) бит е просто флагът S. Както е отбелязано в описанието на флага V, той е настроен на 1, когато бит 7 от резултата има неправилна стойност, тоест резултатът не е представен от правилното число със знак в кода на допълване на две. Чрез XOR на стойността на флага V и бит 7 от резултата, който се съхранява в бит N, получавате реалния знак на резултата. В първия пример (100 + 100) флаговете V и N са зададени на 1, като резултат флагът S ще бъде равен на нула (1 ^ 1 = 0). Във втория пример (- 100 - 100), флагът N се нулира на 0, а флагът V е зададен на 1, така че флагът S ще бъде единица, което показва, че резултатът е отрицателен.

Флагът S трябва да се използва със старшия байт на числото. За операции с 16-, 24- и 32-битови числа стойността на флага S трябва да се проверява само след завършване на последната операция с най-високия байт от числото. Операциите с малък байт използват флага за пренасяне C, както обикновено при извършване на събиране и изваждане.

Разклонителни команди

Командите за относителен скок RJMP и извикване на подпрограма RCALL са основните за промяна на изпълнението на командната последователност в MK. В този случай съдържанието на програмния брояч се променя от стойността на отместването, която е посочена в 12-те най-малко значими бита на командния код.

Друг класкомандите за разклоняване са команди за пропускане. След като проверят определеното условие, тези команди или изпълняват следващата команда, или я пропускат.

Битови команди и битови тестови команди.

Командите за нулиране (изчистване) и задаване на битове са предназначени да променят I/O регистрите. Но някои от тях могат да работят само с част от I / O регистрите. Това означава, че за част от I/O регистрите първо трябва да пренапишете тяхното съдържание в RON, да ги модифицирате и след това да ги запишете обратно в I/O регистъра. За да изпълните тази процедура, можете да напишете специален макрос (макрос).

Често е необходимо да се премести малко от един регистър или променлива в друг. Това може да стане по следния начин: BST B,5 ;Поставете бит 5 ac B в бита T на SREG BLD A,2 ;Запазете бита T на SREG като бит A.2 Командата SWAP разменя високите и ниските битове на регистъра. Това е полезно, когато съхранявате две цифри в регистър, а не едно осембитово число. Командите за преместване и завъртане LSL, LSR, ROL, ROR и ASR са полезни както за извършване на изместване на данни по време на I/O, така и за проверка на стойността на конкретен бит в ROH, без да се налага да извършвате 8 отделни битови тестови операции. Използвайки кръгово изместване, можете индивидуално да проверите всеки бит в дадено място на байт.