Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 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

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Радиореле 220В Модуль радиореле на 4 канала
вверх