Главная » Микроконтроллеры
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Синтаксис ассемблера

Исходный текст программы на языке ассемблера может быть создан в любом текстовом редакторе и должен быть размещен в файлах с расширениями .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) и встроенными в ассемблер функциями.

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Солнечная панель 10Вт 12В поликристаллическая Конструктор УНЧ 60 Вт на LM3886
вверх