MyTetra Share
Делитесь знаниями!
Ассемблер для контроллеров AVR - Часть 2 - Синтаксис AVR ассемблера
Время создания: 02.12.2021 15:35
Раздел: Компьютер - Программирование - Ассемблеры - Архитектура AVR - Лекция - Синтаксис языка ассемблера для микроконтроллеров AVR
Запись: xintrea/mytetra_syncro/master/base/1638448559kn7o44n940/text.html на raw.github.com

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

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

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

[метка:] директива [операнды] [Комментарий] 


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


Комментарий 


Пустая строка.

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

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

; [Текст]

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

Метки, инструкции и директивы более детально описываются ниже. 

Примеры:

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


            .EQU var2=200       ; Устанавливает var2 равным 200 


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

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

Основной синтаксис AVRASM совместим с AVRASM2 с  исключениями, отмеченными  ниже:

  •  Ключевые слова.
  •  Директивы препроцессора.
  •  Комментарии.
  •  Продолжения строк.
  •  Строки и символьные константы.
  •  Составные инструкции в строке.

Ключевые слова. В отличие от AVRASM встроенные идентификаторы (ключевые слова) зарезервированы и не могут быть переопределены. Ключевые слова включают все инструкции (команды), регистры R0-R31 и X, Y, Z и все функции. Ключевые слова Ассемблер распознаёт независимо от регистра, в котором они набраны, за исключением чувствительных к регистру опций, в которых ключевые слова набираются в нижнем регистре (т.е. "add" зарезервирован, а "ADD" – нет). 

Директивы препроцессора. AVRASM2 считает директивами препроцессора все строки, начинающиеся с '#' (или первый непустой символ в строке, так как пробелы и символы табуляции игнорируются).

Комментарии. Дополнительно к классическим комментариям Ассемблера, начинающимся с ';', AVRASM2 признает комментарии в Cистиле:

. . . . . . . . . .    ;  Остальная часть строки является комментарием.


// Подобно ';' остальная часть строки является комментарием. 


/* Блок комментариев  может располагаться в нескольких строках.     Этот стиль комментариев не может быть вложенным */

Ассемблер  распознает разделители комментария (';') в стиле AVRASM, а также комментарии Cи-стиля. Однако ';' используется в синтаксисе языка Cи, что может привести к конфликту при использовании ';' в качестве разделителя комментария, поэтому не рекомендуется использовать комментарии в стиле Ассемблера вместе с директивами препроцессора AVRASM2.

Продолжение строки. Подобно Cи, строки исходных кодов могут быть продолжены  посредством '\ '– обратной косой черты в конце строки. Это особенно полезно для длинных макроопределений препроцессора и для длинных директив .db.

Пример:

.db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11,12, 21, 214,235,634,  \n', 0, 2, \ 


12, 3,"’это продолжение  верхней строки", '\n', 0, 3, 0

Строки и символьные константы. AVRASM2 понимает строки и символы так же, как AVRASM, кроме того, служебные символы, которые не поддерживаются AVRASM. Строка, заключенная в двойные кавычки ("), может быть использована только вместе с директивой .db. Строка передается буквально, никакие служебные символы и NUL-окончания не распознаются. Символьные константы, заключенные в одиночные кавычки ('), могут использоваться везде, где допустимо целое выражение. Служебные символы в  Cи-стиле распознаются с тем же значением, как в Cи (табл. 1).

Таблица 1 Служебные символы в Си-стиле


Служебные символы

Назначение

\n

Конец строки (ASCII LF 0x0a)

\r

Перевод строки (ASCII CR 0x0d)

\a

Звуковой сигнал Alert bell (ASCII BEL 0x07)

\b

Возврат каретки (ASCII BS 0x08)

\f

Подача формы (ASCII FF 0x0c)

\t

Горизонтальная таб. (ASCII HT 0x09)

\v

Вертикальная таб. (ASCII VT 0x0b)

\\

Обратная косая черта 

\0

Нулевой символ (ASCII NUL)

 

Ассемблером также распознаются \ooo (ooo = восьмеричное число) и \xhh (hh = шестнадцатеричное число).

Примеры:

.db "Hello\n"  // - эквивалент:


.db 'H', 'e', 'l', 'l', 'o', '\\', 'n,

Для того чтобы создать эквивалент Cи-строки "Привет, мир \n", делают следующим образом:

.db " Hello, world", '\n', 0

Составные инструкции в строке. AVRASM2 допускает составные инструкции (команды) и директивы в строке, но их использование не рекомендовано. Это нужно для того, чтобы поддерживать распаковку  (расширение) многострочных макроопределений препроцессора.

Операнды. Дополнительно к операндам AVRASM AVRASM2 поддерживает  выражения с плавающей точкой.


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