MyTetra Share
Делитесь знаниями!
Синтаксис Ассемблера AVR Studio
Время создания: 02.12.2021 17:28
Раздел: Компьютер - Программирование - Ассемблеры - Архитектура AVR - Ассемблер в AVR Studio
Запись: xintrea/mytetra_syncro/master/base/1638455302572l8jgwr6/text.html на raw.github.com

Исходный текст программы на языке ассемблера может быть создан в любом текстовом редакторе и должен быть размещен в файлах с расширениями .asm, .inc или .txt. Удобнее всего для этих целей использовать встроенный в AVR Studio редактор.

Алфавит ассемблера состоит из набора символов ACSII. Однако в комментариях к программам допускается использовать любой удобный язык, основанный на наборе символов в кодировке UNICODE. Изначально ассемблер не чувствителен к регистру символов. Так, например, между тремя именами переменной TEMP, temp, Temp нет ни какой разницы.

Ассемблер может работать с числами, представленными в одной из четырех системах исчисления:


  • десятичной (примеры чисел: 10, 255),
  • шеснадцатиричной (примеры чисел: 0x0A, $FF),
  • двоичной (примеры чисел: 0b00001010, 0b11111111),
  • восмиричной (примеры чисел: 012, 0377).


По умолчанию применяется десятичная система, и любое число без префикса будет воспринято именно как десятичное. Необходимо обратить внимание также на то, что ассемблер AVR не поддерживает распространенную форму записи 16-тиричных чисел c постфиксом “H” (1AH, 0FFH).

В табл.1 приведен список операторов, доступных для использования в числовых выражениях. Операторы расположены в порядке убывания приоритета. Как и всегда, очередность следования арифметических и логических операций можно изменять, применяя круглые скобки.


Табл 1. Арифметические и логические операторы, использующие в числовых выражениях:



Обозначение оператора

Описание

Пример использования

-

Унарный оператор. Изменяет знак числа, используя дополнительный код.

ldi R16,-3   R16 <- 0xFD

*

Бинарный оператор. Производит умножение двух чисел.

ldi R16,x1 * x2 ;R16 <- x1*x2 

/

Бинарный оператор. Производит деление двух чисел.

ldi R16,x1 / x2 ;R16 <- x1/x2 

%

Бинарный оператор. Возвращает целочисленный остаток от деления двух чисел.

ldi R16,x1 % x2 ;R16 <- {x1/x2} 

!

Унарный оператор сравнения. Возвращает 1 если число было равно нулю и 0 если число не было равно нулю.

ldi R16,!x   R16 <- 1 если x = 0

;R16 <- 0 если x ≠ 0 

~

Унарный оператор. Производит инвертирование всех битов в числе.

ldi R16,~0xF0   R16 <- 0x0F

+

Бинарный оператор. Производит сложение двух чисел.

ldi R16,x1 + x2 ;R16 <- x1 + x2 

-

Бинарный оператор. Производит вычитание двух чисел.

ldi R16,x1 - x2 ;R16 <- x1 - x2 

<< 

Бинарный оператор. Производит сдвиг выражения стоящего слева от оператора на число разрядов, стоящих справа от оператора. Сдвиг происходит в левую сторону.  

ldi R16,1<<5   R16 <- 0b00100000

>> 

Бинарный оператор. Производит сдвиг выражения стоящего слева от оператора на число разрядов, стоящих справа от оператора. Сдвиг происходит в правую сторону. 

ldi R16,0x50>>4 ;R16 <- 0b00000101

Бинарный оператор сравнения. Возвращает 1 если число, стоящее слева от оператора, меньше числа, стоящего справа. В противном случае возвращает 0.

ldi R16,x1 < x2 ;R16 <- 1 если x1 < x2 

;R16 <- 0 если x1 >=x2 

<=

Бинарный оператор сравнения. Возвращает 1 если число, стоящее слева от оператора, меньше или равно числу, стоящему справа. В противном случае возвращает 0.

ldi R16,x1 <= x2 ;R16 <- 1 если x1 <=x2 

;R16 <- 0 если x1 > x2 

Бинарный оператор сравнения. Возвращает 1 если число, стоящее слева от оператора, больше числа, стоящего справа. В противном случае возвращает 0.

ldi R16,x1 > x2 ;R16 <- 1 если x1 > x2 

;R16 <- 0 если x1 <=x2 

>=

Бинарный оператор сравнения. Возвращает 1 если число, стоящее слева от оператора, больше или равно числу, стоящему справа. В противном случае возвращает 0.

ldi R16,x1 >= x2 ;R16 <- 1 если x1 >=x2 

;R16 <- 0 если x1 < x2 

==

Бинарный оператор сравнения. Возвращает 1 если числа, стоящие по обе стороны от оператора, равны. В противном случае возвращает 0.

ldi R16,x1 == x2 ;R16 <- 1 если x1 = x2 

;R16 <- 0 если x1 ≠ x2 

!=

Бинарный оператор сравнения. Возвращает 1 если числа, стоящие по обе стороны от оператора, не равны. В противном случае возвращает 0.

ldi R16,x1 != x2 ;R16 <- 1 если x1 ≠ x2 

;R16 <- 0 если x1 = x2 

&

Бинарный оператор. Производит побитовую операцию “Логическое И” между двух чисел.

ldi R16,x1 | x2 ;R16 <- x1|x2 

^

Бинарный оператор. Производит побитовую операцию “Исключающее ИЛИ” между двух чисел.

ldi R16,x1 ^ x2 ;R16 <- x1^x2 

|

Бинарный оператор. Производит побитовую операцию “Логическое ИЛИ” между двух чисел.

ldi R16,x1 & x2 ;R16 <- x1&x2 

&&

Бинарный оператор сравнения. Возвращает 1 если числа, стоящие по обе стороны от оператора, не равны нулю. В противном случае возвращает 0.

ldi R16,x1 && x2 ;R16 <- 1 если x1 и x2 ≠ 0 

;R16 <- 0 если x1 или x2 = 0

||

Бинарный оператор сравнения. Возвращает 1 если хотя бы одно из чисел, стоящих по обе стороны от оператора, не равно нулю. В противном случае возвращает 0.

ldi R16,x1 || x2 ;R16 <- 1 если x1 или x2 ≠ 0 

;R16 <- 0 если x1 и x2 = 0


Ассемблер содержит также ряд встроенных функций. Некоторые из них, имеющие наибольшее практическое значение, приведены в табл.2.


Табл 2. Некоторые встроенные в ассемблер функции:



Обозначение функции

Описание

Пример использования

low()

Функция возвращает младший байт выражения.

low(0x1234)  = 0x34

high(), byte2()

Функция возвращает второй байт выражения.

high(0x1234) = byte2(0x1234) = 0x12

byte3()

Функция возвращает третий байт выражения.

byte3(0xABCD1234) = 0xCD

byte4()

Функция возвращает четвертый байт выражения.

byte4(0xABCD1234) = 0xAB

lwrd()

Функция возвращает младшее слово выражения.

lwrd(0xABCD1234) = 0x1234

hwrd()

Функция возвращает второе слово выражения.

hwrd(0xABCD1234) = 0xABCD

abs()

Функция возвращает абсолютное значение выражения.

abs(-1000) = 1000


Операторы арифметических и логических операций, а также символы “;”, “.”, “(”, “)”, “[”, “]”, “{”, “}”, “?” - зарезервированы компилятором. Они не должны встречаться в обозначениях констант, инструкций и меток. Кроме этого, пользовательские имена, не могут начинаться с цифр и не должны совпадать с названиями регистров (R0…R31,X,Y,Z) и встроенными в ассемблер функциями.


 
MyTetra Share v.0.59
Яндекс индекс цитирования