Ассемблер микроконтроллеров AVR и его особенности
|
Ассемблер микроконтроллеров AVR и его особенностиОбщая информацияЗдесь представлена информация по ассемблеру всей серии AVR, т.к. все микроконтроллеры этой серии программно совместимы. Исходный файл, с которым работает ассемблер, должен содержать мнемоники, директивы и метки. Строка программы может быть в одной из четырёх форм: [ Метка:] директива [операнды] [Комментарий] Комментарий имеет следующую форму: ; [Текст] Таким образом любой текст после символа “ ; ” игнорируется ассемблером и имеет значение только для пользователя. Операнды можно задавать в различных форматах: - десятичный (по умолчанию): 10,255
2 Система командСистема команд микроконтроллеров ATMEL семейства AVR очень большая и в то же время эффективная. Одной из отличительных особенностей микроконтроллеров AVR является то, что почти все команды выполняются за 1 тактовый цикл. Исключение составляют команды перехода. Это существенно увеличивает производительность микроконтроллера даже при относительно невысокой тактовой частоте. Все команды можно классифицировать на 5 типов:
3 Директивы ассемблераАссемблер поддерживает множество директив. Директивы не транслируются непосредственно в коды операции. Напротив, они используются, чтобы корректировать местоположение программы в памяти, определять макрокоманды, инициализировать память и так далее. То есть это указания самому ассемблеру, а не команды микроконтроллера. Таблица 1.2.
Синтаксис всех директив следующий: CSEG - Code segmentДиректива CSEG указывает на начало сегмента кодов. Ассемблируемый файл может иметь несколько кодовых сегментов, которые будут объединены в один при ассемблировании. .CSEG DSEG - Data SegmentДиректива DSEG указывает на начало сегмента данных. Ассемблируемый файл может содержать несколько сегментов данных, которые потом будут собраны в один при ассемблировании. Обычно сегмент данных состоит лишь из директив BYTE и меток. Синтаксис: .DSEG ESEG - EEPROM SegmentДиректива ESEG указывает на начало сегмента EEPROM памяти. Ассемблируемый файл может содержать несколько EEPROM сегментов, которые будут собраны в один сегмент при ассемблировании. Обычно сегмент EEPROM состоит из DB и DW директив (и меток). Сегмент EEPROM памяти имеет свой собственный счетчик. Директива ORG может использоваться для размещения переменных в нужной области EEPROM. .ESEG Пример: .DSEG ; Начало сегмента данных ORG - Установить адрес начала программыДиректива ORG присваивает значения локальным счетчикам. Используется только совместно с директивами .CSEG, .DSEG, .ESEG. .ORG адрес Пример: .DSEG ; Начало сегмента данных DB - определить байт(ы) в программной памяти или в EEPROMДиректива DB резервирует ресурсы памяти в программной памяти или в EEPROM. Директиве должна предшествовать метка. DB задает список выражений, и должна содержать по крайней мере одно выражение. Размещать директиву следует в сегменте кодов или в EEPROM сегменте. Список выражений представляет собой последовательность выражений, разделенных запятыми. Каждое выражение должно быть величиной между –128 и 255. Если директива указывается в сегменте кодов и список выражений содержит более двух величин, то выражения будут записаны так, что 2 байта будут размещаться в каждом слове Flash-памяти. Синтаксис: LABEL: .DB список выражений Пример: .CSEG
DW – Определить слово(а) в программной памяти или в EEPROMДиректива DW резервирует ресурсы памяти в программной памяти или в EEPROM. Директиве должна предшествовать метка. DW задает список выражений, и должна содержать по крайней мере одно выражение. Размещать директиву следует в сегменте кодов или в EEPROM сегменте. Список выражений представляет собой последовательность выражений, разделенных запятыми. Каждое выражение должно быть величиной между –32768 и 65535. Синтаксис: LABEL: .DW список выражений Пример: .CSEG DEF – Присвоить имя регистру Директива DEF позволяет присвоить символическое имя регистру. Регистр может иметь несколько символических имен. .DEF Имя=Регистр Пример: .DEF temp=R16 EQU – Присвоить имя выражениюДиректива EQU присваивает значение метке. Эта метка может быть использована в других выражениях. Значение этой метки нельзя изменить или переопределить. Синтаксис: .EQU метка=выражение Пример: .EQU io_offset = 0x23 INCLUDE –вставить другой файл Директива INCLUDE говорит Ассемблеру начать читать из другого файла. Ассемблер будет ассемблировать этот файл до конца файла или до директивы EXIT. Включаемый файл может сам включать директивы INCLUDE. .INCLUDE "имя файла" Пример: ; iodefs.asm: EXIT – выйти из файла Директива EXIT позволяет ассемблеру остановить ассемблирование текущего файла. Обычно ассемблер работает до конца файла. Если он встретит директиву EXIT, то продолжит ассемблировать со строки, следующей за директивой INCLUDE. .EXIT Пример: .EXIT ; выйти из этого файла DEVICE - Указать для какого микроконтроллера ассемблировать .DEVICE AT90S1200 |AT90S2313 | AT90S2323 | AT90S2333 | AT90S2343 | AT90S4414 | AT90S4433 | AT90S4434 | AT90S8515 | AT90S8534 | AT90S8535 | ATtiny11 | ATtiny12 | ATtiny22 | ATmega603 | ATmega103 Пример: .DEVICE AT90S8535 ; использовать AT90S8535 Память данных почти полностью доступна программе пользователя и большинство команд ассемблера предназначено для обмена данными с ней. Команды пересылки данных предоставляют возможность непосредственной и косвенной адресации ячеек СОЗУ, непосредственной адресации регистров ввода/вывода и регистров общего назначения. Так как каждому регистру сопоставлена ячейка памяти, то обращаться к ним можно не только командами адресации регистров, но и командами адресации ячеек СОЗУ. Например, команда: MOV R10,R15 - скопировать регистр R15 в регистр R10 LDI R16,$FF Например: .dw $033f,$676d,$7653,$237e,$777f CPI Rd,K - сравнить регистр Rd с константой К. 16<d<31. |
|||||||||||||||||||||||||||||||||
