Арифметические и логические инструкции

Лекция 3

Основы программирования на ассемблере AVR

Компилятор транслирует исходные коды с языка ассемблера в объектный код. Полученный объектный код можно использовать в симуляторе ATMEL AVR Studio, либо в эмуляторе ATMEL AVR In-Circuit Emulator. Компилятор также генерирует код, который может быть непосредственно запрограммирован в микроконтроллеры AVR.

Компилятор генерирует код, который не требует линковки.

Компилятор работает под Microsoft Windows 3.11, Microsoft Windows95 и Microsoft Windows NT. Кроме этого есть консольная версия для MS-DOS.

Набор инструкций семейства микроконтроллеров AVR описан в данном документе кратко, для более полной информации по инструкциям обращайтесь к полному описанию инструкций и документации по конкретному микроконтроллеру.

Исходные коды

Компилятор работает с исходными файлами, содержащими инструкции, метки и директивы. Инструкции и директивы, как правило, имеют один или несколько операндов.

Строка кода не должна быть длиннее 120 символов.

Любая строка может начинаться с метки, которая является набором символов заканчивающимся двоеточием. Метки используются для указания места, в которое передаётся управление при переходах, а также для задания имён переменных.

Входная строка может иметь одну из четырёх форм:

[метка:] директива [операнды] [Комментарий]
[метка:] инструкция [операнды] [Комментарий]
Комментарий
Пустая строка

Комментарий имеет следующую форму:

; [Текст]

Позиции в квадратных скобках необязательны. Текст после точки с запятой (;) и до конца строки игнорируется компилятором. Метки, инструкции и директивы более детально описываются ниже.

Примеры:

label:.EQU var1=100; Устанавливает var1 равным 100 (Это директива)
.EQU var2=200; Устанавливает var2 равным 200

test: rjmp test; Бесконечный цикл (Это инструкция)
; Строка с одним только комментарием

; Ещё одна строка с комментарием

Компилятор не требует чтобы метки, директивы, комментарии или инструкции находились в определённой колонке строки.

Инструкции процессоров AVR

Ниже приведен набор команд процессоров AVR, более детальное описание их можно найти в AVR Data Book.

Арифметические и логические инструкции

Мнемоника Операнды Описание Операция Флаги Циклы
ADD Rd,Rr Суммирование без переноса Rd = Rd + Rr Z,C,N,V,H,S  
ADC Rd,Rr Суммирование с переносом Rd = Rd + Rr + C Z,C,N,V,H,S  
SUB Rd,Rr Вычитание без переноса Rd = Rd - Rr Z,C,N,V,H,S  
SUBI Rd,K8 Вычитание константы Rd = Rd - K8 Z,C,N,V,H,S  
SBC Rd,Rr Вычитание с переносом Rd = Rd - Rr - C Z,C,N,V,H,S  
SBCI Rd,K8 Вычитание константы с переносом Rd = Rd - K8 - C Z,C,N,V,H,S  
AND Rd,Rr Логическое И Rd = Rd · Rr Z,N,V,S  
ANDI Rd,K8 Логическое И с константой Rd = Rd · K8 Z,N,V,S  
OR Rd,Rr Логическое ИЛИ Rd = Rd V Rr Z,N,V,S  
ORI Rd,K8 Логическое ИЛИ с константой Rd = Rd V K8 Z,N,V,S  
EOR Rd,Rr Логическое исключающее ИЛИ Rd = Rd EOR Rr Z,N,V,S  
COM Rd Побитная Инверсия Rd = $FF - Rd Z,C,N,V,S  
NEG Rd Изменение знака (Доп. код) Rd = $00 - Rd Z,C,N,V,H,S  
SBR Rd,K8 Установить бит (биты) в регистре Rd = Rd V K8 Z,C,N,V,S  
CBR Rd,K8 Сбросить бит (биты) в регистре Rd = Rd · ($FF - K8) Z,C,N,V,S  
INC Rd Инкрементировать значение регистра Rd = Rd + 1 Z,N,V,S  
DEC Rd Декрементировать значение регистра Rd = Rd -1 Z,N,V,S  
TST Rd Проверка на ноль либо отрицательность Rd = Rd · Rd Z,C,N,V,S  
CLR Rd Очистить регистр Rd = 0 Z,C,N,V,S  
SER Rd Установить регистр Rd = $FF None  
ADIW Rdl,K6 Сложить константу и слово Rdh:Rdl = Rdh:Rdl + K6 Z,C,N,V,S  
SBIW Rdl,K6 Вычесть константу из слова Rdh:Rdl = Rdh:Rdl - K 6 Z,C,N,V,S  
MUL Rd,Rr Умножение чисел без знака R1:R0 = Rd * Rr Z,C  
MULS Rd,Rr Умножение чисел со знаком R1:R0 = Rd * Rr Z,C  
MULSU Rd,Rr Умножение числа со знаком с числом без знака R1:R0 = Rd * Rr Z,C  
FMUL Rd,Rr Умножение дробных чисел без знака R1:R0 = (Rd * Rr) << 1 Z,C  
FMULS Rd,Rr Умножение дробных чисел со знаком R1:R0 = (Rd *Rr) << 1 Z,C  
FMULSU Rd,Rr Умножение дробного числа со знаком с числом без знака R1:R0 = (Rd * Rr) << 1 Z,C  

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: