|
||||||||||||||||||||||||||||
Директивы Ассемблера AVR Studio
Время создания: 02.12.2021 17:30
Раздел: Компьютер - Программирование - Ассемблеры - Архитектура AVR - Ассемблер в AVR Studio
Запись: xintrea/mytetra_syncro/master/base/1638455415nseaby7wbu/text.html на raw.github.com
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Директивы представляют собой команды управления компилятором. Объявление каждой из них должно начинается с точки. Практика показывает, что в любом ассемблере наиболее интенсивно используется только порядка 10…20 директив. Все остальные либо не являются обязательными, либо отвечают за управление, лишь незначительными свойствами компилятора. К “основным”, характерным и для ассемблеров других процессоров, относятся директивы .equ, .org, .def, .сseg, .dseg и т.д. Ну, а такие директивы, как .dq, .exit, .listmac в реальных программах встречаются действительно очень редко. Ниже приведен перечень, описание и примеры использования директив фирменного ассемблера микроконтроллеров AVR. Директива .include подставляет текстовый файл в то место программы, где происходит ее употребление. В дополнении к этому сам файл подстановки также может содержать директиву .include. Если файл расположен в директории проекта или в одной из служебных папок, то вместо полного пути, допускается указывать, лишь ссылку на его имя. Директива .include Синтаксис написания: .include "{путь к файлу}" Пример использования:
Директива .exit указывает ассемблеру место окончания файла исходного текста. Все операторы, находящиеся после директивы, становятся невидимыми для компилятора. Если .exit встречается в подключаемом файле, то сборка проекта заканчивается строкой, где расположена директива .include. В случае отсутствия директивы .exit, конечной точкой сборки считается последняя строка исходного текста. Директива .exit Синтаксис написания: .exit Пример использования:
Директивы .nolist и .list служат для управления файлом листинга, который обычно генерируется после сборки проекта. Первая из них запрещает, а другая, соответственно, разрешает вывод информации в файл. Директива .list отменяет действие .nolist и наоборот. Директивы .nolist, .list Синтаксис написания: .nolist, .list Пример использования:
Директива .equ присваивает символьному имени некоторое числовое значение. Символьное имя должно быть уникальным и не может быть изменено в процессе написания программы. Директива не может применяться для назначения символьных имен регистрам общего назначения. Директива .equ Синтаксис написания: .equ {символьное имя} = {выражение} Пример использования:
Директива .set производит то же самое действие, что и .equ. Но в отличии от последней, символьное имя может быть переопределено в любом месте программы. Директива .set Синтаксис написания: .set {символьное имя} = {выражение} Пример использования:
Директива .def присваивает символьное имя одному из регистров общего назначения. В дальнейшем ходе программы данное имя может быть отменено директивой .undef. Директивы .def, .undef Синтаксис написания: .def {символьное имя} = {регистр} .undef {символьное имя} Пример использования:
Директивы .db, .dw, .dd, .dq предназначены для резервирования памяти микроконтроллера под инициализированные данные. Все они могут применяться только в сегментах кода и EEPROM-памяти. Разница между этими директивами заключается в разрядности, представляемых данных. Директива .db резервирует байты, .dw – слова, .dd – двойные слова. В редких случаях может так же оказаться удобным использование директивы .dq, резервирующей 64-разрядные данные. Директивы .db, .dw, .dd, .dq Синтаксис написания: {метка}: .db {8-разрядные данные} {метка}: .dw {16-разрядные данные} {метка}: .dd {32-разрядные данные} {метка}: .dq {64-разрядные данные} Пример использования:
Директива .byte резервирует память под неинициализированные данные в сегментах SRAM и EEPROM. Директива .byte Синтаксис написания: {метка}: .byte {количество резервируемых данных} Пример использования:
Директивы .dseg, .eseg, .cseg определяют начало сегментов данных, EEPROM-памяти и кода соответственно. В исходном файле каждый из сегментов может быть представлен только в одном экземпляре. В случае если все эти директивы отсутствуют в программе, компилятор по умолчанию считает, что все операторы расположены в секции кода. Директивы .dseg, .eseg, .cseg Синтаксис написания: .dseg .eseg .cseg Пример использования:
Директива .org позволяет задать компилятору начальный адрес в пределах сегментов кода, данных и EEPROM-памяти. В случае применения в сегменте кода, директива определяет адрес размещения 16-разрядного слова программ. Директива .org Синтаксис написания: .org {начальный адрес} Пример использования:
Директивы .macro, .endmacro (.endm), определяющие начало и конец макроса соответственно. Директивы .macro, .endmacro (.endm) Синтаксис написания: .macro {имя макроса} Пример использования:
Директива .listmac разрешает расширенный вывод текста макросов в файле листинга. В этом случае содержимое каждого макроопределения, встретившегося в программе, отображается целиком. Если директива не используется, то код в нутрии макроса не приводится. Директива .listmac Синтаксис написания: .listmac Пример использования:
Директивы .message, .warning, .error предназначены для вывода в окно сборки проекта дополнительной информации о ходе компиляции программы. Директива .message генерирует сообщение для строки, в которой был встречен ее вызов. Применение .warning приводит к выдачи предупреждения, а .error – к сообщению об ошибки. В последнем случае сборка проекта прекращается. Директивы .message, .warning, .error Синтаксис написания: .message "{текст сообщение}" .warning "{текст предупреждения}" .error "{текст соодщения об ошибки}" Пример использования:
Группа директив условной компиляции .ifdef, .ifndef, .if, .else, elif, .endif используются для вставок программного кода в зависимости от различных условий. Директива .ifdef проверяют наличие объявления некоторого символьного имени. За директивой может следовать набор команд, которые будут подставлены в текст, если условие проверки “истина” (имя было объявлено). Директива .ifndef противоположна .ifdef проверяет отсутствие объявления символьного имени. Директива .if производит подстановку кода, когда выполняется условие сравнения, указанное в качестве ее параметра. Команды, которые должны выполняться, в случае если условие директивы .if “ложно” – располагаются после директивы .else. Ветвление типа “если” - “то” может иметь несколько уровней вложения благодаря директиве .elif. Каждый блок проверки, начинающийся с .ifdef, .ifndef, .if, должен быть закрыт директивой .endif. Директивы .if, .ifdef, .ifndef, .else, .elif, .endif Синтаксис написания: .ifdef {символ} (или .ifndef {символ}) .if {условие} .else {выражение} (или .elif { условие}) .endif Пример использования:
|
||||||||||||||||||||||||||||
Так же в этом разделе:
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|